2016-08-02 11 views
0

Ich habe eine Frage über die gleiche FK im Schema verwenden. Hier ist die Fragemehrere Fremdschlüssel ERD

Lassen Sie mich sagen, ich habe verschiedene Arten von Papier mit unterschiedlichem Gewicht verwenden, um Cover und Seite zu drucken.

Also muss ich die Paper_ID als FK in Book-Tabelle stecken. Das Problem ist, dass es falsch ist, einen anderen Spaltennamen als FK zu haben. Wenn ich die Tabelle in den gleichen Spaltennamen ändere, wird es so komisch sein.

|==========================================| 
|     Book     | 
|==========================================| 
| Book_ID (PK)| Paper_ID(FK) | Paper_ID(FK)| 
|-------------|--------------|-------------| 

Irgendwelche Hilfe zu diesem Problem?

+0

Und um die Fremdschlüssel zu bestimmen, bestimmen Sie zuerst die Beziehung zwischen Buch und Papier. Ist es M-N, 1-1 (Wer hat die volle Teilnahme?), 1-M. Weil keine Tabelle zwei Fremdschlüssel haben sollte, die nicht zusammengesetzt sind und auf dieselbe Tabelle verweisen ... –

Antwort

0

Es ist nicht falsch, Spaltennamen zu haben, die sich vom Domänennamen der Spalte unterscheiden. In der Tat ist es oft notwendig.

Die Alternative - mit zwei Spalten mit dem gleichen Namen - ist schlecht. Woher weißt du, in welcher Spalte Deckblatt und welches Seitenblatt angegeben ist? Nach Position? Dies verknüpft die Bedeutung des Inhalts mit der physischen Darstellung der Daten. Was passiert, wenn ich Book_ID und nur eine der Spalten Paper_ID auswähle? Ohne zusätzliche externe Informationen würde man nicht wissen, was die Daten bedeuten. Vielmehr sollte diese zusätzliche Information Teil der Darstellung sein, damit sie möglichst selbsterklärend ist.

In Beziehungen, in denen jede Rolle von einer eindeutigen Domäne ausgefüllt wird, ist es einfach, einfach den Namen der Domäne als den Namen der Rolle ohne Verwirrung zu verwenden. Wenn ein Buch aus einer einzigen Art von Papier besteht, macht es Sinn, über das Papier des Buches zu sprechen. Selben für ein Fahrradsitz und die Nase einer Person.

Wenn jedoch eine Beziehung mehr als eine der gleichen Art von Sache hat, müssen wir die Rolle jeder Sache angeben. Unterscheiden Sie Cover_Paper und Page_Paper wie Sie es getan haben, ist der richtige Weg, es zu tun. (Es ist zu schade SQL DBMS haben keine gesonderte Rolle und Domainnamen für jede Spalte, aber ich schweife ab.)

Sie es Cover_Paper_ID und Page_Paper_ID nennen könnte, es ist eine Art Branchen Konvention ID Surrogat ID-Spalten zu befestigen, obwohl Ich denke, es liest sich besser ohne. In anderen Beziehungen ist es oft ausreichend, nur die Rolle ohne die Domäne zu schreiben - z. in einem Marriage könnten wir Spalten für Husband und Wife haben, anstatt Husband_Person und Wife_Person zu schreiben.

Sowohl Edgar Codd (Autor von A Relationale Modell von Daten für große Shared Data Banks) und Peter Chen (Autor von Die Entity-Relationship-Modell - Gegen eine einheitliche Sicht auf Daten) diskutieren Rollen in ihren Papieren. Ich empfehle sehr, beide zu studieren, besonders da nur sehr wenige Online-Quellen das Thema erwähnen.