Mysql
 sql >> Base de données >  >> RDS >> Mysql

Guide pour concevoir une base de données pour le système de gestion des employés dans MySQL

Ce didacticiel fournit les étapes complètes pour concevoir un schéma de base de données du système de gestion des employés afin de gérer les utilisateurs, les rôles, les autorisations, les organisations et les employés.

Le diagramme de relation d'entité ou la conception visuelle de la base de données est illustré ci-dessous.

Base de données de gestion des employés

Vous pouvez également consulter les didacticiels populaires, notamment Comment installer MySQL 8 sur Ubuntu 20.04 LTS, Comment installer MySQL 8 sur Windows, Comment installer MySQL Workbench sur Ubuntu, Comment installer MySQL 8 avec Workbench sur Windows 10, Base de données RBAC dans MySql, Base de données de blogs dans MySQL, base de données de quiz dans MySQL, base de données de sondages et d'enquêtes dans MySQL, base de données de paniers d'achat en ligne dans MySQL, base de données d'inventaire dans MySQL et apprentissage des requêtes SQL de base dans MySQL.

Remarques  :Vous pouvez également suivre le schéma de base de données personnalisée du système de gestion des employés pour obtenir des solutions personnalisées en fonction de vos besoins.

Base de données de l'organisation

La toute première étape consiste à créer la base de données de l'organisation. Il peut être créé à l'aide de la requête comme indiqué ci-dessous.

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

J'ai utilisé le jeu de caractères utf8mb4 pour prendre en charge un large éventail de caractères.

Tableau des rôles

Dans cette section, nous allons concevoir la table des rôles pour stocker les rôles du système et de l'organisation. Le type de colonne peut être utilisé pour identifier si le rôle est destiné aux utilisateurs de l'application ou aux employés de l'organisation. Vous trouverez ci-dessous la description de toutes les colonnes de la table des rôles.

Identifiant L'identifiant unique pour identifier le rôle.
Titre Le titre du rôle.
limace Le slug unique pour rechercher le rôle.
Description La description pour mentionner le rôle.
Type Le type de rôle à distinguer entre les rôles système et organisationnel.
Actif L'indicateur pour vérifier si le rôle est actuellement actif.
Créé à Il stocke la date et l'heure auxquelles le rôle est créé.
Mis à jour à Il stocke la date et l'heure auxquelles le rôle est mis à jour.
Contenu Les détails complets sur le rôle.

La table des rôles avec les contraintes appropriées est illustrée ci-dessous.

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) );

Tableau des autorisations

Dans cette section, nous allons concevoir le tableau des autorisations pour stocker les autorisations du système et de l'organisation. Le type de colonne peut être utilisé pour identifier si l'autorisation est destinée aux utilisateurs de l'application ou aux employés de l'organisation. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des autorisations.

Identifiant L'identifiant unique pour identifier l'autorisation.
Titre Le titre de l'autorisation.
limace Le slug unique pour rechercher l'autorisation.
Description La description pour mentionner l'autorisation.
Type Le type d'autorisation permettant de distinguer les autorisations du système et de l'organisation.
Actif L'indicateur pour vérifier si l'autorisation est actuellement active.
Créé à Il stocke la date et l'heure auxquelles l'autorisation est créée.
Mis à jour à Il stocke la date et l'heure auxquelles l'autorisation est mise à jour.
Contenu Les détails complets de l'autorisation.

Le tableau des autorisations avec les contraintes appropriées est illustré ci-dessous.

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) );

Tableau des autorisations de rôle

Le tableau des autorisations de rôle peut être utilisé pour stocker les mappages des autorisations aux rôles. Vous trouverez ci-dessous la description de toutes les colonnes du tableau des autorisations de rôle.

ID de rôle L'identifiant du rôle pour identifier le rôle.
Identifiant d'autorisation L'identifiant d'autorisation pour identifier l'autorisation.
Créé à Il stocke la date et l'heure auxquelles le mappage est créé.
Mis à jour à Il stocke la date et l'heure auxquelles le mappage est mis à jour.

Le tableau des autorisations de rôle avec les contraintes appropriées est illustré ci-dessous.

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);

Tableau des utilisateurs

Dans cette section, nous allons concevoir la table des utilisateurs pour stocker les informations de l'utilisateur. Les utilisateurs peuvent gérer leurs propres profils. De plus, les utilisateurs peuvent utiliser l'application en fonction des rôles système qui leur sont attribués. Vous trouverez ci-dessous la description de toutes les colonnes de la table des utilisateurs.

Identifiant L'identifiant unique pour identifier l'utilisateur.
Identifiant du rôle Le rôle de l'utilisateur. Il peut s'agir d'un administrateur ou d'un utilisateur.
Prénom Le prénom de l'utilisateur.
Deuxième prénom Le deuxième prénom de l'utilisateur.
Nom de famille Le nom de famille de l'utilisateur.
Mobile Le numéro de portable de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement.
E-mail L'adresse e-mail de l'utilisateur. Il peut être utilisé à des fins de connexion et d'enregistrement.
Hachage du mot de passe Le hachage du mot de passe généré par l'algorithme approprié. Nous devons éviter de stocker des mots de passe simples ou cryptés.
Enregistré à Cette colonne peut être utilisée pour calculer la durée de vie de l'utilisateur avec l'application.
Dernière connexion Il peut être utilisé pour identifier la dernière connexion de l'utilisateur.
Introduction La brève présentation de l'utilisateur.
Profil Détails de l'utilisateur.

La table utilisateur avec les contraintes appropriées est illustrée ci-dessous.

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);

Tableau d'organisation

Dans cette section, nous allons concevoir le tableau d'organisation pour stocker les données de l'organisation. Vous trouverez ci-dessous la description de toutes les colonnes du tableau d'organisation.

Identifiant L'identifiant unique pour identifier l'organisation.
Créé par L'identifiant d'utilisateur pour identifier l'utilisateur qui a enregistré l'organisation.
Mise à jour par L'ID utilisateur pour identifier l'utilisateur qui a mis à jour l'organisation.
Titre Le titre de l'organisation.
Méta-titre Le méta-titre à utiliser pour le titre du navigateur et à des fins de référencement.
limace Le slug pour former l'URL unique.
Résumé Le résumé pour mentionner les principaux faits saillants.
Statut Le statut de l'organisation peut être Nouveau, Approuvé, Actif ou Bloqué.
Créé à Il stocke la date et l'heure auxquelles l'organisation est créée.
Mis à jour à Il stocke la date et l'heure auxquelles l'organisation est mise à jour.
Profil La colonne utilisée pour stocker les détails du profil de l'organisation.
Contenu La colonne utilisée pour stocker les détails supplémentaires de l'organisation.

Il utilise le statut de la colonne pour suivre le statut de l'organisation. Le statut peut être Nouveau, Approuvé, Actif ou Bloqué. La table d'organisation avec les contraintes appropriées est illustrée ci-dessous.

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;

Méta Organisation

La méta-table de l'organisation peut être utilisée pour stocker des informations supplémentaires sur les organisations, y compris l'URL de la bannière de l'organisation, etc. Vous trouverez ci-dessous la description de toutes les colonnes de la méta-table de l'organisation.

Identifiant L'identifiant unique pour identifier la méta de l'organisation.
Identifiant de l'organisation L'identifiant de l'organisation pour identifier l'organisation mère.
Clé La clé identifiant la méta.
Contenu La colonne utilisée pour stocker les métadonnées de l'organisation.

La méta-table d'organisation avec les contraintes appropriées est illustrée ci-dessous.

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;

Tableau des employés

Dans cette section, nous allons concevoir le tableau des employés pour stocker les données des employés. Vous trouverez ci-dessous la description de toutes les colonnes de la table des employés.

Identifiant L'identifiant unique pour identifier l'employé.
Identifiant utilisateur L'identifiant de l'utilisateur pour identifier l'utilisateur associé à l'employé.
Identifiant du rôle ID de rôle spécifique à l'organisation attribué à l'employé.
Créé par L'identifiant d'utilisateur pour identifier l'utilisateur qui a ajouté l'employé.
Mise à jour par L'identifiant de l'utilisateur pour identifier l'utilisateur qui a mis à jour l'employé.
Code Le code utilisé par l'organisation pour identifier l'employé.
Statut Le statut de l'employé peut être Nouveau, Approuvé, Actif, Bloqué ou Résilié.
Créé à Il stocke la date et l'heure auxquelles l'employé est créé.
Mis à jour à Il stocke la date et l'heure auxquelles l'employé est mis à jour.
Commence à Il stocke la date et l'heure auxquelles l'emploi commence.
Se termine à Il stocke la date et l'heure auxquelles l'emploi se termine.
Remarques La colonne utilisée pour stocker les notes spécifiques à l'emploi.

Il utilise le statut de la colonne pour suivre le statut de l'employé. Le statut peut être Nouveau, Approuvé, Actif, Bloqué ou Terminé. La table des employés avec les contraintes appropriées est illustrée ci-dessous.

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;

Résumé

Dans ce tutoriel, nous avons discuté de la conception de la base de données d'un système de gestion des employés pour stocker les rôles, les autorisations, les utilisateurs, les organisations et gérer les employés de l'organisation.

Vous pouvez soumettre vos commentaires pour participer à la discussion. Vous pouvez également être intéressé par la conception de la base de données des applications Blog, Shopping Cart et Poll &Survey. Le schéma complet de la base de données est également disponible sur GitHub.