2010-08-31 3 views
12

Ich möchte Eins-zu-viele Konzept in meiner Anwendung zu implementieren. Dies ist das Szenario: Ich habe zwei TabellenWie zu implementieren One-to-Many in einer Datenbank

(i). Person (ID, NAME, ALTER, DEPT)
(ii). Verantwortlichkeiten der Person (ID, RESP)

Eine Person kann mehr als eine Verantwortung haben. Wie soll ich eine 1-n Beziehung hier implementieren? Eigentlich verstehe ich die richtigen Konzepte dafür nicht.

Irgendwelche Vorschläge oder Verbindungen , um dieses Konzept zu verstehen würden geschätzt.

Antwort

16

Diese one-to-many können Beziehung wie dies in einfachem Englisch interpretiert werden ...

Eine Person hat eine oder mehrere Aufgaben,

UND

Jede Verantwortung gehört genau einer Person zu .

Je nachdem, welche rdbms Sie verwenden, würden Sie dies als Fremdschlüsselbeziehung implementieren.

Zuerst müssen Sie eine Spalte zu RESPS hinzufügen, die auf die Personentabelle zeigt.

Nennen wir diese neue Spalte PERSON_ID.

Jetzt können wir die Beziehung erklären, der Code könnte etwa so aussehen;

ALTER TABLE [Responsibilities] ADD CONSTRAINT FOREIGN KEY (PERSON_ID) 
REFERENCES [Person] (ID) 

Und diese Erklärung eines Fremdschlüssel würde bedeuten, dass auf Sie ab sofort keine Verantwortung ohne Angabe einer Person hinzufügen, die die Verantwortung besitzt.

Sie könnten jedoch noch eine Person hinzufügen, die noch keine Verantwortlichkeiten hat, da die Personentabelle keine Einschränkungen enthält.

Beachten Sie, dass dies alles akademisch ist, da im wirklichen Leben Verantwortlichkeiten geteilt werden.

Mit anderen Worten, eine Person könnte eine oder mehrere Verantwortlichkeiten haben, aber jede Verantwortung könnte einer oder mehreren Personen gehören.

Das nennt man eine Viele-zu-Viele-Beziehung und ist ein bekanntes Datenbank-Design-Problem mit einer gut definierten Lösung - auf die ich jetzt nicht näher eingehen werde, da es sich auf Ihre Frage bezieht.

+0

Für eine oben genannte Beziehung oben, Verantwortlichkeiten haben PersonID als Fremdschlüssel. Kann die Personentabelle auch als Fremdschlüssel die Verantwortlichkeits-ID haben? Es klingt nicht richtig für mich, aber ich muss den Grund kennen, warum es falsch ist, Fremdschlüssel sowohl auf Eltern- als auch auf Kindertabellen zu haben. – ATHER

0

Was Sie schließlich haben eine Tabelle, die aus zwei Spalten besteht (für die Aufgaben nur):

PersonId, Verantwortung

Und so können Sie so etwas wie

1000 haben TakeCareOfGraden,
1000, TakeCareOfServerRoom

, die eine Person mit Pers bedeutet onId = 1000 ist für beide verantwortlich.

Der Schlüssel hier ist ein zusammengesetzter Schlüssel, der beide Felder enthält (da keines einzigartig ist).

Verwandte Themen