Kann ein Fremdschlüssel als Primärschlüssel fungieren?
Bin ich derzeit der Gestaltung einer Datenbank-Struktur für unser team-Projekt. Ich habe diese Frage im Hinterkopf, derzeit: Ist es möglich einen Fremdschlüssel fungieren als Primärschlüssel in einer anderen Tabelle?
Hier sind einige der Tabellen von unserem system Datenbank-design:
user_accounts
students
guidance_counselors
Was ich wollte, geschehen ist, dass die user_accounts
Tabelle enthalten soll, die IDs (die ja angeblich die login-Berechtigung auf dem system sind) und Passwörter sowohl die student-Benutzer und Beratungslehrer Benutzer. Kurz gesagt, die Primärschlüssel der beiden students
und guidance_counselors
Tabelle sind auch die Fremdschlüssel aus der user_accounts
Tabelle. Aber ich bin nicht sicher, ob es erlaubt ist.
Andere Frage ist: student_rec
Tabelle auch vorhanden ist, erfordert eine student_number
(das ist die user_id
im user_accounts
Tabelle) und eine guidance_counsellor_id
(das ist auch der user_id
im user_accounts
) für jeden Datensatz. Wenn sowohl die IDs der Schüler und Beratungslehrer kommen aus der user_accounts table
wie würde ich das design der student_rec
Tabelle? Und für die Zukunft, wie kann ich manuell Schreibe es als einen SQL-code?
Wurde dies nervt mich und ich finde keine bestimmte oder sicher Antwort auf meine Fragen.
InformationsquelleAutor der Frage christianleroy | 2013-07-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Natürlich. Dies ist eine Allgemeine Technik, bekannt als supertyping Tabellen. Wie in deinem Beispiel, die Idee ist, dass eine Tabelle enthält eine Obermenge von Entitäten und hat die gemeinsamen Attribute ist die Beschreibung einer Allgemeinen Entität und andere Tabellen enthalten, die Teilmengen von Entitäten mit bestimmten Attributen. Es ist nicht anders als eine einfache Klassenhierarchie im objektorientierten design.
Ihre zweite Frage kann eine Tabelle zwei Spalten, die separat Fremdschlüssel der anderen Tabelle. Wenn die Datenbank baut die Abfrage kommt, die andere Tabelle zweimal. Um zu veranschaulichen, in der eine SQL-Abfrage (nicht sicher über die MySQL-syntax, ich habe nicht verwendet es in eine lange Zeit, so ist dies MS SQL-syntax, die speziell), würden Sie, dass die Tabelle zwei verschiedene Aliasnamen, wenn die Auswahl von Daten. So etwas wie dieses:
Dies ist im wesentlichen nimmt die
student_rec
Tabelle und kombiniert Sie mit deruser_accounts
Tabelle zweimal, einmal auf jeder Spalte, und weist zwei verschiedene Aliasnamen, wenn die Kombination so zu sagen, Sie auseinander.InformationsquelleAutor der Antwort David
Ja, sollte es kein problem sein. Foreign keys und primary keys sind orthogonal zu einander, es ist in Ordnung für eine Spalte oder Gruppe von Spalten als Primärschlüssel für diese Tabelle (die Sie benötigt, um eindeutig zu sein) und auch im Zusammenhang mit einer primary key /unique-Einschränkung in einer anderen Tabelle.
InformationsquelleAutor der Antwort michel-slm