1:1-Beziehungen

André Minhorst, Duisburg

Direkte Beziehungen zwischen eindeutigen Schlüsseln zweier Tabellen heißen 1:1-Beziehungen, weil jeder Datensatz der einen Tabelle mit maximal einem Datensatz der zweiten Tabelle verknüpft sein kann. Dieser Beziehungstyp ist zwar relativ selten, aber dennoch praxisrelevant. In diesem Beitrag erfahren Sie, wann der Einsatz von 1:1-Beziehungen sinnvoll ist und welche Besonderheiten es dabei zu beachten gilt.

Der Einsatz von 1:1-Beziehungen ist beispielsweise in folgenden Fällen sinnvoll:

  • Eine Tabelle hat mehr als 255 Felder und überschreitet damit die maximal mögliche Feldanzahl.
  • Eine Tabelle enthält selten verwendete Felder. Diese lassen sich in eine zweite per 1:1-Beziehung verknüpfte Tabelle ausgliedern; die zweite Tabelle enthält nur Datensätze, wenn mindestens eines der Felder gefüllt ist.
  • Für bestimmte Felder einer Tabelle sollen andere Zugriffsberechtigungen gelten. Diese lassen sich in einer zweiten Tabelle einfach festlegen.
  • Der Zugriff auf die Daten soll objektorientiert erfolgen. Durch 1:1-Beziehungen lässt sich Vererbung gut nachbilden.
  • Im Beitrag Artikelverwaltung mit Inventurfunktion in dieser Ausgabe von Access im Unternehmen finden Sie gleich zwei Beispiele für 1:1-Beziehungen. In beiden Fällen enthält eine Tabelle die Hauptdaten des zu speichernden Objekts und es gibt eine oder mehrere Tabellen mit weiteren Daten, die in einem Fall vorhanden sein müssen und im anderen Fall vorhanden sein können.

    Im ersten Beispiel handelt es sich um Bestandsänderungen in der Artikeldatenbank. Die Bestandsänderungen treten in Form von Wareneingängen, Warenausgängen (Bestellungen) und Umbuchungen (etwa bei Fehlbeständen zum Zeitpunkt einer Inventur) auf. Jede dieser Bestandsveränderungen hat allgemeine und spezifische Eigenschaften: Alle drei beziehen sich auf einen Artikel, enthalten eine Anzahl und ein Datum. Der Wareneingang enthält Informationen über den Einkaufspreis und den Lieferanten des jeweiligen Artikels, der Warenausgang enthält einen Verkaufspreis und Umbuchungen haben eine bestimmte Umbuchungsart und beispielsweise ein Bemerkungsfeld.

    Für jede Bestandsänderungsart eine Tabelle

    Theoretisch könnten Sie für Wareneingänge, Warenausgänge und Umbuchungen eine eigene Tabelle anlegen. Die drei Tabellen hätten dann einige gemeinsame Eigenschaften und einige spezielle Eigenschaften.

    Wenn man damit eine Inventur durchführen wollte, würde man eine UNION-Abfrage über die relevanten Felder der drei Tabellen erstellen und die gewünschten Zahlen addieren. UNION-Abfragen sind aber nicht besonders performant; außerdem kann man dort nicht über den Primärschlüssel auf einen der Datensätze zugreifen.

    Es lässt sich zwar ein behelfsmäßiges Primärschlüsselkonstrukt aus dem eigentlichen Primärschlüssel und einem tabellenabhängigen Wert zusammensetzen, doch der Umgang damit ist relativ aufwändig.

    Mit einer Tabelle, die alle gemeinsamen Felder enthält, und mehreren Tabellen mit den Eigenheiten der jeweiligen Ausprägung der Bestandsveränderung lässt sich dieses Problem umgehen:

    Die Haupttabelle enthält auf jeden Fall einen eindeutigen Primärschlüssel und man kann ohne Verknüpfung auf alle abrechnungsrelevanten Daten zugreifen.

    Dafür ist wiederum eine Verknüpfung erforderlich, wenn man nur eine Ausprägung – also beispielsweise die Wareneingänge – mit allen Daten anzeigen oder bearbeiten möchte.

    Für die Erstellung einer 1:1-Beziehung müssen folgende Voraussetzungen erfüllt sein:

  • Es liegen zwei Tabellen mit einem eindeutigen Schlüssel vor. Das kann, aber muss kein Primärschlüssel sein.
  • Maximal eines der beiden Felder erhält seine Werte über die Autowert-Funktion.
  • Die beiden zu verknüpfenden Felder haben den gleichen Datentyp.
  • Sind diese Voraussetzungen erfüllt, können Sie loslegen. Verwenden Sie als Beispiel die ebenfalls in der Artikeldatenbank enthaltene Tabelle tblAdressen, die mit der Tabelle tblRechnungsadressen um die abrechnungsrelevanten Daten erweitert werden soll.

    Im Beispiel sind nicht die beiden Primärschlüssel an der Beziehung beteiligt, sondern ein Primärschlüssel und ein eindeutiger Schlüssel mit gleichem Namen (AdresseID). Die zweite Tabelle hat einen eigenen Primärschlüssel, der nicht in die Beziehung involviert ist.

    Eindeutiger Index

    Um ein Feld einer Tabelle als eindeutigen Index festzulegen, öffnen Sie die Tabelle in der Entwurfsansicht und zeigen mit dem Menübefehl Ansicht/Indizes den Dialog Indizes an.

    Dort tragen Sie den Namen des neuen Index ein, wählen das oder die betroffenen Felder aus (in diesem Fall AdresseID) und stellen die Eigenschaft Eindeutig auf den Wert Ja ein (siehe Bild 1).

    Bild 1: Festlegen von Indizes

    Wenn die betroffenen Tabellen im Beziehungen-Fenster sichtbar sind, müssen Sie nur die beteiligten Felder der beiden Tabellen verbinden, indem Sie mit der Maus eines der Felder auf das andere ziehen.

    Achtung: Reihenfolge!

    Für viele Fälle ist es wichtig, welche Tabelle für das “Ziehen” des Beziehungspfeils als Quelle und welche als Ziel dient.

    Wenn Sie referentielle Integrität festlegen möchten, um beispielsweise die Aktualisierungs- und Löschweitergabe zu verwenden, muss die Ausgangstabelle im Eigenschaftsfenster der Beziehung auf der linken Seite stehen (siehe Bild 2).

    Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

    TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

    Schreibe einen Kommentar