Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Access 2016 Grundkurs

Referentielle Integrität einrichten

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Nur die Referentielle Integrität kann sicherstellen, dass keine ungültigen Daten aus Nachschlagetabellen aufgenommen werden. Sie ist daher eines der wichtigsten Hilfsmittel einer relationalen Datenbank wie Access.

Transkript

Die Datenbank befindet sich jetzt im Grunde genau in dem Zustand, wie sie in der Skizze angelegt ist, es gibt sechs Tabellen, wir haben auch schon die Idee von Beziehung, aber es gibt nicht wirklich Beziehung. Das muss sich jetzt ändern und zwar nicht in einer einzigen Tabelle. Bisher haben wir das so gemacht, dass beispielsweise für die Fahrer hier in diesem Referenzfeld, wenn ich das für die Lieferung nochmal ansehe im Entwurf, dass wir dort einfach ein Kombinationsfeld zum Nachschlagen angelegt haben und dessen Eigenschaft auf "Nur Listeneinträge: Ja" gestellt haben. Das ist nett, aber hilft nicht wirklich. Solange ein Benutzer davor sitzt, ist er gezwungen, diesen Eintrag oder einen dieser Einträge zu benutzen, so weit, so nett und dann fühlt man sich sicher und denkt was soll denn jetzt noch passieren. Das kann ich Ihnen sagen, das erste was passieren kann, ist, dass jemand per VBA, per Programmierung Werte einträgt. Die interessieren sich überhaupt nicht für Kombinationselder, sondern dort können Sie jeden Mist eingeben, wenn denn der Datentyp dazu passt, aber ich könnte per VBA mit zwei Zeilen Code hier eine 99 eintragen, aber es gibt keine Fahrer-ID 99. Und das zweite ist, wenn ich dort eine gültige Zahl eingetragen habe, sagen wir die Nummer 5 und später den Fahrer mit der ID 5 wieder lösche, dann gibt es auch keine Warnung, dann habe ich da genau so einen sogenannten verwaisten Datensatz, einer dessen Elternteil verschwunden ist. Und diese beiden Fehlerquellen sind im Grunde für eine Datenbank tödlich. Wenn es ihnen gelingt, dort Daten einzugeben oder nachher übrig zu lassen, die kein Gegenstück haben auf ihrer Primärschlüsselseite, dann können Sie die Datenbank vergessen, dann gelingt es ihnen nämlich Lieferungen an Adressen zu erzeugen, die sie gar nicht haben und Sie werden sich zu Recht fragen und wer bezahlts dann? Oder Speisen auszugeben, die sie nie in der Speisekarte hatten, dass kanns nicht sein. Es gibt erschreckend viele Datenbanken, die sowas haben, aber das lohnt die Mühe nicht, dann kann man sich auch weiterhin Zettel machen und hoffen dass es gutgeht. Was wir also brauchen, ist, das was sie vielleicht schon ein paar Mal unter dem Schlüsselwort referentielle Integrität gehört haben, das besteht aus zwei Teilen erstens Referenz: Es geht um die Beziehungen zwischen Fremdschlüssel und Primärschlüssel, es ist ja auch eine relationale Datenbank. In diesem Fall heißen sie jetzt Referenzen, also vom Fremdschlüssel zum Primärschlüssel und die zweite war Integrität, das hat nichts mit dem Datentyp Integer zu tun, sondern es meint dieses integer, sauber, korrekt, in Ordnung. Also die Referenzen müssen in Ordnung sein. Und das ist nicht in einer einzigen Tabelle, sondern in der gesamten Datenbank, deswegen steht es hier unter Datenbanktools, Beziehungen. Wenn sie dort drauf klicken, landen sie in einem Bildschirm, der aussieht wie die obere Hälfte von einem Abfrageentwurf und je nachdem, ob sie es schon mal gemacht haben, wird hier automatisch das Dialogfeld Tabelle Anzeigen angeboten, wenn nicht, können Sie hier einfach drauf klicken, dann sehen sie nochmal, wir brauchen sowieso alle Tabellen, also werde ich jetzt, die erste ist schon markiert, die letzte mit Umschalt-Klick markieren und dann mit Hinzufügen, Schließen alle aufnehmen. Wir sind jetzt an der Stelle, wo ich später kontrollieren kann, ob ich meinem Entwurf, das war ja eine ursprüngliche Excel-Datei, in der Access-Datenbank nahe gekommen bin. Und werde jetzt also diese Tabellen genau so anordnen. Das ist vor allem möglichst kreuzungsfrei, also hier muss man immer ein bisschen probieren, diese Ecke ist schwer zu treffen, weil die neuerdings sehr klein ist. Das ist also vor allem kreuzungsfrei und wenn sie Glück haben übersichtlich und die Einserseite einer Beziehung steht bei mir immer höher, also wenn eine Adresse viele Lieferungen haben kann, dann steht jetzt deswegen die Lieferung bei mir tiefer, weil das die N-Seite ist. Die Fahrer sind, wieder auf der Einserseite, das ist also sozusagen die Nachschlagetabelle, die steht dann höher, aber auch die Lieferungen selber sind zum Beispiel einen Nachschlagetabelle für die Portionen, deswegen ist das Wort Nachschlagetabelle immer sehr relativ. Es gibt Tabellen, die sind ausschließlich Nachschlagetabellen, wie diese und andere die sind mal als Stammdaten, gemessen an diesen beiden Nachschlagetabellen und die sind aber auch Nachschlagetabelle für diese Stammdaten. So, mit 6 Tabellen kann man es noch einigermaßen kreuzungsfrei hinkriegen meistens, hier ist eine besondere Tabelle, das sehen sie hier, dieses Anlagefeld ist immer so ein bisschen ausklappbar, das brauchen wir aber im Moment nicht. Damit sind die Tabellen angeordnet, mehr ist noch nicht passiert und was ich jetzt hier speichere, das ist auch nur das Layout. Die eigentliche Arbeit beginnt jetzt. Jetzt lege ich die Verbindungen an und zwar indem ich den Primärschlüssel gedrückt halte und auf den Fremdschlüssel ziehe und wenn ich jetzt loslasse, springt direkt der Dialog auf und ich kann hier mit referentieller Integrität anschalten. Wenn ich das nicht mache, sondern einfach auf Erstellen gehe, dann ist das nett und unverbindlich, da haben sie eine Verbindungslinie, davon haben sie im Grunde nichts, in einer Abfrage würden diese beiden Tabellen automatisch verbunden, aber mehr ist es auch nicht, das kann man sich ehrlich gesagt schenken. Wenn ich so eine Verbindungslinie löschen will, dann klicke ich auf den Mittelteil und kann jetzt ganz banal die Entfernen-Taste drücken, ja das möchte ich, ich könnte sie auch nachträglich ändern. Und wenn ich sie nachträglich ändern will, hätte ich ein Doppelklick auf die Verbindungslinie gemacht, aber ich kann sie auch nochmal neu anlegen, also vom Primärschlüssel zum Fremdschlüssel und mit referentieller Integrität, dann sehen sie gleich nach dem Erstellen, dass hier jetzt auch ein eins zu n, tatsächlich steht da eins zu unendlich, erscheint. Eins zu n und eins zu unendliche wird aus Datenbanksicht als identisch behandelt, aus mathematischer Sicht ist es dass eher nicht. Wenn sie nachträglich was ändern wollen, machen sie hier auf den Mittelteil, die Endstückchen funktionieren nicht, einen Doppelklick und sind wieder im gleichen Dialog. Hier gibt es noch zwei weitere Häkchen, ich könnte zum Beispiel eine Löschweitergabe einschalten. Normalerweise wäre, wenn ich hier eine Adresse löschen will und an die ist geliefert worden, wäre eine Fehlermeldung erschienen, weil Access sagt, das kann nicht sein, ich kann in der referentiellen Integrität nicht den Primärschlüssel löschen, wenn es dazu noch Fremdschlüssel gleicher Nummer gibt. Die Löschweitergabe sorgt dafür, dass erst die passenden Fremdschlüsseldatensätze gelöscht werden und dann der Primärschlüsseldatensatz. Dazu gibt es dann eine recht harmlose Meldung an den Benutzer die da sagt, wenn sie die Adresse löschen wollen: Diese Löschung hat zur Folge, dass diese und weitere Datensätze gelöscht werden. Das liest sich ganz harmlos und wer liest schon Dialogfelder und jeder Benutzer geht dann hin, und sagt ja ja, wird schon richtig sein und okay. Das hat zur Folge, dass, bevor diese Adresse gelöscht werden kann, die zugehörigen Lieferungen gelöscht werden müssen. Aber weil die Beziehungen zu den Portionen haben werden, müssen auch die Portionen zu diesen Lieferungen gelöscht werden und wenn sie Pech haben noch viele, viele weitere Tabellen, die da eins zu n dranhängen. Und das bedeutet, eine Löschung hier zieht eine ganze Kaskade von Folgelöschungen nach sich, wenn man Pech hat hat man mit einem Datensatz hier mal eben 90 Prozent aller Daten gelöscht und der normale Benutzer weiss das ja nicht und ahnt das nicht, deswegen würde ich eine Löschweitergabe eher nicht einschalten. Zu Entwicklerzeiten ist das sehr praktisch, wenn sie nämlich fertig sind mit dem Entwurf, den ganzen Tests, dann können Sie so sehr schnell die gesamte Datenbank löschen, aber danach unbedingt wieder rausnehmen. Die zweite Möglichkeit hier ist eine Aktualisierungsweitergabe. Die funktioniert derzeit nur bei diesem Feld. Wenn ich eine Telefonnummer ändern will und es gibt schon Lieferungen, würde das nicht funktionieren, weil die Schlüssel dann nicht mehr zusammen gehören. Die Aktualisierungsweitergabe erledigt das. Wenn ich hier ändere, werden die Fremdschlüssel automatisch mitgeändert. Bei den anderen Beziehungen lohnt es sich deswegen nicht, weil das AutoWerte sind. AutoWerte können Sie nachträglich sowieso nicht ändern. Ich werde also nur referentielle Integrität anlegen, nach dem OK für genau diese Verbindung. Damit haben wir sozusagen an einer ersten Stelle diese Datenbank sicher gemacht. Zwischen Adressen und Lieferungen gibt es exakt nur gültige Daten.

Access 2016 Grundkurs

Erwerben Sie die notwendigen Kenntnisse, um mit Access 2016 leistungsfähige Datenbanken zu erstellen.

6 Std. 18 min (75 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!