このチュートリアルでは、アプリケーションユーザーのタスク、アクティビティ、およびコメントを管理するためのタスクマネージャーのデータベーススキーマを設計するための完全な手順を提供します。このデータベース設計を使用して構築されたタスクマネージャーアプリケーションを使用して、ユーザーに関連付けられたタスクを保存できます。同じアプリケーションを使用して、タスクアクティビティとコメントまたはメモを管理できます。
実体関連図または視覚的なデータベース設計を以下に示します。

タスク管理データベースの設計
また、Ubuntu 20.04LTSにMySQL8をインストールする方法、WindowsにMySQL 8をインストールする方法、UbuntuにMySQL Workbenchをインストールする方法、Windows10にWorkbenchを使用してMySQL8をインストールする方法、MySqlのRBACデータベースなどの人気のあるチュートリアルにアクセスすることもできます。 MySQLの通知データベース、MySQLのカレンダーイベントおよびリマインダーデータベース、MySqlのブログデータベース、MySQLのクイズデータベース、MySQLのポーリングおよび調査データベース、MySQLのオンラインショッピングカートデータベース、MySQLのインベントリデータベース、およびMySQLの基本的なSQLクエリを学習します。
タスクマネージャーデータベース
最初のステップは、タスクマネージャーデータベースを作成することです。以下に示すクエリを使用して作成できます。
CREATE SCHEMA `task_manager` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
文字セットutf8mb4を使用しました 幅広いキャラクターをサポートします。
ユーザーテーブル
このセクションでは、ユーザーテーブルを設計します ユーザー情報を保存します。ユーザーは自分のプロファイルを管理できます。また、ユーザーはアプリケーションを使用して、自分のタスクやアクティビティを管理できます。以下は、ユーザーテーブルのすべての列の説明です。
ユーザーを識別するための一意のID。 |
ユーザーの役割。管理者またはユーザーにすることができます。 |
ユーザーの名。 |
ユーザーのミドルネーム。 |
ユーザーの名前。 |
ユーザーの携帯電話番号。ログインと登録の目的で使用できます。 |
ユーザーのメールアドレス。ログインと登録の目的で使用できます。 |
適切なアルゴリズムによって生成されたパスワードハッシュ。プレーンなパスワードや暗号化されたパスワードの保存は避けなければなりません。 |
この列は、アプリケーションを使用しているユーザーの寿命を計算するために使用できます。 |
ユーザーの最後のログインを識別するために使用できます。 |
ユーザーの簡単な紹介。 |
ユーザーの詳細。 |
適切な制約のあるユーザーテーブルを以下に示します。
CREATE TABLE `task_manager`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`roleId` SMALLINT NOT NULL,
`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。 |
タスクを更新したユーザーを識別するためのユーザーID。 |
タスクのタイトル。 |
タスクの説明。 |
タスクのステータスは、新規、進行中、または完了のいずれかになります。 |
タスクによって消費された合計時間。手動で入力するか、アクティビティの完了時に更新することができます。 |
タスクが作成された日時を保存します。 |
タスクが更新された日時を保存します。 |
タスクの開始が計画されている日時が保存されます。 |
タスクが終了する予定の日時が保存されます。 |
タスクが開始された実際の日時を保存します。 |
タスクが終了した実際の日時を保存します。 |
タスクの詳細を格納するために使用される列。 |
列ステータスを使用して、タスクのステータスを追跡します。ステータスは、新規、進行中、または完了のいずれかになります。また、タスクのアクティビティが計画されていない場合、ユーザーは手動で時間を入力できます。タスクは、それに関連するアクティビティから実際の時間を導出することもできます。適切な制約のあるタスクテーブルは次のとおりです。
CREATE TABLE `task_manager`.`task` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`title` VARCHAR(512) NOT NULL,
`description` VARCHAR(2048) DEFAULT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`hours` FLOAT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`plannedStartDate` DATETIME NULL DEFAULT NULL,
`plannedEndDate` DATETIME NULL DEFAULT NULL,
`actualStartDate` DATETIME NULL DEFAULT NULL,
`actualEndDate` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_task_user` (`userId` ASC),
CONSTRAINT `fk_task_user`
FOREIGN KEY (`userId`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `task_manager`.`task`
ADD INDEX `idx_task_creator` (`createdBy` ASC);
ALTER TABLE `task_manager`.`task`
ADD CONSTRAINT `fk_task_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `task_manager`.`task`
ADD INDEX `idx_task_modifier` (`updatedBy` ASC);
ALTER TABLE `task_manager`.`task`
ADD CONSTRAINT `fk_task_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
タスクメタ
タスクメタテーブルは、タスクに関する追加情報を格納するために使用できます。以下は、タスクメタテーブルのすべての列の説明です。
タスクメタを識別するための一意のID。 |
親タスクを識別するためのタスクID。 |
メタを識別するキー。 |
タスクのメタデータを保存するために使用される列。 |
適切な制約のあるタスクメタテーブルは次のとおりです。
CREATE TABLE `task_manager`.`task_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`taskId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_task` (`taskId` ASC),
UNIQUE INDEX `uq_task_meta` (`taskId` ASC, `key` ASC),
CONSTRAINT `fk_meta_task`
FOREIGN KEY (`taskId`)
REFERENCES `task_manager`.`task` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
タグテーブルとタスクタグテーブル
このセクションでは、タグテーブルを設計します およびタスクタグテーブル タスクタグとそのマッピングを保存します。以下は、タグテーブルのすべての列の説明です。
タグを識別するための一意のID。 |
タグのタイトル。 |
URLを形成するためのタグスラグ。 |
適切な制約のあるタグテーブルは次のとおりです。
CREATE TABLE `task_manager`.`tag` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`));
以下は、タスクタグテーブルのすべての列の説明です。
タスクを識別するためのタスクID。 |
タグを識別するためのタグID。 |
適切な制約のあるタスクタグテーブルは次のとおりです。
CREATE TABLE `task_manager`.`task_tag` (
`taskId` BIGINT NOT NULL,
`tagId` BIGINT NOT NULL,
PRIMARY KEY (`taskId`, `tagId`),
INDEX `idx_tt_task` (`taskId` ASC),
INDEX `idx_tt_tag` (`tagId` ASC),
CONSTRAINT `fk_tt_task`
FOREIGN KEY (`taskId`)
REFERENCES `task_manager`.`task` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_tt_tag`
FOREIGN KEY (`tagId`)
REFERENCES `task_manager`.`tag` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
アクティビティテーブル
このセクションでは、アクティビティテーブルを設計します タスクを完了するために必要なタスクアクティビティを保存します。以下は、アクティビティテーブルのすべての列の説明です。
アクティビティを識別するための一意のID。 |
対応するユーザーを識別するためのユーザーID。 |
対応するタスクを識別するためのタスクID。 |
タスクを追加したユーザーを識別するためのユーザーID。 |
タスクを更新したユーザーを識別するためのユーザーID。 |
タスクのタイトル。 |
タスクの説明。 |
アクティビティのステータスは、[新規]、[進行中]、または[完了]のいずれかになります。 |
アクティビティによって消費された合計時間。対応するタスク時間は、アクティビティの完了時に更新できます。 |
アクティビティが作成された日時を保存します。 |
アクティビティが更新された日時が保存されます。 |
アクティビティの開始が計画されている日時が保存されます。 |
アクティビティが終了する予定の日時が保存されます。 |
アクティビティが開始された実際の日時が保存されます。 |
アクティビティが終了した実際の日時を保存します。 |
アクティビティの詳細を保存するために使用される列。 |
列のステータスを使用して、アクティビティのステータスを追跡します。ステータスは、新規、進行中、または完了のいずれかになります。また、ユーザーはアクティビティ時間を手動で入力できます。タスクは、それに関連するアクティビティから実際の時間を導き出すことができます。適切な制約のあるアクティビティテーブルは次のとおりです。
CREATE TABLE `task_manager`.`activity` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`taskId` BIGINT NOT NULL,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`title` VARCHAR(512) NOT NULL,
`description` VARCHAR(2048) DEFAULT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`hours` FLOAT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`plannedStartDate` DATETIME NULL DEFAULT NULL,
`plannedEndDate` DATETIME NULL DEFAULT NULL,
`actualStartDate` DATETIME NULL DEFAULT NULL,
`actualEndDate` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_activity_user` (`userId` ASC),
CONSTRAINT `fk_activity_user`
FOREIGN KEY (`userId`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `task_manager`.`activity`
ADD INDEX `idx_activity_task` (`taskId` ASC);
ALTER TABLE `task_manager`.`activity`
ADD CONSTRAINT `fk_activity_task`
FOREIGN KEY (`taskId`)
REFERENCES `task_manager`.`task` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `task_manager`.`activity`
ADD INDEX `idx_activity_creator` (`createdBy` ASC);
ALTER TABLE `task_manager`.`activity`
ADD CONSTRAINT `fk_activity_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `task_manager`.`activity`
ADD INDEX `idx_activity_modifier` (`updatedBy` ASC);
ALTER TABLE `task_manager`.`activity`
ADD CONSTRAINT `fk_activity_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `task_manager`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
コメントテーブル
このセクションでは、コメントテーブルを設計します タスクとアクティビティのコメントを保存します。以下は、コメントテーブルのすべての列の説明です。
商品レビューを識別するための一意のID。 |
親タスクを識別するためのタスクID。 |
親アクティビティを識別するためのアクティビティID。 |
レビューのタイトル。 |
コメントが作成された日時が保存されます。 |
コメントが更新された日時が保存されます。 |
コメントの詳細を保存するために使用される列。 |
適切な制約のあるコメントテーブルは次のとおりです。
CREATE TABLE `task_manager`.`comment` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`taskId` BIGINT NOT NULL,
`activityId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(100) NOT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_comment_task` (`taskId` ASC),
CONSTRAINT `fk_comment_task`
FOREIGN KEY (`taskId`)
REFERENCES `task_manager`.`task` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `task_manager`.`comment`
ADD INDEX `idx_comment_activity` (`activityId` ASC);
ALTER TABLE `task_manager`.`comment`
ADD CONSTRAINT `fk_comment_activity`
FOREIGN KEY (`activityId`)
REFERENCES `task_manager`.`activity` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
概要
このチュートリアルでは、アプリケーションユーザーのタスクとアクティビティを管理するためのタスク管理アプリケーションのデータベース設計について説明しました。また、タスクとアクティビティのコメントを管理するためのデータベース設計も提供しました。
コメントを送信して、ディスカッションに参加できます。また、通知、カレンダーイベント、およびリマインダーのデータベースの設計に興味があるかもしれません。完全なデータベーススキーマはGitHubでも入手できます。