wie eine Datenbank selbst verbinden (oder gibt es eine bessere Art und Weise) erzwingen
-
06-07-2019 - |
Frage
Ich habe eine Mitarbeiter Tabelle in einer Datenbank, und ich möchte einen Mitarbeiter zu ihrem Manager verknüpfen:
Mitarbeiter Tabelle
- employee_id
- first_name
- last_name
- manager_id
Wenn die manager_id nur ein weitere Zeile in der gleichen Tabelle ist, wo der Manager es als ihre Mitarbeiter hat, was der beste Weg ist, zu erzwingen, dass, wenn ich einen Mitarbeiter lösche es überprüft, ob diese Mitarbeiter nicht der Manager von einem anderen Mitarbeiter ist?
Gibt es eine bessere beste Praxis für das?
Lösung
Sie können eine Selbst verwenden verbinden genau wie Sie auf andere Tabellen verbinden mit PK & FK .
Ich glaube, Sie dies mit einigen Dingen entwerfen sollen zu berücksichtigen. Beispiele:
- Verschiedene Manager: Tom ist ein Jr. PGMR heute und Jerry ist sein Manager heute. Morgen Tom kann Sebastian berichten.
- Beförderungen: Tom ist ein Jr. PGMR heute und Jerry ist sein Manager heute. Morgen Tom kann ein Manager selbst geworden und haben die Berichterstattung Menschen zu ihm.
- Promotions 2: Tom von Jr PGMR zu Sr PGMR gehen kann Blei von Team Lead Manager-Projekt. Wollen Sie diese retten?
- Berichte: können Sie wollen in der Zeit an einem Punkt Hierarchie zeigen (einige Nutzer kommen für diese fragen Sie nach einem Bericht früher oder später)
Sie möchten die Daten in separate Einheiten aufzuteilen bis betrachten - Normalisierung der Daten wie folgt (oder sogar mehr als Ihre Bedürfnisse sein kann)
- Mitarbeiter Tabelle: Grund Mitarbeiter Info
- Position Lookup-Tabelle: Liste aller Positionen in der Organisation
- Mitarbeiterposition Tabelle:. Track mit Start- und Enddatum, wenn eine Positionsänderung für die Mitarbeiter aufgetreten
- Mitarbeiterposition Hierarchie Tabelle: Was an einem anderen Mitarbeiter Position Angestellten Positionsmeldungen (ein Doppel verbindet statt mit einem selbst verbinden); mit Start- und End-Zeitstempel
Andere Tipps
Sie können einen Fremdschlüssel verwenden (ohne Kaskadierung löschen). Wenn Sie versuchen, einen Manager zu löschen, die noch andere Mitarbeiter unter sich hat, wird die Datenbank, die automatisch erkennen und die Operation fehlschlagen.
Verwenden Sie eine many-to-many-Vereinigung Ihre Grundlagen abzudecken, sollten Sie Ihre Anwendung (oder Organisation) entwickeln.
Employee.Employee_id <- EmployeeManager.Employee_id
EmployeeManager.Manager_id -> Employee.Employee_id
Manager_role_type
etc.
Immer für Fremdschlüssel verwendet werden.