Access Design: m:n-Beziehungen auflösen

Aus DBWiki
Wechseln zu: Navigation, Suche

Ein Problem, das in Access immer wieder vorkommt: Was soll man machen, wenn zwischen zwei Tabellen eine m:n-Beziehung besteht? Wenn z.B. abgebildet werden soll, welche Fächer von welchen Lehrern unterrichtet werden?

Das Datenbankdesign

Eine m:n-Beziehung erkennen und ein entsprechendes Datenbankdesign wählen

Zunächst: Wann liegt eine solche Beziehung vor? Im obigen Beispiel ist es in der Regel so, dass ein Lehrer mehrere Fächer unterrichtet. An einer Schule heute üblicher Größe wird aber auch ein- und dasselbe Fach von mehreren Lehrern unterrichtet, z.B. Mathematik für die unteren Klassenstufen von Lehrer A, für die höheren von Lehrer B und für die Abiturklassen von Lehrer C.

Liegt also eine Kombination vor, bei der ein Gegenstand, eine Person oder ein Sachverhalt, dessen Daten in einem Datensatz einer Tabelle gespeichert sind (z.B. Lehrer) mit vielen Datensätzen aus der anderen Tabelle aufgrund der realen Begebenheiten in Beziehung tritt und dies auch umgekehrt der Fall ist, spricht man von einer m:n-Beziehung.

Auf eine Kurzform gebracht: Jedes Fach wird von mehreren Lehrern unterrichtet, jeder Lehrer kann aber auch mehrere Fächer unterrichten. Diese Situation lässt sich mit einem Fremdschlüssel in einer der beiden Tabellen (wie bei einer 1:n-Beziehung) nicht abbilden.

Die Lösung lautet: Erstellen einer Zwischentabelle, die die m:n-Beziehung in zwei Beziehungen des Typs 1:n aufspaltet.

Die Tabellen

Abb. 1: Die Tabellen der Datenbank "Lehrer und Fächer" und ihre Beziehungen

Der Einbau eines Primärschlüsselfeldes in eine Zwischentabelle wie im oben dargestellten Fall kann bei sehr umfangreichen Einträgen Vorteile bringen, ist aber nicht zwingend erforderlich.

Beziehungen und referentielle Integrität

Typenlose Beziehungen sind in einer relationalen Datenbank unerwünscht. Da die m:n Beziehung in zwei 1:n Beziehungen aufgelöst wird, ist dieser Beziehungstyp einzustellen.

Dies wird im Beziehungsfenster von Access durch die Erstellung und Bearbeitung der Beziehungen zwischen den Feldern der beteiligten Tabellen bewerkstelligt:

Abb. 2: Bearbeitung der Beziehung und Einstellung referentieller Integrität

Darstellung und Eingabe der Daten

Die Darstellung der Daten erfolgt über Unterformulare (bzw. Unterberichte). Im Formular Lehrer gibt es ein Unterformular, das die von ihm unterrichteten Fächer darstellt, umgekehrt im Formular Fach die Lehrer, die das Fach unterrichten. Das Unterformular hat als Datenherkunft in beiden Fällen die Zwischentabelle tblLehrerFach.

Das Unterformular beinhaltet das Feld, mit dem es zum Hauptformular verknüpft ist (z.B. LehrerID) und ein Kombinationsfeld, das (am einfachsten über den Assistenten erstellt) seine Daten aus der jeweiligen Tabelle (z.B. tblFach) bezieht und im Steuerelementinhalt an das Feld FachID der Zwischentabelle gebunden ist. Das Kombinationsfeld umfasst zwei Spalten (FachID, FachBezeichnung), von denen die erste in der Anzeige durch Einstellung der Spaltenbreite = 0 ausgeblendet wird.

Das Beispiel lässt sich analog auf andere gleichartige Probleme anwenden (z.B. Ausbildungen von Mitarbeitern, verliehene Bücher usw.)