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. |
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.