Considerate questo caso in cui sto cercando di modellare un database per una società:Progettazione di database per una relazione ricorsiva
- Entità:
Employees
,Managers
,Departments
. - Un
Employee
funziona solo in 1Department
mentre unDepartment
può contenere moltiEmployees
. - A
Manager
può gestire solo 1Department
e allo stesso modo unDepartment
può avere solo 1Manager
. - A
Manager
supervisiona moltiEmployees
, ma unEmployee
è supervisionato solo da unoManager
.
Ora ho 2 modi per modellare questo:
Prima soluzione:
Prenderò in considerazione che l'entità Manager
eredita dalla Employee
entità visto che io mantenere i dati unici per i Manager (es. Bonus & Status).
Dal momento che il rapporto tra
Department
eEmployee
è1:N
poi metto ilDepartment Id
come chiave esterna nella tabellaEmployee
per la relazioneWorks
.Dal momento che il rapporto tra
Department
eManager
è1:1
poi metto ilDepartment Id
come chiave esterna nella tabellaManager
per la relazioneManages
.
Problema: Come posso rappresentare la relazione ricorsiva tra il Manager
e Employee
?
Seconda soluzione:
Prenderò in considerazione che l'entità Manager
non è necessario in quanto altri Employees
può anche avere un Bonus
e Status
.(In realtà ho aggiunto questi 2 attributi solo per vedere come modello in entrambi i casi)
- Dal momento che il rapporto tra
Department
eEmployee
è1:N
allora metto ilDepartment Id
come chiave esterna nellaEmployee
tabella per la relazione - Dal momento che il rapporto tra
Employee
eManager
è1:N
poi metto ilEmployee Id
come chiave esterna nella tabellaEmployee
per la relazioneSupervises
e lo chiamanoManager Id
.
Problema: come posso rappresentare la relazione tra l'Manager
e Department
?
Domande:
- c'è qualche errori evidenti sia nel design così come sono?
- Come risolvere ciascun problema in entrambi i casi?
- C'è una soluzione migliore di questi due?
+1 per lo sforzo con i diagrammi – Bohemian
+1 per la risposta illustrativa :) Ma sei sicuro che questa parte sia corretta _ "Poiché EMPLOYEE_NO deve essere globalmente univoco, non può rimanere nella chiave composta insieme al DEPARTMENT_ID" _? Intendevi forse "EMPLOYEE_ID"? e cosa intendi esattamente con _ "Se i dipartimenti devono corrispondere" _? – Songo
@Songo Ho fatto un refuso (dovrebbe essere l'ID non NO), corretto, grazie! –