このチュートリアルでは、ユーザーのカレンダーイベントを管理し、リマインダーを保存するためのカレンダーイベントおよびリマインダーシステムのデータベーススキーマを設計するための完全な手順を提供します。さらに拡張して、システムユーザー以外の他のエンティティのイベントやリマインダーを管理するために使用できます。
実体関連図または視覚的なデータベース設計を以下に示します。
カレンダーイベントとリマインダーデータベースの設計
また、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でも入手できます。