このチュートリアルでは、ユーザーのカレンダーイベントを管理し、リマインダーを保存するためのカレンダーイベントおよびリマインダーシステムのデータベーススキーマを設計するための完全な手順を提供します。さらに拡張して、システムユーザー以外の他のエンティティのイベントやリマインダーを管理するために使用できます。
実体関連図または視覚的なデータベース設計を以下に示します。
カレンダーイベントとリマインダーデータベースの設計
また、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。 |
ユーザーの名。 |
ユーザーのミドルネーム。 |
ユーザーの名前。 |
ユーザーの携帯電話番号。ログインと登録の目的で使用できます。 |
ユーザーのメールアドレス。ログインと登録の目的で使用できます。 |
適切なアルゴリズムによって生成されたパスワードハッシュ。プレーンなパスワードや暗号化されたパスワードの保存は避けなければなりません。 |
この列は、アプリケーションを使用しているユーザーの寿命を計算するために使用できます。 |
ユーザーの最後のログインを識別するために使用できます。 |
ユーザーの簡単な紹介。 |
ユーザーの詳細。 |
適切な制約のあるユーザーテーブルを以下に示します。
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 およびソースタイプ イベントに関連付けられている他のテーブルまたはエンティティを識別するために使用できます。 トリガーされた列 イベントが最後にトリガーされた日時を格納します。適切な制約のあるイベントテーブルを以下に示します。
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。 |
テンプレートのタイトル。 |
テンプレートの説明。 |
テンプレートを分類するためのタイプ。 |
ソースタイプに従ってテンプレートを分類するためのソースタイプ。 |
テンプレートが作成された日時が保存されます。 |
テンプレートが更新された日時が保存されます。 |
テンプレートコンテンツの保存に使用される列。 |
適切な制約のあるイベントテンプレートテーブルは次のとおりです。
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。 |
リマインダーを既読/未読としてマークするフラグ。 |
リマインダーをゴミ箱としてマークするフラグ。 |
リマインダーが作成された日時が保存されます。 |
リマインダーが更新された日時が保存されます。 |
リマインダーメッセージ。 |
適切な制約のあるリマインダーテーブルは次のとおりです。
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でも入手できます。