Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

8.5.1 Tabellen erstellen

8.5.2 Primärschlüssel, Indizes und Einschränkungen mit CONSTRAINT

Ohne einen Primärschlüssel läuft nichts in einem relationalen Datenbanksystem und auch die Verknüpfungen muss man irgendwo festlegen. Dazu dient die CONSTRAINT-Klausel. Sie lässt sich an zwei Stellen einsetzen: für ein einzelnes Feld und als Mehrfeldeinschränkung für mehrere Felder. Die Syntax ist in beiden Fällen unterschiedlich. Die Einzelfeldvariante sieht folgendermaßen aus:

CONSTRAINT Name {PRIMARY KEY | UNIQUE | NOT NULL | REFERENCES FremdTabelle [(FremdFeld1, FremdFeld2)] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]

Die Mehrfeldeinschränkung mit dem CONSTRAINT-Schlüsselwort hat diese Syntax:

CONSTRAINT Name {PRIMARY KEY (Primär1[,Primär2[, ...]]) | UNIQUE (Eindeutig1[,Eindeutig2[, ...]]) | NOT NULL (Nichtnull1[, Nichtnull2 [, ...]]) | FOREIGN KEY [NO INDEX] (Ref1[, Ref2 [, ...]]) REFERENCES FremdTabelle [(FremdFeld1 [, FremdFeld2 [, ...]])]} [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]

In den folgenden Abschnitten lernen Sie die Möglichkeiten dieses Elements genauer kennen.

Primärschlüssel anlegen

Um eine Tabelle mit einem Primärschlüssel zu erstellen, können Sie beispielsweise folgende Anweisung verwenden:

CREATE TABLE tblMitarbeiter(MitarbeiterID INTEGER CONSTRAINT
KMitarbeiterID PRIMARY KEY,
Vorname TEXT(50),
Nachname TEXT(50))

Abbildung 8.24 zeigt das Ergebnis dieser Abfrage in der Entwurfsansicht.

Abbildung 8.24: Ergebnis einer Tabellenerstellungsabfrage

Eindeutigen Index anlegen

Zum Anlegen einer Tabelle mit einem eindeutigen Index verwenden Sie das UNIQUE-Schlüsselwort. Der erweiterte SQL-Ausdruck aus dem vorherigen Beispiel fügt der Tabelle nun ein zusätzliches Feld für eine Mitarbeiternummer hinzu:

CREATE TABLE tblMitarbeiter(
MitarbeiterID INTEGER CONSTRAINT PKMitarbeiterID PRIMARY KEY,
Mitarbeiternummer TEXT(10) CONSTRAINT UKMitarbeiternummer UNIQUE,
Vorname TEXT(50), Nachname TEXT (50))

Wenn Sie eine CREATE TABLE-Anweisung verwenden und die zu erstellende Tabelle schon existiert, zeigt Access eine entsprechende Meldung an. Sie müssen die bestehende Tabelle also zuerst löschen oder umbenennen.

Die Verwendung von UNIQUE entspricht dem Einstellen der Eigenschaft Indiziert des angegebenen Feldes auf den Wert Ja (Ohne Duplikate).

Feld darf nicht Null sein

Um zu verhindern, dass eines der beiden Felder Vorname und Nachname der Mitarbeitertabelle nicht gefüllt wird, können Sie die Tabelle so einstellen, dass die Eingabe erforderlich ist:

CREATE TABLE tblMitarbeiter(
MitarbeiterID INTEGER CONSTRAINT PKMitarbeiterID
PRIMARY KEY,Mitarbeiternummer TEXT(10)
CONSTRAINT UKMitarbeiternummer UNIQUE,
Vorname TEXT(50) NOT NULL, Nachname TEXT (50) NOT NULL)

Die Verwendung von NOT NULL entspricht dem Einstellen der Eigenschaft Eingabe erforderlich auf den Wert Ja. Das gleiche Schlüsselwort kann auch in Mehrfeldeinschränkungen verwendet werden. Beachten Sie, dass jedes Feld nur einmal mit der Einschränkung NOT NULL ausgestattet werden darf.

Fremdschlüsselfelder festlegen

Ein ganz wichtiges Element in relationalen Datenbanksystemen sind Fremdschlüsselfelder. Dementsprechend bietet Access-SQL die Möglichkeit, eine Tabelle mit einem solchen Fremdschlüsselfeld anzulegen. Die Mitarbeitertabelle aus den vorherigen Beispielen soll auch Informationen über die Abteilung von Mitarbeitern enthalten, die in einer weiteren Tabelle namens tblAbteilungen enthalten sind. Zur Übung können Sie diese Tabelle kurz mit folgender Anweisung erstellen:

CREATE TABLE tblAbteilungen(
AbteilungID INTEGER CONSTRAINT PKAbteilungID PRIMARY KEY,
Abteilung TEXT(50) CONSTRAINT UKAbteilung UNIQUE)

Nun passen Sie den SQL-Ausdruck zum Erstellen der Mitarbeitertabelle so an, dass sie direkt ein Fremdschlüsselfeld für die Verknüpfung mit der Tabelle tblAbteilungen anlegt:

CREATE TABLE tblMitarbeiter_(
MitarbeiterID INTEGER CONSTRAINT PKMitarbeiterID PRIMARY KEY,
Mitarbeiternummer TEXT(10) CONSTRAINT UniqueMitarbeiternummer UNIQUE,
Vorname TEXT(50) NOT NULL, Nachname TEXT (50) NOT NULL,
AbteilungID INTEGER, CONSTRAINT FKAbteilungID
FOREIGN KEY (AbteilungID) REFERENCES tblAbteilungen)

In der Entwurfsansicht macht sich die besondere Eigenschaft des Feldes AbteilungID als Fremdschlüssel nicht direkt bemerkbar. Dafür wird die so erstellte Beziehung zwischen den beiden Tabellen tblMitarbeiter- und tblAbteilungen aber im Beziehungsfenster sichtbar (siehe Abbildung 8.25).

Abbildung 8.25: Eine per SQL-Anweisung erstellte Beziehung zwischen zwei Tabellen

Lösch- und Aktualisierungsweitergabe

Im Eigenschaftenfenster einer Beziehung können Sie angeben, ob die Beziehung mit referentieller Integrität festgelegt und dabei Aktualisierungsweitergabe und Löschweitergabe realisiert werden sollen (siehe Abbildung 8.26).

Abbildung 8.26: Optionen für Beziehungen mit referentieller Integrität

Das Einstellen dieser Eigenschaften funktioniert erst mit SQL-92. Wenn Sie nicht mit dem Datenbankformat Access 2002 oder höher arbeiten und die Datenbank auf SQL Server-kompatible Syntax eingestellt haben, können Sie diese nur per VBA/ADO verwenden.

Die folgende Beispielprozedur, die eine Tabelle mit Aktualisierungsweitergabe und Löschweitergabe anlegt, verwendet ADO für die Ausführung der SQL-Anweisung:

Public Function CREATETABLEMitANSI92()

    Dim cnn As ADODB.Connection
    Dim strSQL As String

    strSQL = "CREATE TABLE tblMitarbeiter(" _
        & "MitarbeiterID INTEGER CONSTRAINT PKMitarbeiterID PRIMARY KEY, "
        & "Mitarbeiternummer TEXT(10) " _
        & "CONSTRAINT UniqueMitarbeiternummer UNIQUE, " _
        & "Vorname TEXT(50) NOT NULL, " _
        & "Nachname TEXT (50) NOT NULL, " _
        & "AbteilungID INTEGER, " _
        & "CONSTRAINT FKAbteilungID FOREIGN KEY (AbteilungID) " _
        & "REFERENCES tblAbteilungen ON UPDATE CASCADE ON DELETE CASCADE)"

    Set cnn = CurrentProject.Connection

    cnn.Execute strSQL

    Set cnn = Nothing

End Function

Listing 8.2: Verwenden von SQL-92 per VBA und ADO

Einfache Indizes anlegen

Ein Blick in den Entwurf der Tabelle tblMitarbeiter und dort auf den Dialog Indizes offenbart, dass dieses Feld noch nicht indiziert ist, obwohl es als Fremdschlüsselfeld dient. Aus Gründen der Performance sollte dies allerdings noch nachgeholt werden - indizierte Felder auf beiden Seiten einer Beziehung machen sich hier sehr gut.

Einen solchen Index erstellen Sie nicht direkt mit der Tabelle, sondern mit einer separaten Anweisung:

CREATE INDEX IndexAbteilung ON tblMitarbeiter(Vorname)

Abbildung 8.27 zeigt den Dialog Indizes mit dem neu hinzugefügten Index IAbteilungID. Diesen Dialog aktivieren Sie, indem Sie die betroffene Tabelle in der Entwurfsansicht öffnen und dann im Entwurf-Tab des Ribbons auf die Schaltfläche Indizes klicken.

Abbildung 8.27: Auflistung der Indizes der Tabelle tblMitarbeiter

Einsatz zusammengesetzter CONSTRAINTS

Die oben genannten CONSTRAINTS können Sie auch für mehrere Felder gleichzeitig verwenden. Das bedeutet etwa beim Beispiel des eindeutigen Index, dass die Kombination von zwei oder mehr Feldern nicht in mehr als einem Datensatz gleich sein darf. Es können also durchaus die Inhalte eines oder mehrerer Felder zweier Datensätze übereinstimmen, aber eben nicht alle.

Zusammengesetzter Primärschlüssel

Einen zusammengesetzten Primärschlüssel benötigen Sie beispielsweise in Fällen, in denen Sie eine Verknüpfungstabelle für die Herstellung einer m:n-Beziehung erstellen. Meist sollen die Kombinationen der Datensätze aus den beiden betroffenen Tabellen eindeutig sein - zum Beispiel soll einem Fahrzeug jedes Ausstattungsmerkmal nur einmal zugewiesen werden. Die folgende SQL-Anweisung illustriert die Vorgehensweise. Das Ergebnis sieht wie in Abbildung 8.28 aus:

CREATE TABLE tblFahrzeugeAusstattungsmerkmale(
FahrzeugID INTEGER,
AusstattungsmerkmalID INTEGER,
CONSTRAINT PKFahrzeugIDAusstattungsmerkmalID
PRIMARY KEY(FahrzeugID, AusstattungsmerkmalID))

Zusammengesetzter eindeutiger Schlüssel

Die SQL-Anweisung zum Erstellen eines zusammengesetzten eindeutigen Schlüssels erfolgt genau wie beim zusammengesetzten Primärschlüssel - Sie müssen nur PRIMARY KEY durch UNIQUE KEY ersetzen.

Abbildung 8.28: Tabelle mit zusammengesetztem Primärschlüssel

Nächster Abschnitt:

8.5.3 Tabelle ändern

© 2006-2008 André Minhorst Alle Rechte vorbehalten.