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 `notification` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

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

    ユーザーテーブル

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

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

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

    CREATE TABLE `notification`.`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。
    テンプレートのタイトル。
    テンプレートの説明。
    テンプレートを分類するためのタイプ。
    ソースタイプに従ってテンプレートを分類するためのソースタイプ。
    テンプレートが作成された日時が保存されます。
    テンプレートが更新された日時が保存されます。
    テンプレートコンテンツの保存に使用される列。

    適切な制約のある通知テンプレートテーブルを以下に示します。

    CREATE TABLE `notification`.`notification_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) NOT 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 `notification`.`notification` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `userId` BIGINT NOT NULL,
    `sourceId` BIGINT NOT NULL,
    `sourceType` VARCHAR(50) NOT NULL,
    `type` SMALLINT(6) NOT NULL DEFAULT 0,
    `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_notification_user` (`userId` ASC),
    CONSTRAINT `fk_notification_user`
    FOREIGN KEY (`userId`)
    REFERENCES `notification`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    概要

    このチュートリアルでは、ユーザーを保存して通知を管理するための通知システムのデータベース設計について説明しました。また、通知を生成するために必要な通知テンプレートテーブルも含まれています。

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


    1. MySQL JDBCDriver5.1.33-タイムゾーンの問題

    2. SQLテーブルから(複数の列の値に基づいて)重複する行を削除する

    3. Javaからテーブル値パラメータを使用してストアドプロシージャを呼び出す

    4. MySQLクエリ