Inkonsistenzen in einem Datenbestand können an verschiedenen Stellen entstehen. Die eine Möglichkeit sind Inkonsistenzen, die in Folge von Duplikaten auftreten – also wenn Sie beispielsweise eine Kategorie in zwei verschiedenen Schreibweisen anlegen. Andere Inkonsistenzen treten bei verknüpften Daten zwischen zwei Tabellen auf, deren Beziehung nicht mit referentieller Integrität definiert ist. Hier kann es sein, dass das Fremdschlüsselfeld Werte enthält, die gar nicht im Primärschlüsselfeld der verknüpften Tabelle auftauchen. Dieser Artikel zeigt, wie Sie solche Inkonsistenzen im Datenbestand aufdecken.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 2102_InkonsistenteVer-knuepfungen.accdb.
Was sind inkonsistente Verknüpfungen
Angenommen, Sie hinterlegen in einer Tabelle einer Datenbank ein Feld, dass die Datensätze dieser Datenbank eindeutig identifiziert (in der Regel ein Primärschlüsselfeld). In einer anderen Tabelle definieren Sie ein sogenanntes Fremdschlüsselfeld, über das Sie die Datensätze der ersten mit denen der zweiten Tabelle verknüpfen wollen, indem Sie dort die Werte des eindeutigen Feldes der ersten Datenbank eintragen. Wenn Sie das machen, ohne eine Beziehung mit referentieller Integrität zwischen diesen beiden Tabellen zu erstellen, können Sie im Fremdschlüsselfeld der zweiten Tabelle nicht nur die Werte des Primärschlüsselfeldes der ersten Tabelle hinterlegen, sondern auch alle möglichen anderen Werte.
Oder Sie hinterlegen im Fremdschlüsselfeld sogar Werte, die im Primärschlüsselfeld der ersten Tabelle vorkommen, löschen dann aber Datensätze aus der ersten Tabelle, die bereits vom Fremdschlüsselfeld referenziert sind.
In diesen Fällen erhalten Sie inkonsistente Daten, in diesem Fall im Zusammenhang mit einer Verknüpfung. Das Fremdschlüsselfeld der zweiten Tabelle enthält dann nicht mehr nur Werte, die im Primärschlüsselfeld der erste Tabelle aufgeführt werden. So kann keine vollständige Zuordnung der Datensätze der beiden Tabellen mehr erfolgen.
Ein Beispiel finden Sie in Bild 1. Hier gibt es in der Tabelle tblProdukte zwei Produkte, deren Werte im Feld KategorieID nicht im Feld KategorieID der Tabelle tblKategorien enthalten sind.
Bild 1: Verknüpfung mit Inkonsistenzen
Verhindern von inkonsistenten Verknüpfungen
Wenn Sie das Datenmodell Ihrer Datenbank nach den ersten drei Normalformen auslegen (siehe Artikel Normalisierung, Teil 1: Die erste Normalform und folgende, www.access-basics.de/498) und für alle Beziehungen referentielle Integrität definieren, sollten keine inkonsistenten Verknüpfungen in Ihrer Datenbank auftauchen. Access meldet dann beim Versuch, inkonsistente Daten anzulegen, einen Fehler.
Referentielle Integrität
Um zu erklären, warum keine inkonsistenten Verknüpfungen entstehen, wenn Sie referentielle Integrität für eine Beziehung definiert haben, schauen wir uns kurz an, was referentielle Integrität ist. Referentielle Integrität stellt sicher, dass das an einer Beziehung beteiligte Fremdschlüsselfeld nur solche Werte annehmen kann, die entweder in dem Primärschlüsselfeld der Tabelle mit dem an der Beziehung beteiligten Primärschlüsselfeld enthalten sind oder den Wert NULL haben. Weitere Informationen über referentielle Integrität erhalten Sie im Artikel Referentielle Integrität (www.access-basics.de/515).
Warum gibt es inkonsistente Verknüpfungen
Stellt sich die Frage: Warum gibt es überhaupt inkonsistente Verknüpfungen, wenn man diese doch so einfach durch das Definieren von Beziehungen mit referentieller Integrität verhindern kann Die Antwort ist einfach: Nicht jede Datenbank wird von Grund auf neu aufgebaut. Als Entwickler erhalten Sie oft Datenbanken, die von anderen Entwicklern definiert wurden. Oder Sie wollen Daten aus anderen Datenquellen wie beispielsweise Excel-Tabellen einlesen, deren Daten bereits eine Art Verknüpfung zwischen zwei Tabellen aufweisen.
Excel bietet aber keinen echten Mechanismus, mit dem die referentielle Integrität durchgesetzt werden kann. Deshalb kommt es dort schnell zu Inkonsistenzen, ohne das der Benutzer es mitbekommt.
Wie finden wir inkonsistente Verknüpfungen
Damit kommen wir schon zur wichtigsten Frage: Wenn unsere Datenbank eine Beziehung enthält, für die wir noch keine referentielle Integrität definiert haben, wie finden wir heraus, ob es inkonsistente Daten gibt und um welche es sich handelt
Um herauszufinden, ob eine Verknüpfung inkonsistente Daten enthält, gibt es eine sehr einfache Methode. Wir versuchen einfach, eine Beziehung mit referentieller Integrität zwischen den beiden Tabellen zu erstellen. In diesem Fall öffnen wir das Beziehungen-Fenster (Ribbon-Eintrag Datenbanktools|Be-zie-hun-gen|Beziehungen), fügen die beiden Tabellen tblProdukte und tblKategorien hinzu und ziehen dann das Feld KategorieID der Tabelle tblProdukte auf das gleichnamige Feld der Tabelle tblKategorien. Daraufhin erscheint der Dialog Beziehungen bearbeiten, in dem wir die Option Mit referentieller Integrität aktivieren (siehe Bild 2).
Bild 2: Versuch, eine Beziehung mit referentieller Integrität zu definieren
Daraufhin erscheint die Meldung aus Bild 3. Die Fehlermeldung liefert detailliert die Informationen, die man haben muss: Die Tabellen verstoßen gegen die Regeln der referentiellen Integrität und die Daten müssen so geändert werden, dass es in der Tabelle mit dem Primärschlüsselfeld Datensätze für alle im Fremdschlüsselfeld der anderen Tabelle vorkommenden Werte gibt.
Bild 3: Meldung beim Versuch, referentielle Integrität für eine inkonsistente Beziehung zu definieren
Daten mit inkonsistenten Verknüpfungen finden
Nun müssen wir nur noch herausfinden, an welchen Daten es liegt. Dazu nutzen wir zunächst den entsprechenden Assistenten von Access. Diesen starten Sie über den Ribbon-Befehl Erstellen|Abfragen|Abfrage-Assistent. Im nun erscheinenden Dialog Neue Abfrage wählen Sie den Eintrag Abfrage-Assistent zur Inkonsistenzsuche aus (siehe Bild 4).
Bild 4: Starten des Assistenten zum Finden von inkonsistenten Verknüpfungen
Erste Tabelle auswählen
Der erste Schritt des Assistenten fragt die Tabelle ab, deren Datensätze falsche oder fehlende Verknüpfungen enthält. Das ist die Tabelle, die das an der Beziehung beteiligte Fremdschlüsselfeld enthält, in unserem Fall also tblProdukte (siehe Bild 5).
Bild 5: Erster Schritt: Auswahl der Tabelle mit dem Fremdschlüsselfeld
Zweite Tabelle auswählen
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: