2016-03-29 4 views
2

In einem Szenario, wie unterEER Diagramm Erbe

scenario

Zessionar und Zuweiser sind Schlüssel von Entwickler und Tester. wie man die emp_id als Fremdschlüssel abbildet, ohne doppelt zu werden? Entwickler, Tester, Business Analyst usw. Eine Möglichkeit haben mehrere Tabellen für jeden Rollentyp - -

+0

Haben Sie selbst ein Design/Modell entwickelt? Kannst du es hier teilen? – AKS

+0

Ich dachte, das einzige, was tun kann, ist, erklären Primärschlüssel für jeden Tester und Entwickler selbst. –

+1

Können Sie ein Beispiel für die Duplizierung geben, die Sie vermeiden möchten? Ich sehe kein Problem im Design - "assigner" und "assignee" sollten die relevanten 'emp_id's enthalten. – reaanb

Antwort

0

Diese in erster Linie Rollen für einen Mitarbeiter, so dass Sie Tabellen mit wie Developer am Ende, werden Tester etc. Sie eine EmployeeID haben Feld als foreign key in die Employee Tabelle.

kann Der andere Ansatz sein (und ich werde es empfehlen) eine einzige Tabelle EmployeeRole genannt zu haben, wo Sie für jede Rolle einen Datensatz haben eine Employee haben kann. Auf diese Weise müssen Sie nicht jedes Mal, wenn Sie eine neue Rolle erstellen, eine neue Tabelle erstellen. Es wird einfach nur ein Fall sein, einen neuen Datensatz in der Tabelle EmployeeRole hinzuzufügen. Dies gilt auch für das Szenario, in dem eine Employee mehr als eine Rolle - ein Entwickler sowie Tester für verschiedene Probleme.

+0

aber ich brauche zwei Fremdschlüssel für die Ausgabetabelle mit der employeeId Referenz für Tester und eine für Entwickler wie Ich erreiche das ist eine stille Frage –

+0

Anstatt die Employee-Tabelle direkt zu referenzieren, müssen Sie auf die 'EmployeeRole'-Tabelle (' EmployeeRoleID'-Spalte) verweisen, die wiederum auf die 'Employee'-Tabelle verweist. So bekommen die 'Employee' Details zu einem Problem Ihrer Anfrage in etwa so aussehen würde. \t' SELECT Emp * \t VON \t Ausgabe I \t EmployeeRole ER JOIN ON I.TesterID = ER.EmployeeRoleID \t JOIN Employee EMP ON ER.EmployeeID = EMP.EmployeeID' – AKS

+1

Ihre "Lösung" lässt keine referenzielle Integrität zu und missbraucht Surrogatschlüssel, um vordefinierte Zugriffspfade zu erstellen, die den Abfragen zusätzliche Joins und Komplexität auferlegen. – reaanb

0

Werfen Sie einen Blick auf . Mit dieser Technik können Sie emp-id als Primärschlüssel in den Tester- und Entwicklertabellen und auch als Fremdschlüssel verwenden, der auf die employee-Tabelle verweist. Dies ist eine gängige Praxis bei der Implementierung einer IS-A-Beziehung.