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?

War es hilfreich?

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.

Mit dem Fremdschlüssel, hier ist ein „üblicher“ Ansatz dazu:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top