Eine m:n-Beziehung ist eigentlich gar keine echte Beziehung, sondern die Kombination zweier per 1:n-Beziehung verknüpfter Tabellen – wobei es eine dritte Tabelle gibt, welche die beiden per m:n-Beziehung zu verknüpfenden Tabellen verbindet. Dazu stellt diese Verknüpfungstabelle zwei Fremdschlüsselfelder, über die sie mit den beiden übrigen Tabellen verknüpft wird und diese so miteinander verbindet. Was es beim Anlegen solcher m:n-Beziehungen zu beachten gibt, welche Sonderfälle man wozu nutzen kan und welche Möglichkeiten sich sonst noch bieten, zeigen wir in diesem Artikel.
Beispieldatenbank
Die Beispiele dieses Artikels findest Du in der Datenbank 2301_TabellenBasics_mnBeziehungen.accdb.
Rückblick: 1:n-Beziehungen
Im Artikel Tabellen [basics]: 1:n-Beziehungen (www.access-basics.de/571) haben wir die 1:n-Beziehung vorgestellt. Eine 1:n-Beziehung verwenden wir immer, wenn wir einem Element einer Entität mehrere Elemente einer anderen Entität zuordnen wollen – und nicht umgekehrt. Das ist zum Beispiel bei Kunden und Anreden der Fall. Jeder Kunde bekommt eine Anrede, aber jede Anrede kann mehreren Kunden zugeordnet werden.
Ein anderes Beispiel sind Kunden und Bestellungen. Jede Bestellung wird einem Kunden zugeordnet, aber jeder Kunde kann mehrere Bestellungen haben. Jede Konto hat mehrere Transaktionen, aber jede Transaktion wird nur einem Konto zugeordnet. Die Beziehungen werden jeweils über ein Fremdschlüsselfeld hergestellt, in das wir den Wert des Primärschlüsselfeldes der Tabelle mit dem zu verknüpfenden Datensatz eintragen. So tragen wir beispielsweise in der Kundentabelle den Primärschlüsselwert der Anrede des Kunden aus der Anredentabelle in ein Fremdschlüsselfeld namens AnredeID ein.
m:n-Beziehungen
m:n-Beziehungen sind nicht anderes als zwei Tabellen, deren Primärschlüsselwerte über eine dritte Tabelle, der sogenannten Verknüpfungstabelle, mit einander verknüpft werden. Der Unterschied zwischen 1:n-Beziehungen und m:n-Beziehungen liegt darin, dass jeder Datensatz der einen Tabelle mit jedem Datensatz der anderen Tabelle verknüpft werden können soll. So wollen wir beispielsweise folgende Entitäten miteinander verknüpfen können:
- Bücher und Autoren
- Filme und Darsteller
- Studenten und Kurse
- Autos und Ausstattungsmerkmale
- Bestellungen und die enthaltenen Produkte
Beispiel Bücher und Autoren
Die meisten Bücher haben nur einen Autor, aber es gibt auch einige Bücher, die von mehreren Autoren verfasst wurden. In diesem Fall reicht es nicht mehr aus, wenn wir der Tabelle mit den Büchern ein Fremdschlüsselfeld zur Auswahl eines der Einträge einer Autorentabelle hinzufügen. Wir müssen auch eine Möglichkeit schaffen, einem Autor mehr als ein Buch zuzuordnen.
Hier kommen die m:n-Beziehung und die Verknüpfungstabelle ins Spiel. Wir lagern dabei die Informationen über die Verknüpfungen zwischen Autoren und Büchern in eine weitere Tabelle aus.
Diese muss zumindest zwei Fremdschlüsselfelder enthalten, mit denen für jeden Datensatz der Verknüpfungstabelle die Zuordnung eines Autors zu einem Buch erfolgen kann. Warum mindestens Weil die Verknüpfungstabelle gegebenenfalls auch noch einen Primärschlüssel enthält oder noch weitere Felder mit zusätzlichen Informationen.
Beispieltabellen anlegen
Wir gehen davon aus, dass wir zwei einfache Tabellen angelegt haben, die wir per m:n-Beziehung verknüpfen wollen. Die erste heißt tblAutoren und enthält die beiden Felder AutorID und Autor. Die zweite heißt tblBuecher und nimmt die beiden Felder BuchID und Buch auf (siehe Bild 1).
Bild 1: Tabellen zum Speichern von Autoren und Büchern in der Entwurfsansicht
Verknüpfungstabelle anlegen
Im einfachsten Fall hat die Verknüpfungstabelle nur zwei Felder. Das erste Feld ist ein Fremdschlüsselfeld zum Eintragen des Primärschlüsselwertes des zu verknüpfenden Datensatz der Autorentabelle, das zweite ein Fremdschlüsselfeld für den Datensatz der Büchertabelle.
Verknüpfungsfelder benennen
Wir benennen diese genau wie die entsprechenden Primärschlüsselfelder, sodass wir einen Tabellenentwurf wie in Bild 2 erhalten.
Bild 2: Erstellen der Verknüpfungstabelle für Autoren und Bücher
Datentypen der Verknüpfungstabelle
Genau wie bei einfachen 1:n-Beziehungen müssen die an der Beziehung beteiligten Felder, also das Primärschlüsselfeld und das Fremdschlüsselfeld, den gleichen Datentyp aufweisen.
Wenn wir also das Primärschlüsselfeld der beiden Tabellen tblAutoren und tblBuecher als Autowertfeld mit dem Datentyp Zahl (mit der Feldgröße Long Integer) ausgelegt haben, müssen wir auch die Fremdschlüsselfelder als Zahl (Long Integer) definieren.
Verknüpfungstabelle benennen
Beim Speichern legen wir den Namen für die Verknüpfungstabelle fest. Wenn es keine sinnvollere Bezeichnung gibt, verwenden wir einfach das Präfix tbl plus die Mehrzahl der zu verknüpfenden Elemente der ersten Tabelle plus die Mehrzahl der zu verknüpfenden Elemente der zweiten Tabelle – im Beispiel tblAutorenBuecher.
An dieser Stelle haben wir noch kein Primärschlüsselfeld definiert, weshalb Access beim ersten Speichern fragt, ob wir dieses automatisch hinzufügen wollen. Da wir im ersten Beispiel eine Verknüpfungstabelle mit einem zusammengesetzten Primärschlüssel definieren wollen, lehnen wir dies ab.
Verknüpfungen manuell herstellen
In diesem ersten Beispiel wollen wir auch die Beziehungen zwischen der Tabelle tblAutorenBuecher und den beiden Tabellen tblAutoren und tblBuecher von Hand anlegen und dazu nicht den Nachschlage-Assistenten nutzen.
Stattdessen öffnen wir über den Ribbonbefehl Datenbanktools|Beziehungen|Beziehungen das Beziehungenfenster. Dieses ist zu diesem Zeitpunkt für unsere Beispieldatenbank noch leer. Also ziehen wir alle an der m:n-Beziehung beteiligten Tabellen aus dem Navigationsbereich in das Beziehungen-Fenster.
Danach stellen wir gleich die erste Beziehung zwischen dem Feld AutorID der Tabelle tblAutorenBuecher und dem Feld AutorID der Tabelle tblAutoren her. Dazu ziehen wir das Feld aus der Tabelle tblAutorenBuecher auf das entsprechende Feld der Tabelle tblAutoren (siehe Bild 3). Wir können auch das Feld AutorID der Tabelle tblAutoren auf das Feld AutorID der Tabelle tblAutorenBuecher ziehen – das Ergebnis ist das gleiche.
Bild 3: Anlegen der Beziehung zwischen tblAutorenBuecher und tblAutoren
Noch bevor die Beziehung angelegt wird, erscheint der Dialog Beziehungen bearbeiten (siehe Bild 4). Hier geht es im Wesentlichen darum, die gewünschten Restriktionen für diese Beziehung zu definieren. Wenn wir die Option Mit referentieller Integrität aktivieren, sorgen wir dafür, dass wir für das Fremdschlüsselfeld AutorID der Verknüpfungstabelle nur solche Werte auswählen können, die im Primärschlüsselfeld der verknüpften Tabelle tblAutoren enthalten sind oder der Wert Null, also keine Auswahl für dieses Feld. Um dies zu verhindern, kann man vor oder nach dem Definieren der Beziehung wie in Bild 5 die Eigenschaft Eingabe erforderlich für die Fremdschlüsselfelder aktivieren.
Bild 4: Verhindern, dass kein Autor für einen Verknüpfungsdatensatz ausgewählt wird
Bild 5: Eigenschaften der Beziehung
An dieser Stelle sei angemerkt, dass Zahlenfelder üblicherweise mit dem Standardwert 0 ausgestattet werden. Hier würden wir empfehlen, die Eigenschaft Standardwert im Entwurf für die Fremdschlüsselfelder zu leeren.
Löschweitergabe aktivieren
Die zweite wichtige Einstellung im Beziehungen-Fenster heißt Löschweitergabe an verwandte Datensätze. In diese Entscheidung sollte man entsprechende Zeit investieren, um später schwerwiegende Probleme bis hin zu Datenverlust zu verhindern. Aktiviert man diese Option nicht, gibt es dieses Risiko nicht. Das Schlimmste, was dann geschehen kann, ist dass der Benutzer versucht, einen Datensatz aus der Tabelle tblAutoren zu löschen, der bereits im Feld AutorID der Tabelle tblAutorenBuecher referenziert wurde. Dann wird der Fehler aus Bild 6 ausgelöst.
Bild 6: Meldung beim Löschen eines bereits verknüpften Autor-Datensatzes
Wenn wir jedoch die Löschweitergabe aktivieren, können wir nicht nur die Einträge der Tabelle tblAutoren löschen. Unter bestimmten Umständen werden sogar die mit diesem Datensatz verknüpften tblAutorenBuecher mitgelöscht.
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: