Tabellen [basics]: Von der 1:n- zur m:n-Beziehung

Bei der Datenmodellierung hat man nicht immer alle Aspekte vom ersten Augenblick an im Blick. Es kann passieren, dass Felder nachträglich hinzugefügt werden müssen, dass wir ihren Datentyp ändern wollen oder dass ein Tabellen- oder Feldname noch angepasst werden soll. Es kommt jedoch auch vor, dass wir eine Beziehung nicht von Anfang an so gestalten, dass sie späteren Praxisanforderungen gerecht wird. In diesem Fall wollen wir uns den Fall anschauen, wo wir eingangs dachten, wir kämen mit einer 1:n-Beziehung aus, aber letztendlich stellte sich heraus, dass eine m:n-Beziehung doch sinnvoller ist. Wir schauen uns in diesem Artikel an, wie wir eine solche Beziehung von 1:n auf m:n umstellen können, damit wir anschließend flexibler Daten zuordnen können.

Beispieldatenbank

Die Beispiele dieses Artikels findest Du in der Datenbank TabellenBasicsVon1nZumn.accdb.

Wenn die 1:n-Beziehung nicht reicht

Es gibt zahlreiche Beispiele dafür, dass eine 1:n-Beziehung auf den ersten Blick vielleicht ausreicht.

Aber dann stellt sich heraus, dass man doch ein wenig mehr Flexibilität benötigt und eine m:n-Beziehung die bessere Wahl gewesen wäre:

  • Projekte und Mitarbeiter: Je nachdem, welche Art von Projekten man bearbeitet, reicht dazu ein Mitarbeiter aus. Dann würde man in der Projekte-Tabelle ein Fremdschlüsselfeld zur Auswahl des zuständigen Mitarbeiters hinzufügen. Oft entwickeln sich Projekte aber dahin, dass sie größer werden – und mehr als ein Mitarbeiter daran beteiligt ist, gegebenenfalls mit unterschiedlichen Aufgaben. Dann benötigt man doch eine m:n-Beziehung zwischen Projekten und Mitarbeitern.
  • Mitarbeiter und Abteilungen: Eigentlich gehört jeder Mitarbeiter einer Abteilung an. Aber in flexibel agierenden Unternehmen kann es vorkommen, dass dies mit der Zeit nicht mehr ausreicht und man nicht nur jeder Abteilung mehrere Mitarbeiter, sondern auch jeden Mitarbeiter mehreren Abteilungen zuordnen möchte.
  • Kategorien und verschiedene: Ob Produkte, Bücher oder andere Elemente, die man in Kategorien einteilt: Es kann immer sein, dass man diese auch mehreren Kategorien gleichzeitig zuordnen können möchte.
  • Bücher und Autoren: Die meisten Bücher haben nur einen Autor, aber in vielen Fällen arbeiten auch mehrere Autoren an einem Buch. Auch hier ist dann eine m:n-Beziehung nötig.

Unser Beipsiel: Bücher und Kategorien

Im Artikel Tabellen [basics]: Vom Textfeld zum Lookup-Feld (www.access-basics.de/674) haben wir uns angesehen, wie wir ein einfaches Textfeld in ein Nachschlagefeld umwandeln und dafür im Hintergrund eine 1:n-Beziehung hinterlegt haben.

Dieses Beispiel greifen wir auf und wandeln diesmal die 1:n-Beziehung, über die wir für jedes Buch eine Kategorie festlegen konnten, in eine m:n-Beziehung um, damit wir für jedes Buch mehrere Kategorien definieren können.

Das Ausgangsmaterial sind also die beiden Tabellen tblBuecher und tblKategorien. In der aktuellen Version enthält die Tabelle tblBuecher ein Fremdschlüsselfeld namens KategorieID, mit dem wir einen Eintrag der Tabelle tblKategorien auswählen können (siehe Bild 1).

Die Ausgangssituation im Datenmodell

Bild 1: Die Ausgangssituation im Datenmodell

Das Ziel ist es nun, eine Verknüpfungstabelle dazwischenzuschalten, diese über entsprechende Fremdschlüsselfelder mit den beiden Primärschlüsselfeldern BuchID und KategorieID der übrigen Tabellen zu verknüpfen und die Daten entsprechend zu übertragen, sodass nichts verloren geht und wir anschließend neue Kombinationen aus Büchern und Kategorien zusammenstellen können.

Dazu gehen wir in folgenden Schritten vor:

  • Hinzufügen der Verknüpfungstabelle namens tblBuecherKategorien mit einem Primärschlüsselfeld sowie zwei Feldern zum Verknüpfen mit den beiden Tabellen tblBuecher und tblKategorien, für die wir außerdem einen eindeutigen Index definieren
  • Umwandeln der beiden Felder in Nachschlagefelder, damit wir leicht Kombinationen aus Büchern und Kategorien zusammenstellen können und damit die Voraussetzung liefern, dass wir in Formularen direkt mit Kombinationsfeldern arbeiten können. Dabei erzeugen wir direkt die notwendigen Beziehungen mit referenzieller Integrität.
  • Übertragen der Daten aus dem Feld KategorieID der Tabelle tblBuecher in neue Datensätze der Verknüpfungstabelle tblBuecherKategorien, ohne dass Daten verlorengehen.
  • Löschen des nun nicht mehr benötigen Feldes KategorieID aus der Tabelle tblBuecher.

Machen wir uns ans Werk!

Erstellen der Verknüpfungstabelle

Die Verknüpfungstabelle tblBuecherKategorien legen wir als neue, leere Tabelle an. Wir fügen das Feld BuchKategorieID als Primärschlüsselfeld mit dem Datentyp Autowert an.

Danach fügen wir die beiden Felder BuchID und KategorieID hinzu, die wir anschließend in Nachschlage-felder umwandeln wollen.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar