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).

    In dieser Abbildung ist gut zu erkennen, dass Access die Beziehung als 1:1-Beziehung erkannt hat (s. Eigenschaft Beziehungstyp am unteren Rand des Dialogs).

    Bild 2: Eigenschaften einer 1:1-Beziehung

    Was ist passiert

    Mit Festlegung der Beziehung und der referentiellen Integrität treten einige Regeln für die beiden Tabellen in Kraft, deren Auswirkung Sie unbedingt kennen müssen:

  • Sie können nur Datensätze in der Tabelle tblRechnungsadressen anlegen, deren Wert im Feld AdresseID in der Tabelle tblAdressen vorhanden oder gleich Null ist.
  • Wegen der Eindeutigkeit dieses Feldes in der Tabelle tblRechnungsadressen können Sie jedem Datensatz der Tabelle tblAdressen entweder keinen oder einen Datensatz der Tabelle tblRechnungsadressen zuordnen.
  • Bild 3: Abfrage zum Zusammenführen zweier per 1:1-Beziehung verknüpfter Tabellen

  • Wenn Sie einen Datensatz der Tabelle tblAdressen löschen, wird automatisch auch der gegebenenfalls vorhandene entsprechende Datensatz der Tabelle tblRechnungsadressen gelöscht (Löschweitergabe).
  • Der Nachteil von 1:1-Beziehungen ist, dass zur Bearbeitung der kompletten Daten immer eine Verknüpfung beziehungsweise eine Abfrage erforderlich ist. Der Vorteil bei dieser Abfrage ist, dass Sie damit wie mit einer Tabelle umgehen können.

    Hinweis

    Die beiden an einer 1:1-Beziehung beteiligten Tabellen werden im Folgenden Basistabelle und Erweiterungstabelle genannt.

    Wenn Sie eine Adresse inklusive Rechnungsdaten aus dem Beispiel des vorherigen Kapitels bearbeiten möchten, erstellen Sie einfach eine Abfrage, die alle Felder der beiden Tabellen mit Ausnahme des Primärschlüsselfeldes der Tabelle tblRechnungsadressen enthält (siehe Bild 3). Aus Platzgründen sind dort nur die jeweils ersten Felder der Tabellen abgebildet.

    Hinweis

    In diesem Kapitel ist des öfteren die Rede davon, Daten in Tabellen oder Abfragen anzusehen oder zu bearbeiten. Für Beispielzwecke ist das in Ordnung. Wenn eine Anwendung aber in Betrieb genommen wird, greift der Benutzer natürlich nur über Formulare und Berichte auf die enthaltenen Daten zu.

    Alle Datensätze per Left Join

    Die Abfrage hat lediglich einen Schönheitsfehler: Wenn Sie einen neuen Datensatz anlegen und nur die Felder der Basistabelle tblAdressen ausfüllen, legt Access auch nur in dieser Tabelle einen Datensatz an.

    Ein verknüpfter Datensatz in der Erweiterungstabelle tblRechnungsadressen wird erst angelegt, wenn Sie eines der Felder dieser Tabelle füllen (auch wenn Sie es anschließend wieder leeren – es reicht, den Datensatz einmal “anzufassen”). Damit ein vollständiger “Datensatz” (also mit Feldern in beiden Tabellen) angelegt wird, müssen Sie Daten in Felder beider Tabellen eintragen.

    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