n:m-Beziehungen

Wir haben gerade gesehen, wie Beziehungen zwischen zwei Tabellen aussehen, wenn auf der einen Seite der Beziehung nur ein einziger Datensatz, auf der anderen Seite dagegen beliebig viele Datensätze stehen. Manchmal kann es aber auch auf beiden Seiten der Beziehung beliebig viele Datensätze geben. Dies nennt man n:m−Beziehung. Ein einfaches Beispiel:

Ein Unternehmen hat Kunden, die Produkte bestellen. Ein Kunde kann mehrere Produkte bestellen, und ein Produkt kann von mehreren Kunden bestellt worden sein.

Dafür benötigt man zwischen den Tabellen tblKunden und tblProdukte noch eine „Verknüpfungstabelle“, nennen wir sie tblBestellungen. Damit kann ein Kunde beliebig viele Bestellungen haben, und ebenso kann ein Produkt beliebig oft bestellt worden sein. Die n:m−Beziehung ist somit in zwei 1:n−Beziehungen aufgelöst:

Beziehungen
tblKunde 1 tblBestellungen 1 tblProdukte
IDKunde IDBestellung IDProdukt
txtVorname lngKunde txtProdukt
txtNachname lngProdukt

Dieses Beispiel lässt zu, dass ein Kunde mehrfach die gleiche Bestellung aufgibt. Das ist häufig erwünscht, es gibt aber auch n:m−Beziehungen, in denen das zwingend verhindert werden soll (Beispiel: Ein Kunde soll eine bestimmte Art von Vertrag nur einmal abschließen können, kann aber mehrere verschiedene Verträge haben). Dann wird in der Verknüpfungstabelle zusätzlich ein zusammengesetzter Schlüssel über die beiden Felder mit den n−Seiten der Beziehungen gelegt; hier wären das also lngKunde und lngProdukt. Natürlich muss bei diesem Schlüssel die Eigenschaft Eindeutig auf Ja gesetzt werden.

Indizes: tblBestellungen
  Indexname Feldname Sortierreihenfolge
PrimaryKey IDBestellungen Aufsteigend
  nurEinmal  lngKunde Aufsteigend
    lngProdukt Aufsteigend
Indexeigenschaften
PrimärschlüsselJa
EindeutigJa
Nullwerte ignorieren  Nein