window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Tabellen [basics]: 1:1-Beziehungen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Nachdem wir bereits die 1:n-Beziehung und die m:n-Beziehung kennengelernt haben, wobei letztere nur zwei 1:n-Beziehungen mit zwei Mastertabellen und der gleichen Detailtabelle sind, schauen wir uns nun den letzten Beziehungstyp an: die 1:1-Beziehung. Dabei legen wir eine Einschränkung fest, bei der wir einen Datensatz der einen Tabelle genau einem Datensatz der anderen Tabelle zuordnen können. Aber wozu sollte man das brauchen – und wie realisiert man eine 1:1-Beziehung All das erläutern wir in diesem Artikel.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank TabellenBasics_11Beziehungen.accdb.

Was sind 1:1-Beziehungen

Bevor wir richtig einsteigen, eine kurze Beschreibung, was 1:1-Beziehungen eigentlich sind. Dabei handelt es sich eigentlich um eine 1:n-Beziehung, bei der wir in der Detailtabelle, also der Tabelle mit dem an der Beziehung beteiligten Fremdschlüsselfeld, für das Fremdschlüsselfeld einen eindeutigen Index festlegen. Das bedeutet, das wir jeden Datensatz der Mastertabelle nur einmal zu einem Datensatz der Detailtabelle zuordnen können. Wie wir die 1:1-Beziehung technisch definieren, erläutern wir weiter unten.

Warum 1:1-Beziehungen

Nun schauen wir uns erst einmal an, warum man überhaupt 1:1-Beziehungen nutzen sollte.

  • Ein zwingender Grund, eine 1:1-Beziehung zu definieren, ist eine mögliche Beschränkung in der Anzahl der Felder, die eine Tabelle aufnehmen kann. In einer Access-Datenbank sind dies 255 Felder. Danach weigert sich Access, weitere Felder anzulegen (siehe Bild 1). In SQL Server-Datenbanken sind 30.000 Felder je Tabelle möglich – aber wenn man so viele Felder benötigt, sollte man ohnehin sein Datenmodell überdenken.
  • Nach 255 Feldern ist Schluss.

    Bild 1: Nach 255 Feldern ist Schluss.

  • Tabellen mit vielen Feldern auf mehrere kleine Tabellen aufzuteilen kann jedoch auch zu einer besseren Performance führen. Man braucht nicht immer alle Felder einer Tabelle, und wenn man einige davon in einer per 1:1-Beziehung verknüpften Tabelle auslagert und diese nicht immer benötigt, müssen weniger Daten transportiert werden. Das ist insbesondere in Access-Datenbanken wichtig, die in Frontend und Backend aufgeteilt sind. Hier werden im Gegensatz zu Datenbanken beispielsweise mit einem SQL Server-Backend immer alle Daten einer Tabelle übermittelt, wenn man per Abfrage auf diese zugreift.
  • Hier könnte man seine Tabellen auf Felder überprüfen, die selten gefüllt werden. Ist das der Fall, könnte man diese Felder in eine Tabelle auslagern und diese per 1:1-Beziehung mit der ursprünglichen Tabelle verknüpfen.
  • Eine 1:1-Beziehung kann auch zur Regelung der Zugriffskontrolle verwendet werden: In manchen Fällen ist es notwendig, bestimmte Informationen aufzuteilen und den Zugriff auf diese Informationen auf verschiedene Benutzer oder Benutzergruppen zu beschränken. Eine 1:1-Beziehung kann verwendet werden, um eine Entität mit sensiblen Daten zu erstellen und sicherzustellen, dass nur autorisierte Benutzer Zugriff auf diese Entität haben – beispielsweise, indem man in einem Frontend für Benutzer mit weniger Rechten nur den Teil der 1:1-Beziehung anzeigt, der für diese relevant ist, für Benutzer mit mehr Rechten aber auch den zweiten Teil der 1:1-Beziehung.
  • Manchmal gibt es auch einfach zwei Tabellen, von denen man denkt, sie müssten in einer 1:n-Beziehung stehen. Tatsächlich ist aber dann eine 1:1-Beziehung der richtige Weg.
  • Gelegentlich braucht man Felder in einer Tabelle einfach nicht mehr, aber man möchte diese dennoch für den Fall der Fälle vorhalten. Dann könnte man eine Tabelle für diese Felder erstellen und sie per 1:1-Beziehung mit der eigentlichen Tabelle verknüpfen.

Tabelle in zwei per 1:1-Beziehung verknüpfte Tabellen aufteilen

Wenn wir eine 1:1-Beziehung zwischen zwei Tabellen herstellen wollen, die zuvor in einer einzigen Tabelle enthalten waren gehen wir wie folgt vor. Als Beispiel verwenden wir eine Mitarbeiter-Tabelle, die ein Feld namens Gehalt aufweist, das wir in eine eigene Tabelle auslagern wollen (siehe Bild 2).

Diese Tabelle soll in zwei per 1:1-Beziehung verknüpfte Tabellen aufgeteilt werden.

Bild 2: Diese Tabelle soll in zwei per 1:1-Beziehung verknüpfte Tabellen aufgeteilt werden.

Die Daten sehen aktuell wie in Bild 3 aus.

Daten der aufzuteilenden Tabelle

Bild 3: Daten der aufzuteilenden Tabelle

Nun sind folgende Schritte notwendig:

  • Erstellen einer neuen Tabelle namens tblGehaelter mit den Feldern MitarbeiterID und Gehalt
  • Umbenennen der Tabelle tblMitarbeiterMitGehalt in tblMitarbeiter
  • Herstellen einer 1:1-Beziehung zwischen den Tabellen tblMitarbeiter und tblGehaelter
  • Übertragen der Werte des Feldes Gehalt der Tabelle tblMitarbeiter in das gleichnamige Feld der Tabelle tblGehaelter
  • Löschen des Feldes Gehalt aus der Tabelle tblMitarbeiter

Neue Tabelle für die Gehälter erstellen

Beim Erstellen einer Tabelle, welche die Zusatzinformationen für eine Tabelle liefert, stellt sich eine Frage: Fügen wir dieser Tabelle einen eigenen Primärschlüssel hinzu und ein Fremdschlüsselfeld zur Zuordnung des Mitarbeiters oder soll das Primärschlüsselfeld gleichzeitig das Fremdschlüsselfeld sein

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

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar