# Frage zum Datenbankdesign



## Guest (3. Nov 2005)

Hallo!

Ich fange gerade erst an mich mit Datenbanken und JDBC zu beschäftigen und bräuchte deshalb euren Rat beim Datenbankdesign. Wenn man eine Tabelle T hat, die mehrere andere Tabellen referenziert, ist es dann besser Zwischentabellen zu verwenden, oder,  die Primärschlüssel der Tabellen, die referenziert werden, als Fremdschlüssel in die Tabelle T zu übernehmen.

Z.B. Tabelle Person (Primärschlüssel personId) und Tabelle Employer (Primärschlüssel employerId). Jeder Arbeitgeber und jede Person kann mehrere Adressen haben. Jede Adresse gehört zu genau einem Arbeitgeber bzw. einer Person.

Wenn ich personId und employerId als Fremschlüssel in die Address-Tabelle übernehme, dann müsste man nicht über Zwischentabellen auf Adressen zugreifen. Allerdings scheint mir die Verwendung von Zwischentabellen irgendwie sauberer zu sein. Da ich allerdings noch keine Erfahrung damit habe, würde ich gerne eure Meinung dzu hören.


----------



## Dukel (4. Nov 2005)

Anonymous hat gesagt.:
			
		

> Hallo!
> 
> [...]
> Z.B. Tabelle Person (Primärschlüssel personId) und Tabelle Employer (Primärschlüssel employerId). Jeder Arbeitgeber und jede Person kann mehrere Adressen haben. Jede Adresse gehört zu genau einem Arbeitgeber bzw. einer Person.
> [...]



Was jetzt? Hat jetzt jede Person (ist der Employer nicht der Arbeitnehmer) genau eine Addresse oder mehrere Addressen?
Was soll an Zwischentabellen sauberer sein?
Ich würde die 2 Tabellen verknüpfen.


----------



## Guest (4. Nov 2005)

Hallo Dukel!

Danke für die Antwort! 
Employer ist der Arbeitgeber und Employee wäre der Arbeitnehmer. Jede Person kann mehrere Adressen haben und jeder Arbeitgeber kann mehrere Addressen haben, aber eine Adresse kann nicht mehrfach verwendet werden. D.h.
Person - Addresse ist eine 1:n Beziehung und Arbeitgeber - Adresse ist auch eine 1:n Beziehung.

Die Frage stelle ich deshalb, weil in den Beispielen, die ich bisher gesehen habe die Foreign keys immer das Attribut NOT NULL hatten. In meinem Fall wäre es aber so, dass ich in der Address-Tabelle 2 Foreign keys hätte (personId und employerId), wobei einer immer null sein muß. D.h. Wenn ein Address-Datensatz zu einer Person gehört, dann muß die employerId = null sein und personId hätte den Primärschlüsselwert des entprechenden Personendatensatzes. Gehört eine Addresse zu einem Arbeitgeber, dann wäre es genau umgekehrt.

Da ich wie gesagt noch keine Erfahrung mit solchen Dingen habe, wüsste ich gerne, ob das eine übliche Lösung für so ein Problem ist.

Mit 2 Zwischentabellen PersonAddress mit den Feldern personId und addressId und EmployerAddress mit den Feldern employerId und addressId könnte man dieses "NULL Problem" der Foreign keys in der Address Tabelle lösen. Wobei ich eben nicht weiß, ob es überhaupt ein Problem ist wenn Foreign keys null sein können bzw. müssen.


----------



## Bleiglanz (4. Nov 2005)

a) es ist überhaupt kein Problem, dass die FKs NULL sind, teilweise ist das ja logisch erforderlich

b) dein Problem ist klar, ich würde das auch mit 2 FKs realisierien von denen eben einer NULL sein muss (Constraint einbauen)

Wirklich gute Lösung kenne ich auch nicht (und würde mich sehr über eine freuen), das mit den zwei Zwischentabellen ist - für diesen Fall - einfach zu kompliziert


----------



## Guest (4. Nov 2005)

Hallo Bleiglanz!

Danke für die Anworten! Das hat mir schonmal sehr geholfen.

Eine Frage hätte ich allerdings noch: Wie kann man so einen Constraint definieren, der sicherstellt, dass der jeweils andere Foreign Key null ist ?


----------



## Reinhold (4. Nov 2005)

[edit] hab meinen schwachsinnigen vorschlag wieder gelöscht


----------

