sql >> データベース >  >> RDS >> Mysql

MySQLのカレンダーイベントとリマインダーのデータベースを設計するためのガイド

    このチュートリアルでは、ユーザーのカレンダーイベントを管理し、リマインダーを保存するためのカレンダーイベントおよびリマインダーシステムのデータベーススキーマを設計するための完全な手順を提供します。さらに拡張して、システムユーザー以外の他のエンティティのイベントやリマインダーを管理するために使用できます。

    実体関連図または視覚的なデータベース設計を以下に示します。

    カレンダーイベントとリマインダーデータベースの設計

    また、Ubuntu 20.04LTSにMySQL8をインストールする方法、WindowsにMySQL 8をインストールする方法、UbuntuにMySQL Workbenchをインストールする方法、Windows10にWorkbenchを使用してMySQL8をインストールする方法、MySqlのRBACデータベースなどの人気のあるチュートリアルにアクセスすることもできます。 MySqlのブログデータベース、MySQLのクイズデータベース、MySQLのPoll&Surveyデータベース、MySQLのオンラインショッピングカートデータベース、MySQLの基本的なSQLクエリを学ぶ。

    カレンダーデータベース

    最初のステップは、カレンダーデータベースを作成することです。以下に示すクエリを使用して作成できます。

    CREATE SCHEMA `calendar` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    文字セットutf8mb4を使用しました 幅広いキャラクターをサポートします。

    ユーザーテーブル

    このセクションでは、ユーザーテーブルを設計します ユーザー情報を保存します。ユーザーは自分のイベントやリマインダーを管理できます。以下は、ユーザーテーブルのすべての列の説明です。

    Id ミドルネーム モバイル メール パスワードハッシュ 登録場所 最終ログイン はじめに プロフィール
    ユーザーを識別するための一意のID。
    ユーザーの名。
    ユーザーのミドルネーム。
    ユーザーの名前。
    ユーザーの携帯電話番号。ログインと登録の目的で使用できます。
    ユーザーのメールアドレス。ログインと登録の目的で使用できます。
    適切なアルゴリズムによって生成されたパスワードハッシュ。プレーンなパスワードや暗号化されたパスワードの保存は避けなければなりません。
    この列は、アプリケーションを使用しているユーザーの寿命を計算するために使用できます。
    ユーザーの最後のログインを識別するために使用できます。
    ユーザーの簡単な紹介。
    ユーザーの詳細。

    適切な制約のあるユーザーテーブルを以下に示します。

    CREATE TABLE `calendar`.`user` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `firstName` VARCHAR(50) NULL DEFAULT NULL,
    `middleName` VARCHAR(50) NULL DEFAULT NULL,
    `lastName` VARCHAR(50) NULL DEFAULT NULL,
    `username` VARCHAR(50) NULL DEFAULT NULL,
    `mobile` VARCHAR(15) NULL,
    `email` VARCHAR(50) NULL,
    `passwordHash` VARCHAR(32) NOT NULL,
    `registeredAt` DATETIME NOT NULL,
    `lastLogin` DATETIME NULL DEFAULT NULL,
    `intro` TINYTEXT NULL DEFAULT NULL,
    `profile` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uq_username` (`username` ASC),
    UNIQUE INDEX `uq_mobile` (`mobile` ASC),
    UNIQUE INDEX `uq_email` (`email` ASC) );

    イベントテーブル

    このセクションでは、イベントテーブルを設計します ユーザーイベントとアプリケーションによってトリガーされたイベントを保存します。以下は、イベントテーブルのすべての列の説明です。

    Id ユーザーID ソースID ソースタイプ タイトル 説明 タイプ URL アクティブ システム リマインダーカウント リマインダー間隔 リマインダーユニット 作成場所 更新日 予定時刻 トリガーされた場所 コンテンツ
    イベントを識別するための一意のID。
    対応するユーザーを識別するためのユーザーID。
    対応するエンティティを識別するためのソースID。
    対応するエンティティを他のエンティティと区別するためのソースタイプ。
    イベントのタイトル。
    イベントの主要なハイライトを保存するためのイベントの説明。
    さまざまなイベントタイプを区別するためのタイプ。
    イベントに関連付けられた特定のリンクにユーザーをリダイレクトするためのURL。
    イベントがアクティブで、カレンダーに表示できるかどうかを識別するためのフラグ。
    イベントがアプリケーションによって生成されたかどうかを識別するフラグ。アプリケーションのイベントは、常にカレンダーに表示される資格があります。
    イベントに対してトリガーできるリマインダーの最大数。
    リマインダー間隔。
    リマインダーの間隔を分、時間、または日で識別するリマインダーユニット。
    イベントが作成された日時を保存します。
    イベントが更新された日時を保存します。
    カレンダーに日付と時刻を保存します。
    イベントがトリガーされた日時が保存されます。
    イベントコンテンツの保存に使用される列。

    アクティブ列を使用します ユーザーが生成したイベントをカレンダーに表示できるかどうかを識別します。 システム フラグを使用して、アプリケーションで生成されたイベントをマークできます。アプリケーションで生成されたイベントは、いつでもカレンダーに表示できます。列ソースID およびソースタイプ イベントに関連付けられている他のテーブルまたはエンティティを識別するために使用できます。 トリガーされた列 イベントが最後にトリガーされた日時を格納します。適切な制約のあるイベントテーブルを以下に示します。

    CREATE TABLE `calendar`.`event` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `userId` BIGINT NOT NULL,
    `sourceId` BIGINT,
    `sourceType` VARCHAR(50) NULL DEFAULT NULL,
    `title` VARCHAR(1024) NOT NULL,
    `descritpion` VARCHAR(2048) NULL DEFAULT NULL,
    `type` SMALLINT(6) NOT NULL DEFAULT 0,
    `url` VARCHAR(1024) NULL DEFAULT NULL,
    `active` TINYINT(1) NOT NULL DEFAULT 0,
    `system` TINYINT(1) NOT NULL DEFAULT 0,
    `reminderCount` SMALLINT(6) NOT NULL DEFAULT 0,
    `reminderInterval` SMALLINT(6) NOT NULL DEFAULT 0,
    `reminderUnit` SMALLINT(6) NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `scheduledAt` DATETIME NULL DEFAULT NULL,
    `triggeredAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_event_user` (`userId` ASC),
    CONSTRAINT `fk_event_user`
    FOREIGN KEY (`userId`)
    REFERENCES `calendar`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    イベントテンプレートテーブル

    このセクションでは、イベントテンプレートテーブルを設計します。 イベントコンテンツの生成に使用されます。アプリケーションはさらに、適切なテンプレートシステムを使用してテンプレートを解析し、イベントコンテンツを生成できます。以下は、イベントテンプレートテーブルのすべての列の説明です。

    Id タイトル 説明 タイプ ソースタイプ 作成場所 更新日 コンテンツ
    イベントテンプレートを識別するための一意のID。
    テンプレートのタイトル。
    テンプレートの説明。
    テンプレートを分類するためのタイプ。
    ソースタイプに従ってテンプレートを分類するためのソースタイプ。
    テンプレートが作成された日時が保存されます。
    テンプレートが更新された日時が保存されます。
    テンプレートコンテンツの保存に使用される列。

    適切な制約のあるイベントテンプレートテーブルは次のとおりです。

    CREATE TABLE `calendar`.`event_template` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(100) NOT NULL,
    `description` VARCHAR(2048) NULL DEFAULT NULL,
    `type` SMALLINT(6) NOT NULL DEFAULT 0,
    `sourceType` VARCHAR(50) NULL DEFAULT NULL,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`) );

    リマインダーテーブル

    また、アクティブなイベントまたはシステムイベントによってトリガーされたリマインダーを格納するためのテーブルも必要です。このセクションでは、リマインダーを管理するために必要なテーブルと列を提供します。以下は、リマインダーテーブルのすべての列の説明です。

    Id イベントID ユーザーID 読む ゴミ箱 作成場所 更新日 コンテンツ
    リマインダーを識別するための一意のID。
    リマインダーに関連付けられているイベントを識別するイベントID。
    リマインダーに関連付けられているユーザーを識別するためのユーザーID。
    リマインダーを既読/未読としてマークするフラグ。
    リマインダーをゴミ箱としてマークするフラグ。
    リマインダーが作成された日時が保存されます。
    リマインダーが更新された日時が保存されます。
    リマインダーメッセージ。

    適切な制約のあるリマインダーテーブルは次のとおりです。

    CREATE TABLE `calendar`.`reminder` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `eventId` BIGINT NOT NULL,
    `userId` BIGINT NOT NULL,
    `read` TINYINT(1) NOT NULL DEFAULT 1,
    `trash` TINYINT(1) NOT NULL DEFAULT 1,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_reminder_event` (`eventId` ASC),
    CONSTRAINT `fk_reminder_event`
    FOREIGN KEY (`eventId`)
    REFERENCES `calendar`.`event` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    ALTER TABLE `calendar`.`reminder`
    ADD INDEX `idx_reminder_user` (`userId` ASC);
    ALTER TABLE `calendar`.`reminder`
    ADD CONSTRAINT `fk_reminder_user`
    FOREIGN KEY (`userId`)
    REFERENCES `calendar`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    拡張機能

    同じデータベーススキーマを使用してグループイベントを管理することもできます。これは、グループフラグをイベントテーブルに追加することで実行でき、グループイベントの参加者を管理するには新しいテーブルが必要です。

    概要

    このチュートリアルでは、ユーザーのイベントとリマインダーを保存するためのカレンダーシステムのデータベース設計について説明しました。また、システムまたはアプリケーションによってトリガーされるユーザーイベントを管理するためのデータベース設計も提供しました。

    コメントを送信して、ディスカッションに参加できます。 BlogおよびPoll&Surveyアプリケーションのデータベースの設計にも興味があるかもしれません。完全なデータベーススキーマはGitHubでも入手できます。


    1. ストアドプロシージャ'dbo.aspnet_CheckSchemaVersion'が見つかりませんでした

    2. 複数の結果セットを返すPostgreSQL関数

    3. SQLで数値を最も近い整数に切り上げる方法

    4. TSQLで分数をhh:mm形式に変換するにはどうすればよいですか?