Mysql
 sql >> Database >  >> RDS >> Mysql

Guida alla progettazione di database per il sistema di gestione dei dipendenti in MySQL

Questo tutorial fornisce i passaggi completi per progettare uno schema di database del sistema di gestione dei dipendenti per gestire utenti, ruoli, autorizzazioni, organizzazioni e dipendenti.

Il diagramma della relazione tra entità o il design del database visivo è mostrato di seguito.

Database di gestione dei dipendenti

Puoi anche visitare i tutorial popolari tra cui Come installare MySQL 8 su Ubuntu 20.04 LTS, Come installare MySQL 8 su Windows, Come installare MySQL Workbench su Ubuntu, Come installare MySQL 8 con Workbench su Windows 10, Database RBAC in MySql, Database del blog in MySql, database dei quiz in MySQL, database di sondaggi e sondaggi in MySQL, database del carrello degli acquisti online in MySQL, database di inventario in MySQL e informazioni sulle query SQL di base in MySQL.

Note :puoi anche seguire lo schema del database personalizzato del sistema di gestione dei dipendenti per ottenere soluzioni personalizzate in base alle tue esigenze.

Banca dati dell'organizzazione

Il primo passo è creare il database dell'organizzazione. Può essere creato utilizzando la query come mostrato di seguito.

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

Ho usato il set di caratteri utf8mb4 per supportare un'ampia gamma di caratteri.

Tabella dei ruoli

In questa sezione, progetteremo la Tabella dei ruoli per memorizzare i ruoli del sistema e dell'organizzazione. Il tipo di colonna può essere utilizzato per identificare se il ruolo è per gli utenti dell'applicazione o per i dipendenti dell'organizzazione. Di seguito è riportata la descrizione di tutte le colonne della Tabella dei Ruoli.

ID L'ID univoco per identificare il ruolo.
Titolo Il titolo del ruolo.
Slug Lo slug unico per cercare il ruolo.
Descrizione La descrizione per menzionare il ruolo.
Tipo Il tipo di ruolo per distinguere tra ruoli di sistema e di organizzazione.
Attivo Il flag per verificare se il ruolo è attualmente attivo.
Creato a Memorizza la data e l'ora in cui viene creato il ruolo.
Aggiornato a Memorizza la data e l'ora in cui il ruolo viene aggiornato.
Contenuto I dettagli completi sul ruolo.

La tabella dei ruoli con i vincoli appropriati è quella mostrata di seguito.

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

Tabella delle autorizzazioni

In questa sezione, progetteremo la Tabella delle autorizzazioni per memorizzare le autorizzazioni di sistema e organizzazione. Il tipo di colonna può essere utilizzato per identificare se l'autorizzazione è per gli utenti dell'applicazione o per i dipendenti dell'organizzazione. Di seguito è indicata la descrizione di tutte le colonne della tabella dei permessi.

ID L'ID univoco per identificare l'autorizzazione.
Titolo Il titolo dell'autorizzazione.
Slug Lo slug unico per cercare l'autorizzazione.
Descrizione La descrizione per menzionare l'autorizzazione.
Tipo Il tipo di autorizzazione per distinguere tra autorizzazioni di sistema e di organizzazione.
Attivo Il flag per verificare se l'autorizzazione è attualmente attiva.
Creato a Memorizza la data e l'ora in cui viene creata l'autorizzazione.
Aggiornato a Memorizza la data e l'ora in cui l'autorizzazione viene aggiornata.
Contenuto I dettagli completi sull'autorizzazione.

La tabella delle autorizzazioni con i vincoli appropriati è quella mostrata di seguito.

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

Tabella dei permessi di ruolo

La Tabella delle autorizzazioni di ruolo può essere utilizzato per memorizzare le mappature delle autorizzazioni ai ruoli. Di seguito è riportata la descrizione di tutte le colonne della Tabella dei permessi dei ruoli.

ID ruolo L'ID del ruolo per identificare il ruolo.
ID autorizzazione L'ID autorizzazione per identificare l'autorizzazione.
Creato a Memorizza la data e l'ora in cui viene creata la mappatura.
Aggiornato a Memorizza la data e l'ora in cui viene aggiornata la mappatura.

La tabella delle autorizzazioni di ruolo con i vincoli appropriati è quella mostrata di seguito.

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

Tabella utenti

In questa sezione, progetteremo la Tabella utente per memorizzare le informazioni sull'utente. Gli utenti possono gestire i propri profili. Inoltre, gli utenti possono utilizzare l'applicazione in base ai ruoli di sistema loro assegnati. Di seguito è riportata la descrizione di tutte le colonne della Tabella Utente.

ID L'ID univoco per identificare l'utente.
ID ruolo Il ruolo dell'utente. Può essere Amministratore o Utente.
Nome Il nome dell'utente.
Secondo nome Il secondo nome dell'utente.
Cognome Il cognome dell'utente.
Cellulare Il numero di cellulare dell'utente. Può essere utilizzato per scopi di accesso e registrazione.
E-mail L'e-mail dell'utente. Può essere utilizzato per scopi di accesso e registrazione.
Hash password L'hash della password generato dall'algoritmo appropriato. Dobbiamo evitare di memorizzare password semplici o crittografate.
Registrato presso Questa colonna può essere utilizzata per calcolare la vita dell'utente con l'applicazione.
Ultimo accesso Può essere utilizzato per identificare l'ultimo accesso dell'utente.
Introduzione La breve introduzione dell'Utente.
Profilo Dettagli utente.

Di seguito è mostrata la tabella utente con i vincoli appropriati.

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

Tabella dell'organizzazione

In questa sezione, progetteremo la Tabella dell'organizzazione per memorizzare i dati dell'organizzazione. Di seguito è riportata la descrizione di tutte le colonne della Tabella Organizzativa.

ID L'ID univoco per identificare l'organizzazione.
Creato da L'ID utente per identificare l'utente che ha registrato l'organizzazione.
Aggiornato da L'ID utente per identificare l'utente che ha aggiornato l'organizzazione.
Titolo Il titolo dell'organizzazione.
Metatitolo Il meta titolo da utilizzare per il titolo del browser e per scopi SEO.
Slug Lo slug per formare l'URL univoco.
Riepilogo Il riepilogo per citare i punti salienti.
Stato Lo stato dell'organizzazione può essere Nuovo, Approvato, Attivo o Bloccato.
Creato a Memorizza la data e l'ora di creazione dell'organizzazione.
Aggiornato a Memorizza la data e l'ora in cui l'organizzazione viene aggiornata.
Profilo La colonna utilizzata per memorizzare i dettagli del profilo dell'organizzazione.
Contenuto La colonna utilizzata per memorizzare i dettagli aggiuntivi dell'organizzazione.

Utilizza lo stato della colonna per tenere traccia dello stato dell'organizzazione. Lo stato può essere Nuovo, Approvato, Attivo o Bloccato. La tabella organizzativa con i vincoli appropriati è quella mostrata di seguito.

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;

Meta organizzazione

La Meta Table dell'organizzazione può essere utilizzata per memorizzare informazioni aggiuntive sulle organizzazioni, incluso l'URL del banner dell'organizzazione, ecc. Di seguito è menzionata la descrizione di tutte le colonne della Meta Table dell'organizzazione.

ID L'ID univoco per identificare la meta dell'organizzazione.
ID organizzazione L'ID organizzazione per identificare l'organizzazione principale.
Chiave La chiave che identifica il meta.
Contenuto La colonna utilizzata per archiviare i metadati dell'organizzazione.

La Meta Table dell'organizzazione con i vincoli appropriati è quella mostrata di seguito.

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;

Tabella dei dipendenti

In questa sezione, progetteremo la Tabella dei dipendenti per memorizzare i dati dei dipendenti. Di seguito è riportata la descrizione di tutte le colonne della Tabella Dipendenti.

ID L'ID univoco per identificare il dipendente.
ID utente L'ID utente per identificare l'utente associato al dipendente.
ID ruolo L'ID del ruolo specifico dell'organizzazione assegnato al dipendente.
Creato da L'ID utente per identificare l'utente che ha aggiunto il dipendente.
Aggiornato da L'ID utente per identificare l'utente che ha aggiornato il dipendente.
Codice Il codice utilizzato dall'organizzazione per identificare il dipendente.
Stato Lo stato del dipendente può essere Nuovo, Approvato, Attivo, Bloccato o Terminato.
Creato a Memorizza la data e l'ora in cui viene creato il dipendente.
Aggiornato a Memorizza la data e l'ora in cui il dipendente viene aggiornato.
Inizia alle Memorizza la data e l'ora di inizio del rapporto di lavoro.
Termina alle Memorizza la data e l'ora in cui termina il rapporto di lavoro.
Note La colonna utilizzata per memorizzare le note specifiche per l'occupazione.

Utilizza lo stato della colonna per tenere traccia dello stato del dipendente. Lo stato può essere Nuovo, Approvato, Attivo, Bloccato o Terminato. La tabella dei dipendenti con i vincoli appropriati è quella mostrata di seguito.

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;

Riepilogo

In questo tutorial, abbiamo discusso la progettazione del database di un sistema di gestione dei dipendenti per archiviare ruoli, autorizzazioni, utenti, organizzazioni e gestire i dipendenti dell'organizzazione.

Puoi inviare i tuoi commenti per partecipare alla discussione. Potresti anche essere interessato a progettare il database delle applicazioni Blog, Carrello della spesa e Sondaggi e sondaggi. Lo schema completo del database è disponibile anche su GitHub.