15. N:M Beziehung

Grundsätzlich ist es möglich, dass ein Datensatz aus einer Tabelle N mehrere passende Datensätze der Tabelle M und umgekehrt besitzt. Um Datenredundanzen zu vermeiden, wird man hier eine N:M Beziehung einführen.

In relationalen Datenbanken ist eine derartige Beziehung nicht direkt herzustellen. Daher muss eine weitere Tabelle Z eingefügt werden, die dafür sorgt, dass die vorliegende N:M Beziehung in zwei 1:N Beziehungen aufgespaltet wird. D.h., die Tabelle Z beinhaltet die Verknüpfung zwischen Tabelle N und M.

Tabelle N zu Z sowie Tabelle M zu Z stellen dann jeweils eine 1:N Beziehung dar.

Ähnlich wie bei der oben durchgeführten 1:N Beziehung werden die Primärschlüssel von Tabelle N und M in Tabelle Z eingefügt.

 

Beispiel 3

Erstelle eine Datenbank für Aufschlüsse und deren Koordinaten sowie mit den vorkommenden lithostratigraphischen Einheiten und deren Gesteinscharakterisierung. Füge außerdem zu jedem Datensatz eine Kartenskizze als Bild ein.

Aufschluss Barmstein, RW (Rechtswert) 430963 HW (Hochwert) 283448, Salzburg (Karte: barmstein.jpg).
Lithostratigraphie: Barmsteinkalk und Oberalmerschichten

Aufschluss Trattberg, RW 445621 HW 278038, Salzburg (Karte trattberg.jpg).
Lithostratigraphie: Barmsteinkalk und Oberalmerschichten

Aufschluss Tressenstein, RW 484303 HW 276538, Steiermark (Karte tressenstein.jpg).
Lithostratigraphie: Tressensteinkalk, Plassenkalk und Oberalmerschichten

Aufschluss Plassen, RW 470632 HW 270277, Oberösterreich (Karte plassen.jpg).
Lithostratigraphie: Plassenkalk

Alter und Charakterisierung der Gesteine:
Oberalmerschichten: Tithonium bis Berriasium; bankige mikritische Kalke
Barmsteinkalk: Tithonium bis Berriasium; grobdetritische Kalkbänke, eingeschaltet in die Oberalmerschichten
Tressensteinkalk: Kimmeridgium bis Titonium; massige Kalkbrekzien mit Komponenten des Plassenkalkes
Plassenkalk: Kimmeridgium bis Berriasium; massiger Riffkalk

 

Übung: Überlege dir die Datenbankstruktur. Welche Beziehungen bestehen zwischen den Angaben, wie können Datenredundanzen vermieden werden?

 

 

Tabellen erstellen:

Achten Sie zunächst darauf, dass die drei vorhandenen Karten in Ihrem Arbeitsverzeichnis liegen!

Nun werden die Tabellen erstellt:

1. Tabelle TabAufschluss mit den Feldern:

    Aufschluss         für den Namen des Aufschlusses. Textfeld, sicherheitshalber 255 Zeichen. Indiziert: ja (Ohne Duplikate). Eingabe erforderlich: ja. Der Name des Aufschlusses sollte jeweils einzigartig sein und kann daher als Primärschlüssel verwendet werden

    RW                      Rechtswert. Feldgröße: LongInteger, Gültigkeitsregel: "??????" (d.h., immer 6-stellig) (es wäre auch ">=999999" möglich); Gültigkeitsmeldung: Achtung: RW immer 6-stellig!

    HW                      Hochwert. Rest wie oben.

    Land                  

    Foto                   für die Abbildung der Karte. Felddatentyp: OLE-Objekt

    Bemerkung       Memo - Feld

 

.2. Tabelle TabLitho mit den Feldern:

    Litho                  Lithostratigraphische Einheit. Kann wegen der Einzigartigkeit als Primärschlüssel verwendet werden. Eingabe erforderlich: Ja.

    Gestein              Gesteinscharakterisierung, sicherheitshalber ein Memo - Feld

    Alter                   Könnte als eigene Tabelle angefertigt werden. Wir verwenden hier aber ein einfaches Textfeld.

 

3. Tabelle Auf-Litho als Verknüpfungsdatei mit den beiden Primärschlüssel-Feldern aus den anderen Tabellen:

Dazu markiert man in den anderen beiden Feldern jeweils die ganze Zeile des Primärfeldes, kopiert es, und fügt es in Auf-Litho ein

    Aufschluss        

    Litho 

Wichtig: bei beiden Feldern in dieser Tabelle muss jetzt Eingabe erforderlich - Nein und Indiziert - Nein eingetragen werden.

Die Frage nach dem Primärschlüsse stellt sich nun. Man könnte ein eigenes Primärschlüsselfeld namens ID einfügen; das wäre jedoch unnötige Verschwendung von Speicherplatz. Man kann beide Felder als Primärschlüssel definieren, da jede Kombination von Aufschluss und Litho einzigartig ist.

Dazu markiert man beide Zeilen, klickt mit der rechten Maustaste darauf und wählt den Primärschlüssel

 

 

Verknüpfen und Beziehungen definieren:

Menü Extras - Beziehungen. Markieren der Tabellen und Hinzufügen.

Nun zieht man Aufschluss aus TabAufschluss (hier unsere Tabelle "1" bzw. 'Haupttabelle') mit der Maus auf Aufschluss in Auf-Litho  (hier unsere Tabelle "N", bzw. 'Nebentabelle').

Dann markiert man die drei Fenster (mit referentieller Integrität, etc.) und klickt Erstellen.

Dann macht man dasselbe mit Litho in TabLitho (Haupttabelle) und Auf-Litho (Nebentabelle)

 

 

Somit habe ich eine N:M Beziehung durch zwei 1:N Beziehungen mit einer zusätzlichen Tabelle erstellt.

 

Übung: Öffne die beiden Tabellen untereinander und gib die Daten ein

 

Die Dateneingabe über die Tabellen kann nun sowohl über TabAufschluss als auch über TabLitho erfolgen.

Zuerst werden wir in TabLitho sämtliche lithostratigraphischen Einheiten samt Lithologie und Alter eintragen. Dann öffnen wir TabAufschluss und fügen die Daten für den Aufschluss 'Barmstein' ein. Wenn wir das "+" Symbol anklicken, öffnet sich ein Fenster. Hier kann ich jetzt 'Barmsteinkalk' eintragen. 'Barmsteinkalk' ist der Primärschlüssel des entspr. Datensatzes aus TabLitho und somit sind die Datensätze verknüpft.

Versuche, 'Barmsteinkalk' falsch zu schreiben und Access wird dir mitteilen, dass es keinen entspr. Datensatz gibt!

 

 

Der unterschied zur 1:N Verknüpfung in Beispiel 2 ist, dass wir es hier nicht mit einem Haupt- und Unterdatenblatt zu tun haben, sonder sozusagen mit zwei Hauptdatenblättern. Daher kann man bei der Erstellung eines Formulars wählen, welches der zwei Datenblätter als Unterformular dienen soll.

 

Übung: Geben Sie die Daten in die Tabelle ein. Erstelle nun eine Abfrage (z.B. in welchen Aufschlüssen kommt Barmsteinkalk vor).