Tabellen [basics]: 1:n-Beziehungen

Beziehungen sind das Salz in der Datenbanksuppe. Wenn Du Daten verschiedener Art wie beispielsweise Kunden und Projekte in verschiedenen Tabellen speicherst, dann musst Du auf irgendeine Weise festlegen, für welchen Kunden welches Projekt ausgeführt wird. Wenn die Tabelle mit den Kunden ein Feld aufweist, das die Kundendatensätze eindeutig identifiziert, kannst Du der Projekte-Tabelle ein Feld zuweisen, in das Du den eindeutigen Identifizierer des Kunden einträgst, für den das Projekt durchgeführt wird. Damit erhalten wir eine Zuordnung von Kunden zu Projekten. In der Datenbankwelt gehen wir noch einen Schritt weiter und erstellen eine Beziehung, welche die beiden Tabellen auch noch in Form einer im Datenmodel festgelegten Regel verknüpft. Daraus resultieren noch weitere Möglichkeiten, die wir in diesem Artikel beschreiben werden.

Beispieldatenbank

Die Beispiele dieses Artikels findest Du in der Datenbank 2204_1nBeziehungen.accdb.

Grundlagen der 1:n-Beziehungen

Die 1:n-Beziehung ist die Grundlage für alle weiteren Beziehungen, die wir in diesem und in weiteren Artikeln vorstellen. Sie legt fest, wie man die Daten zweier Tabellen einander zuordnen kann. Gehen wir einmal von dem in der Einleitung beschriebenen Beispiel von Kunden und Projekten aus. Wichtig ist, dass wir ein Projekt hier als individuell auf einen Kunden zugeschnittenes Projekt betrachten.

Haben wir dann eine Tabelle mit Kunden, in der ein oder mehrere Kundendatensätze gespeichert sind und eine Tabelle mit entsprechenden Projekten, dann wollen wir auf irgendeine Weise festlegen, welches Projekt zu welchem Kunden gehört. Das beinhaltet, dass auch der Fall auftreten kann, dass wir einem Kunden mehrere Projekte zuordnen. Genau genommen wollen wir einem Kunden kein, ein oder mehrere Projekte zuordnen können. So können wir auch einfach einen Kundendatensatz anlegen, für den es vielleicht noch gar kein Projekt gibt.

Ein Projekt hingegen soll immer genau einem Kunden zugeordnet werden. Wir legen keine Projekte an, die noch keinem Kunden zugeordnet sind und auch das Anlegen von Projekten, die mehreren Kunden zugeordnet sind, soll nicht möglich sein.

Kunden zu Projekten zuordnen

Wie also können wir die Zuordnung grundsätzlich realisieren Die erste Voraussetzung für eine eindeutige Zuordnung von Kunden zu Projekten ist, dass es für jeden Kunden ein Feld mit eindeutigen Werten gibt. Dabei spielt es keine Rolle, ob es sich um ein Zahlenfeld oder ein Feld mit einem anderen Datentyp handelt. Wie sich zeigt, sind Zahlenfelder allerdings zu priorisieren: Gelegentlich gibt es Updates bei Microsoft, bei denen offensichtlich nur die Auswirkung auf die üblicherweise als eindeutiges Merkmal verwendeten Zahlenfelder ausreichend getestet wurden. Bei Tabellen, die beispielsweise Textfelder für das eindeutige Merkmal verwendet haben, gab es Probleme bis hin zur Unbenutzbarkeit der Datenbank.

Also wählen wir hier immer den Datentyp Zahl aus. Aber Moment. Was geschieht, wenn ich Kunden bisher in der Excel-Tabelle, in der ich die Kunden verwaltet habe, immer Kundennummern verwendet habe, die als erstes Zeichen einen Buchstaben enthalten, der dem ersten Buchstaben des Kundennamen entspricht Auch für diesen Fall gibt es eine Lösung: Du kannst durchaus ein Zahlenfeld als Primärschlüsselfeld nutzen und die eigentliche Kundennummer in einem eigenen Feld speichern.

Zuordnung per Fremdschlüsselfeld

Wenn wir nun die Tabelle tblKunden mit einigen Kundendatensätzen erstellt haben und eine Tabelle namens tblProjekte, stellt sich die Frage, wie wir festlegen können, dass ein Projekt einem bestimmten Kunden zugeordnet ist (siehe Bild 1)

Zu verknüpfende Tabellen

Bild 1: Zu verknüpfende Tabellen

Dazu kurz folgende Überlegung: Wenn wir in der Tabelle tblKunden ein Feld beispielsweise namens ProjektID hinzufügen, in das wir den Primärschlüsselwert eines der Projekte aus der Tabelle tblProjekte eintragen, können wir jedem Kunden nur ein Projekt zuweisen. Wir wollen aber durchaus für Kunden mehrere Projekte verwalten. Wenn wir für die Tabelle tblProjekte ein Feld namens KundeID anlegen, in das wir den Primärschlüsselwert des Kundendatensatzes eintragen, für den dieses Projekt durchgeführt wird, dann passt es. Wir können dann auch für zwei oder mehr Projekte den gleichen Kunden eintragen und haben somit genau die gewünschten Möglichkeiten.

Fremdschlüsselfeld hinzufügen

Also fügen wir der Tabelle tblProjekte als Erstes das als Fremdschlüsselfeld gedachte Feld hinzu – zunächst als einfaches Feld mit dem Namen KundeID und dem Felddatentyp Zahl (siehe Bild 2). Wir können hier nun theoretisch bereits Primärschlüsselwerte aus dem Feld KundeID in das Fremdschlüsselfeld der Tabelle tblProjekte eintragen. Allerdings haben wir keinerlei der Vorteile, die uns eine Beziehung mit referenzieller Integrität bietet – beispielsweise die automatische Kontrolle, dass nur solche Werte in das Fremdschlüsselfeld eingetragen werden können, die auch im Primärschlüsselfeld der Tabelle tblKunden enthalten sind. Also gehen wir noch einen Schritt weiter und fügen eine Beziehung hinzu.

Erweiterung der Tabelle um ein Fremdschlüsselfeld

Bild 2: Erweiterung der Tabelle um ein Fremdschlüsselfeld

Beziehung hinzufügen

Beziehungen kann man auf verschiedene Arten hinzufügen. Eine ist die aus dem Artikel Tabellen [basics]: Der Nachschlage-Assistent (www.access-basics.de/572). Im vorliegenden Artikel wollen wir die Beziehung jedoch einmal ohne Verwendung dieses Assistenten hinzufügen, damit Du genau siehst, was im Hintergrund alles geschieht. Deshalb fügen wir die Beziehung diesmal über das Beziehungen-Fenster hinzu, das wir mit dem Ribbonbefehl Datenbank-tools|Da-ten-banktools|Beziehungen öffnen.

Das Beziehungen-Fenster dürfte in dieser Phase der Entwicklung der Anwendung noch leer sein (siehe Bild 3). Gegebenenfalls tummeln sich dort ein paar Systemtabellen, die Du aber getrost entfernen kannst, indem Du sie markierst und dann mit der Entf-Taste aus dem Beziehungen-Fenster löschst.

Hinzufügen von Tabellen zum Beziehungen-Fenster

Bild 3: Hinzufügen von Tabellen zum Beziehungen-Fenster

Um die Tabellen, die Du mit einer Beziehung verbinden willst, hinzuzufügen, gibt es gleich zwei Möglichkeiten – Du kannst diese vom Navigationsbereich in das Beziehungen-Fenster ziehen oder vom Bereich Tabellen hinzufügen.

Mehr dazu, wie Du mit dem Beziehungen-Fenster arbeiten kannst, erfährst Du im Artikel Tabellen [basics]: Das Beziehungen-Fenster (www.access-basics.de/573).

Hier wollen wir nun die beiden Tabellen tblKunden und tblProjekte zum Beziehungen-Fenster hinzufügen, was anschließend wie in Bild 4 aussieht.

Die beiden Tabellen vor dem Hinzufügen der Beziehung

Bild 4: Die beiden Tabellen vor dem Hinzufügen der Beziehung

Um eine Beziehung zwischen dem Fremdschlüsselfeld KundeID der Tabelle tblProjekte und dem Primärschlüsselfeld KundeID der Tabelle tblKunden herzustellen, ziehst Du das Feld KundeID von der einen Tabelle auf das Feld KundeID der anderen Tabelle.

Daraufhin taucht das Fenster Beziehungen bearbeiten auf (siehe Bild 5). Dieses hat bereits einige der gewünschten Einstellungen für die Beziehung übernommen – so werden die richtigen an der Beziehung beteiligten Tabellen und Felder angezeigt. Außerdem hat Access den Beziehungstyp korrekt als 1:n-Beziehung erkannt.

Das Anlegen einer Beziehung erfordert ihre Bearbeitung.

Bild 5: Das Anlegen einer Beziehung erfordert ihre Bearbeitung.

Beziehung mit oder ohne referenzielle Integrität

Dabei können wir es zunächst belassen und den Dialog mit einem Klick auf die Schaltfläche Erstellen schließen. Danach zeigt das Beziehungen-Fenster eine einfache Beziehung zwischen den beiden Tabellen tblKunden und tblProjekte an (siehe Bild 6). “Einfache” Beziehung bedeutet, dass keine referenzielle Integrität für diese Beziehung definiert ist. Manchmal ist es schlicht nicht notwendig oder nicht möglich, eine Beziehung mit referenzieller Integrität zu definieren. Nicht möglich ist es beispielsweise dann, wenn die Bedingungen, welche die referenzielle Integrität durchsetzen soll, durch eventuell bereits vorhandene Daten noch nicht erfüllt sind. So kann es beispielsweise sein, dass das Fremdschlüsselfeld einen Wert enthält, der im Primärschlüsselfeld nicht vorhanden ist.

Die neue Beziehung

Bild 6: Die neue Beziehung

Beziehung ohne referenzielle Integrität

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:

Schreibe einen Kommentar