Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2005.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erfahren Sie, wie Sie mit Schlüsseln, Indizes, Beziehungen und Validierungen für konsistente Daten sorgen.

Techniken

Tabellen, Indizes, Schlüssel, Beziehungen, Gültigkeitsregeln, Validierung in Formularen

Voraussetzungen

Access 97 oder höher

Beispieldateien

Konsistenz97.mdb, Konsistenz00.mdb

Konsistente Daten mit Access

Tom Jordan, Düsseldorf

Ein Mitarbeiter hat soeben die Aufgabe erhalten, alle Kunden seiner kleinen Firma zusammen mit ihren Projekten zu erfassen. "Kein Problem", sagt er, "ist noch vor der Mittagspause erledigt!" Der Mitarbeiter wechselt mal eben schnell zu Excel, das auf seinem Desktop ohnehin schon geöffnet ist, und fängt an, die Daten abzutippen ... Wenn es Ihnen jetzt kalt den Rücken herunter läuft, wissen Sie, warum Excel hier fehl am Platze und der Einsatz von Access gefordert ist: Hier geht es um Daten, deren Konsistenz im Vordergrund steht, und dafür bietet Access einige Werkzeuge. Welche das sind, erfahren Sie im vorliegenden Beitrag.

Für viele wäre die Vorgehensweise des Mitarbeiters aus der Einleitung zumindest der erste Ansatz. Microsoft Excel hat sich in vielen Bereichen so fest etabliert, dass für zahllose Angestellte die Arbeit ohne diese Tabellenkalkulation schlicht undenkbar ist. Also warum nicht die Daten mit Excel erfassen?

Die kurze Antwort: Für die Haltung konsistenter Daten ist Excel schlecht ausgerüstet. Excel ist einfach nicht dafür gebaut, Daten vernünftig zu strukturieren und zu validieren. Für diese Aufgaben wurde Microsoft Access entwickelt.

Microsoft Access bietet viele Möglichkeiten, eine Datenbank vor der Eingabe inkonsistenter Daten zu schützen. Wie mit jedem Datenbanksystem kann man mit Access auch ein vorgefertigtes Datenmodell realisieren.

In einem solchen Datenmodell werden die Beziehungen zwischen Objekten wie Abteilungen und ihren Mitarbeitern oder Kunden und ihren Bestellungen abgebildet.

Diese Beziehungen, zusammen mit Gültigkeitsregeln auf Tabellenebene, sorgen für die so genannte Datenintegrität. Nur mit solchen Mitteln können Sie zuverlässige und brauchbare Auswertungen Ihrer Daten erzielen wie zum Beispiel:

  • Wie viele Mitarbeiter hat eine Abteilung im Schnitt?
  • Wie viele Bestellungen gehen an Kunden in Düsseldorf?
  • Access enthält viele Stellen, an denen die verschiedenen Werkzeuge der Datenintegrität automatisch angewendet beziehungsweise erzwungen werden. Dennoch müssen Sie früher oder später selbst Hand anlegen und am letzten Schräubchen drehen.

    Abb. 1: Eigenschaften eines Primärindexfeldes

    Konsistente Daten mit Access erreichen Sie in erster Linie durch den Einsatz von Primär- und Fremdschlüsseln, Tabellenbeziehungen, Gültigkeitsregeln und Validierungen. In den folgenden Abschnitten werden diese der Reihe nach vorgestellt und erläutert.

    Der Schlüssel zum Erfolg:
    Primär- und Fremdschlüssel

    Jedes Fahrzeug auf der Straße hat ein Kennzeichen, das dieses Fahrzeug eindeutig identifiziert. Auch wenn zahllose gleich aussehende Autos umherfahren, kann das Straßenverkehrsamt dieses Fahrzeug anhand des Kennzeichens zuordnen. Genauso ist es mit Datensätzen in einer Access-Tabelle.

    Kunden können den gleichen Namen haben, dennoch handelt es sich um unterschiedliche Kunden mit eigenen Kontaktdaten, Bestellungen und Bedürfnissen. Deshalb braucht jeder Datensatz eine Art Kennzeichen. In der Datenbankwelt handelt es sich dabei um den so genannten Schlüssel.

    Wenn Sie eine neue Tabelle anlegen, fragt Access vor dem ersten Speichern nach, ob - sofern noch nicht vorhanden - ein Primärschlüssel angelegt werden soll. Dieser Primärschlüssel identifiziert nicht nur jeden Datensatz in der Tabelle eindeutig, sondern er erlaubt auch die Herstellung von Beziehungen zu anderen Tabellen.

    Wenn Access diese Aufgabe selbst in die Hand nimmt, wird ein neues indiziertes Feld namens ID angelegt. Der Datentyp des ID-Feldes ist AutoWert - das bedeutet, dass Access das Hochzählen des Feldwertes bei neuen Datensätzen übernimmt. So ist gewährleistet, dass dieses Feld einen eindeutigen Wert über die ganze Tabelle erhält.

    Primärschlüssel selbst anlegen

    Normalerweise werden Sie den Primärschlüssel selbst anlegen wollen und nicht Access diese Aufgabe überlassen. In dem Fall markieren Sie einfach das Feld, das zum Primärschlüssel gemacht werden soll, klicken auf die Primärschlüssel-Schaltfläche in der Symbolleiste oder auf den gleichnamigen Eintrag im Kontextmenü des gewünschten Feldes.

    Access markiert das Feld dann mit dem Schlüssel-Symbol automatisch als Primärschlüssel und nimmt einige weitere Einstellungen am Tabellenentwurf vor. Diese sind verborgen und treten erst nach Auswahl des Menüeintrags Ansicht/Indizes in Erscheinung (s. Abb. 1).

    Dort ist zum Beispiel zu erkennen, dass die Eigenschaft Eindeutig für das Primärschlüsselfeld auf Ja und die Eigenschaft Nullwerte ignorieren auf Nein eingestellt ist. Letzteres ist besonders wichtig, um zu verhindern, dass einmal kein Wert für das Primärschlüsselfeld angelegt wird. Die Werte der beiden Eigenschaften Eindeutig und Nullwerte ignorieren können Sie aber für Primärschlüsselfelder auch nicht verändern (s. Abb. 2).

    Der Datentyp eines Primärschlüsselfeldes muss nicht zwangsläufig auf AutoWert eingestellt werden - Sie können auch einen anderen beliebigen Datentyp (außer OLE-Objekt) wählen. In diesem Fall müssen Sie allerdings selbst für die Verwendung eindeutiger Feldwerte sorgen.

    Abb. 2: Eigenschaften eines Primärschlüsselfeldes

    Der Primärschlüssel kann durchaus auch aus mehreren Feldern bestehen, zum Beispiel aus den Feldern Nachname und Vorname. Das macht allerdings wenig Sinn, da ja durchaus einmal zwei Kunden den gleichen Namen haben können. Außerdem erschwert ein derartiger Schlüssel in einigen Fällen die Definition von Beziehungen zu anderen Tabellen. Ein Beispiel für den sinnvollen Einsatz eines zusammengesetzten Primärschlüssels finden Sie weiter unten.

    Nach dem Festlegen des Primärschlüssels ist die Integrität der ersten Tabelle gesichert, nun kümmern Sie sich um die Mitarbeiter-Tabelle. Diese Tabelle enthält einen Primärschlüssel namens MitarbeiterID sowie Felder zum Speichern von Vorname und Nachname.

    Die Abteilung des Mitarbeiters wird nicht einfach als Text eingetragen, da somit mehrere gleiche Einträge entstehen können (wie es bei Excel meistens der Fall ist), sondern es wird immer nur eine vorhandene Abteilung "nachgeschlagen" und ihr Primärschlüsselwert (das Feld AbteilungID) in der Mitarbeiter-Tabelle abgelegt. Felder, die wie das hier verwendete Feld AbteilungID zwar Werte in der Mitarbeiter-Tabelle speichern, aber sich eigentlich auf Daten aus anderen Tabellen beziehen, nennt man Fremdschlüsselfeld. Durch den Fremdschlüssel werden folgende Punkte gewährleistet:

  • Die Abteilung existiert tatsächlich und Sie können auf ihre Daten zugreifen.
  • Ein Löschen der Abteilung, der bereits Mitarbeiter zugeordnet wurden, wird unterbunden.
  • Die Abteilungsdaten werden an einer zentralen Stelle gepflegt.
  • Das Feld AbteilungID in der Mitarbeiter-Tabelle legt den Grundstein für die Beziehung zwischen Abteilungen und Mitarbeitern. Nun müssen Sie noch die eigentliche Beziehung zwischen den beiden Tabellen herstellen.

    Index für schnelle Verknüpfungen

    Wenn absehbar ist, dass Daten zweier verknüpfter Tabellen in einer Abfrage zusammengefasst werden sollen, kann das Indizieren des Fremdschlüsselfeldes für eine bessere Performance sorgen.

    Access speichert die Daten aus indizierten Feldern in internen Tabellen und kann so schneller auf die Werte in indizierten Feldern zugreifen.

    Am schnellsten können Sie ein Feld indizieren, wenn Sie in den Feldeigenschaften die Eigenschaft Indiziert anpassen. Es gibt die Möglichkeiten Nein, Ja (Duplikate möglich) und Ja (Ohne Duplikate). Für Fremdschlüsselfelder sollten Sie immer einen Index wählen, der Duplikate zulässt.

    Anderenfalls könnten Sie - um beim obigen Beispiel zu bleiben - nicht zwei Mitarbeitern die gleiche Abteilung zuweisen, was aber auf jeden Fall erforderlich ist (s. Abb. 3).

    Beziehungen: Verknüpfen
    verwandter Tabellenfelder

    Durch das Anlegen von Beziehungen zwischen dem Fremdschlüsselfeld und dem Primärschlüsselfeld können Sie Tabellen mit verwandten Feldern verknüpfen und damit tabellenübergreifende Datenintegrität sichern.

    Abb. 3: Die Mitarbeiter-Tabelle mit dem indizierten Fremdschlüssel auf die Abteilungs-Tabelle.

    Zum Bearbeiten von Beziehungen dient das Beziehungen-Fenster, das Sie über den Menüpunkt Extras/Beziehungen beziehungsweise mit der entsprechenden Symbol-Schaltfläche öffnen.

    Abb. 4: Referentielle Integrität für eine neue Beziehung festlegen

    Schließen Sie vorher eventuell in der Entwurfsansicht geöffnete Tabellen, da die Beziehungen sonst nicht bearbeitet werden können.

    Bei einer neuen Datenbank ist das Beziehungsfenster zunächst leer. Mit dem Menübefehl Beziehungen/Tabellen zeigen Sie den Dialog Beziehungen an, über den Sie die gewünschten Tabellen hinzufügen können. Um eine neue Beziehung zu erstellen, ziehen Sie mit der Maus ein Feld aus der Mastertabelle (die Tabelle mit dem Primärschlüsselfeld der Beziehung) auf das entsprechende Feld der Detailtabelle (die Tabelle mit dem Fremdschlüsselfeld der Beziehung).

    So können Sie beispielsweise eine Beziehung zwischen Abteilungen und Mitarbeitern über das Feld AbteilungID definieren. Daraufhin erscheint ein Dialog mit den Eigenschaften der Beziehung.

    Hier sollten Sie auf jeden Fall referentielle Integrität festlegen, um sicherzustellen, dass dem Mitarbeiter nur vorhandene Abteilungen zugeordnet werden können (s. Abb. 4). Eine weitere Option ist die Löschweitergabe. In diesem Beispiel würden Sie durch Aktivieren der Löschweitergabe dafür sorgen, dass beim Löschen einer Abteilung sämtliche Mitarbeiter gleich mit gelöscht werden - das ist an dieser Stelle nicht besonders sinnvoll.

    Lassen Sie die Löschweitergabe weg, so kann eine Abteilung nicht gelöscht werden, solange sie noch Mitarbeiter enthält.

    Zusammengefasst sorgt das Festlegen referentieller Integrität folgendermaßen für Datenintegrität:

  • In der Mitarbeiter-Tabelle kommen nur Abteilungen vor, die in der Abteilungs-Tabelle tatsächlich existieren.
  • Es können keine "Datenleichen" hinterlassen werden, indem beispielsweise eine Abteilung gelöscht wird, die noch mit Mitarbeitern verknüpft ist.
  • Im Eigenschaftsfenster der Beziehung befindet sich die Schaltfläche Verknüpfungstyp...

    Mit dieser Schaltfläche öffnen Sie einen Dialog zum Festlegen des Beziehungstyps (s. Abb. 5).

    Abb. 5: Eigenschaften einer Verknüpfung

    Abb. 6: Beispiel für eine Abfrage mit einer OUTER JOIN-Verknüpfung

    Abb. 7: Eine Mitarbeiter-Abfrage mit INNER JOIN: Ein Mitarbeiter aus der vorherigen Abbildung ist keiner Abteilung zugeordnet, deshalb wird er in diesem Fall nicht angezeigt.

    Abb. 8: Verknüpfungstabelle zur Realisierung einer m:n-Beziehung

    Abb. 9: Die meisten Verknüpfungstabellen enthalten zusammengesetzte Primärschlüssel

    Standardmäßig ist die erste Option ausgewählt, die auch INNER JOIN genannt wird. Die anderen beiden Optionen bewirken das Festlegen eines so genannten OUTER JOIN. Eine solche Verknüpfung würden Sie beispielsweise verwenden, wenn Sie eine Abfrage über Mitarbeiter und Abteilungen durchführen würden, wobei nicht alle Mitarbeiter auch einer Abteilung zugeordnet sind. Es werden dann alle Datensätze der Mitarbeiter-Tabelle angezeigt, auch wenn diese keiner Abteilung zugeordnet sind. Das Ergebnis einer solchen Abfrage könnte etwa wie in Abb. 6 aussehen.

    Die Mitarbeiter mit einem Null-Wert als Abteilung werden in diesem Fall ausgegeben. Das INNER JOIN ist da wesentlich resoluter: Das Abfrageergebnis enthält nur Kombinationen aus Mitarbeitern und Abteilungen, die miteinander verknüpft sind. Mitarbeiter ohne Abteilung werden hier nicht berücksichtigt.

    Welchen Join-Typ Sie wählen, hängt von Ihren Daten sowie der gewünschten Flexibilität ab. Gibt es tatsächlich keine Mitarbeiter ohne Abteilung, so bietet sich ein INNER JOIN an (s. Abb. 7). Wenn Sie die Zuordnung einer Abteilung offen lassen möchten, können Sie ein OUTER JOIN wählen. Diese Flexibilität hat aber ihren Preis, nämlich dass Tabellenabfragen später etwas komplexer werden können. Ergebnisse können beispielsweise bei mehreren Beziehungen ausmultipliziert werden.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.