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のインベントリデータベース、MySQLの基本的なSQLクエリを学ぶ。

    メモ :従業員管理システムのカスタムデータベーススキーマに従って、要件に基づいてカスタマイズされたソリューションを取得することもできます。

    組織データベース

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

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

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

    ロールテーブル

    このセクションでは、ロールテーブルを設計します システムと組織の役割を保存します。列タイプを使用して、役割がアプリケーションユーザー用か組織従業員用かを識別できます。以下は、役割テーブルのすべての列の説明です。

    Id タイトル スラッグ 説明 タイプ アクティブ 作成場所 更新日 コンテンツ
    役割を識別するための一意のID。
    役割のタイトル。
    役割を検索するためのユニークなスラッグ。
    役割について説明します。
    システムと組織の役割を区別するための役割の種類。
    役割が現在アクティブであるかどうかを確認するためのフラグ。
    ロールが作成された日時を保存します。
    ロールが更新された日時を保存します。
    役割に関する完全な詳細。

    適切な制約のある役割テーブルは次のとおりです。

    CREATE TABLE `organization`.`role` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(75) NOT NULL,
    `slug` VARCHAR(100) NOT NULL,
    `description` TINYTEXT NULL,
    `type` SMALLINT NOT NULL DEFAULT 0,
    `active` TINYINT NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uq_slug` (`slug` ASC) );

    許可テーブル

    このセクションでは、権限テーブルを設計します システムと組織の権限を保存します。列タイプを使用して、権限がアプリケーションユーザーまたは組織の従業員のどちらに対するものであるかを識別できます。以下は、権限テーブルのすべての列の説明です。

    Id タイトル スラッグ 説明 タイプ アクティブ 作成場所 更新日 コンテンツ
    権限を識別するための一意のID。
    許可のタイトル。
    許可を検索するためのユニークなスラッグ。
    許可について言及する説明。
    システムと組織の権限を区別するための権限タイプ。
    権限が現在アクティブかどうかを確認するためのフラグ。
    権限が作成された日時が保存されます。
    権限が更新された日時が保存されます。
    許可に関する完全な詳細。

    適切な制約のある権限テーブルは次のとおりです。

    CREATE TABLE `organization`.`permission` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(75) NOT NULL,
    `slug` VARCHAR(100) NOT NULL,
    `description` TINYTEXT NULL,
    `type` SMALLINT NOT NULL DEFAULT 0,
    `active` TINYINT NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uq_slug` (`slug` ASC) );

    役割許可テーブル

    役割許可テーブル ロールへの権限のマッピングを保存するために使用できます。以下は、役割許可テーブルのすべての列の説明です。

    ロールID アクセス許可ID 作成場所 更新日
    役割を識別するための役割ID。
    権限を識別するための権限ID。
    マッピングが作成された日時を保存します。
    マッピングが更新された日時が保存されます。

    適切な制約のある役割許可テーブルは次のとおりです。

    CREATE TABLE `organization`.`role_permission` (
    `roleId` BIGINT NOT NULL,
    `permissionId` BIGINT NOT NULL,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL,
    PRIMARY KEY (`roleId`, `permissionId`),
    INDEX `idx_rp_role` (`roleId` ASC),
    INDEX `idx_rp_permission` (`permissionId` ASC),
    CONSTRAINT `fk_rp_role`
    FOREIGN KEY (`roleId`)
    REFERENCES `organization`.`role` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
    CONSTRAINT `fk_rp_permission`
    FOREIGN KEY (`permissionId`)
    REFERENCES `organization`.`permission` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    ユーザーテーブル

    このセクションでは、ユーザーテーブルを設計します ユーザー情報を保存します。ユーザーは自分のプロファイルを管理できます。また、ユーザーは、割り当てられたシステムの役割に応じてアプリケーションを使用できます。以下は、ユーザーテーブルのすべての列の説明です。

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

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

    CREATE TABLE `organization`.`user` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `roleId` BIGINT 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),
    INDEX `idx_user_role` (`roleId` ASC),
    CONSTRAINT `fk_user_role`
    FOREIGN KEY (`roleId`)
    REFERENCES `organization`.`role` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    組織表

    このセクションでは、組織テーブルを設計します。 組織データを保存します。以下は、組織テーブルのすべての列の説明です。

    Id 作成者 更新者 タイトル メタタイトル スラッグ 概要 ステータス 作成場所 更新日 プロフィール コンテンツ
    組織を識別するための一意のID。
    組織を登録したユーザーを識別するためのユーザーID。
    組織を更新したユーザーを識別するためのユーザーID。
    組織のタイトル。
    ブラウザのタイトルとSEOの目的で使用されるメタタイトル。
    一意のURLを形成するためのスラッグ。
    主なハイライトに言及する要約。
    組織のステータスは、新規、承認済み、アクティブ、またはブロックされている可能性があります。
    組織が作成された日時を保存します。
    組織が更新された日時を保存します。
    組織のプロファイルの詳細を保存するために使用される列。
    組織の追加の詳細を格納するために使用される列。

    列のステータスを使用して、組織のステータスを追跡します。ステータスは、新規、承認済み、アクティブ、またはブロック済みのいずれかになります。適切な制約のある組織テーブルは次のとおりです。

    CREATE TABLE `organization`.`organization` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `createdBy` BIGINT NOT NULL,
    `updatedBy` BIGINT NOT NULL,
    `title` VARCHAR(75) NOT NULL,
    `metaTitle` VARCHAR(100) NULL,
    `slug` VARCHAR(100) NOT NULL,
    `summary` TINYTEXT NULL,
    `status` SMALLINT NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `profile` TEXT NULL DEFAULT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uq_slug` (`slug` ASC),
    INDEX `idx_organization_creator` (`createdBy` ASC),
    CONSTRAINT `fk_organization_creator`
    FOREIGN KEY (`createdBy`)
    REFERENCES `organization`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    ALTER TABLE `organization`.`organization`
    ADD INDEX `idx_organization_modifier` (`updatedBy` ASC);
    ALTER TABLE `organization`.`organization`
    ADD CONSTRAINT `fk_organization_modifier`
    FOREIGN KEY (`updatedBy`)
    REFERENCES `organization`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    組織メタ

    組織メタテーブルは、組織バナーURLなどの組織に関する追加情報を格納するために使用できます。以下は、組織メタテーブルのすべての列の説明です。

    Id 組織ID キー コンテンツ
    組織のメタを識別するための一意のID。
    親組織を識別するための組織ID。
    メタを識別するキー。
    組織のメタデータを格納するために使用される列。

    適切な制約のある組織メタテーブルは次のとおりです。

    CREATE TABLE `organization`.`organization_meta` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `organizationId` BIGINT NOT NULL,
    `key` VARCHAR(50) NOT NULL,
    `content` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_meta_organization` (`organizationId` ASC),
    UNIQUE INDEX `uq_meta_organization` (`organizationId` ASC, `key` ASC),
    CONSTRAINT `fk_meta_organization`
    FOREIGN KEY (`organizationId`)
    REFERENCES `organization`.`organization` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    ENGINE = InnoDB;

    従業員テーブル

    このセクションでは、従業員テーブルを設計します 従業員データを保存します。以下は、従業員テーブルのすべての列の説明です。

    Id ユーザーID ロールID 作成者 更新者 コード ステータス 作成場所 更新日 開始時間 終了 メモ
    従業員を識別するための一意のID。
    従業員に関連付けられているユーザーを識別するためのユーザーID。
    従業員に割り当てられた組織固有の役割ID。
    従業員を追加したユーザーを識別するためのユーザーID。
    従業員を更新したユーザーを識別するためのユーザーID。
    組織が従業員を識別するために使用するコード。
    従業員のステータスは、新規、承認済み、アクティブ、ブロック済み、または終了のいずれかになります。
    従業員が作成された日時を保存します。
    従業員が更新された日時を保存します。
    雇用が開始された日時を保存します。
    雇用が終了した日時を保存します。
    雇用に固有のメモを保存するために使用される列。

    列ステータスを使用して、従業員のステータスを追跡します。ステータスは、新規、承認済み、アクティブ、ブロック済み、または終了のいずれかになります。適切な制約のある従業員テーブルは次のとおりです。

    CREATE TABLE `organization`.`employee` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `organizationId` BIGINT NOT NULL,
    `userId` BIGINT NOT NULL,
    `roleId` BIGINT NOT NULL,
    `createdBy` BIGINT NOT NULL,
    `updatedBy` BIGINT NOT NULL,
    `code` VARCHAR(100) NOT NULL,
    `status` SMALLINT NOT NULL DEFAULT 0,
    `createdAt` DATETIME NOT NULL,
    `updatedAt` DATETIME NULL DEFAULT NULL,
    `startsAt` DATETIME NULL DEFAULT NULL,
    `endsAt` DATETIME NULL DEFAULT NULL,
    `notes` TEXT NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_employee_user` (`userId` ASC),
    CONSTRAINT `fk_employee_user`
    FOREIGN KEY (`userId`)
    REFERENCES `organization`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

    ALTER TABLE `organization`.`employee`
    ADD INDEX `idx_employee_organization` (`organizationId` ASC);
    ALTER TABLE `organization`.`employee`
    ADD CONSTRAINT `fk_employee_organization`
    FOREIGN KEY (`organizationId`)
    REFERENCES `organization`.`organization` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    ALTER TABLE `organization`.`employee`
    ADD INDEX `idx_employee_role` (`roleId` ASC);
    ALTER TABLE `organization`.`employee`
    ADD CONSTRAINT `fk_employee_role`
    FOREIGN KEY (`roleId`)
    REFERENCES `organization`.`role` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    ALTER TABLE `organization`.`employee`
    ADD INDEX `idx_employee_creator` (`createdBy` ASC);
    ALTER TABLE `organization`.`employee`
    ADD CONSTRAINT `fk_employee_creator`
    FOREIGN KEY (`createdBy`)
    REFERENCES `organization`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    ALTER TABLE `organization`.`employee`
    ADD INDEX `idx_employee_modifier` (`updatedBy` ASC);
    ALTER TABLE `organization`.`employee`
    ADD CONSTRAINT `fk_employee_modifier`
    FOREIGN KEY (`updatedBy`)
    REFERENCES `organization`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;
    >

    概要

    このチュートリアルでは、役割、権限、ユーザー、組織を保存し、組織の従業員を管理するための従業員管理システムのデータベース設計について説明しました。

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


    1. 外部キーの参照列リストと一致する主キーまたは候補キーが参照テーブルにありません

    2. Oracleクエリをtext/csvファイルにエクスポートする方法

    3. トランザクションがすでに開始されていることをどのように検出しますか?

    4. MySQLでのLCASE()関数のしくみ