In Microsoft Office Access 2007 können Tabellen, Einschränkungen (Einschränkung: Eine Beschränkung, die für den Wert gilt, der in eine Spalte oder eine Zeile eingegeben werden kann. Die Werte in der Spalte "Alter" dürfen z. B. nicht kleiner als 0 oder größer als 110 sein.) und Indizes (Index: Ein Feature, das das Suchen und Sortieren in einer Tabelle basierend auf bestimmten Schlüsselwerten beschleunigt und die Eindeutigkeit für die Zeilen in einer Tabelle erzwingen kann. Der Primärschlüssel einer Tabelle wird automatisch indiziert. Einige Felder können aufgrund ihres Datentyps nicht indiziert werden.) in der Entwurfsansicht einfach erstellt und geändert werden, und im Fenster "Beziehungen" (Dialogfeld "Beziehungen": Ein Fenster, in dem Sie Beziehungen zwischen Tabellen und Abfragen anzeigen, erstellen und ändern können.) können auf einfache Weise Beziehungen (Beziehung: Eine Zuordnung zwischen allgemeinen Feldern (Spalten), die in zwei Tabellen vorkommen. Eine Beziehung kann vom Typ 1:1, 1:n oder n:n sein.) erstellt werden. Alternativ können die gleichen Entitäten auch erstellt und geändert werden, indem Sie in der SQL-Ansicht Datendefinitionsabfragen erstellen.
In diesem Artikel wird beschrieben, was Datendefinitionsabfragen sind, und es wird zeigt, wie mit solchen Abfragen Tabellen, Indizes, Einschränkungen und Beziehungen erstellt werden. Dieser Artikel kann Ihnen bei der Entscheidung helfen, wann eine Datendefinitionsabfrage verwendet werden sollte.
Was möchten Sie tun?
Wann eine Datendefinitionsabfrage verwendet werden sollte
Im Gegensatz zu anderen Abfragen werden mit einer Datendefinitionsabfrage keine Daten abgerufen. Bei den meisten Abfragen wird die DML (Data Manipulation Language, Datenbearbeitungssprache) verwendet, die SQL-Befehle (Structured Query Language) umfasst, mit denen festgelegt wird, wie Daten aus vorhandenen Datenbankobjekten kombiniert und bearbeitet werden, damit Sie die gewünschten Datenergebnisse erhalten. In Datendefinitionsabfragen wird hingegen die DDL (Data Definition Language, Datendefinitionssprache) verwendet, die SQL-Befehle umfasst, mit denen die Definition von Datenbankobjekten festgelegt wird, in denen Indexdaten gespeichert sind, und SQL-Befehle, mit denen der Benutzerzugriff auf Datenbankobjekte gesteuert wird. In Office Access 2007 kann mit einer Datendefinitionsabfrage die Definition eines Datenbankobjekts festgelegt oder geändert werden.
Im Allgemeinen sollten Sie zum Erstellen von Tabellen, Einschränkungen, Indizes und Beziehungen die von Office Access 2007 gebotenen grafischen Entwurfsoberflächen nutzen (z. B. die Entwurfsansicht und das Fenster "Beziehungen"). Wenn Sie jedoch mit Tabellen arbeiten, die Sie regelmäßig löschen und neu erstellen, kann die Verwendung dieser Oberflächen recht zeitaufwändig sein. Bei Verwendung einer Datendefinitionsabfrage können Sie die Abfrage einmal schreiben und sie dann im Bedarfsfall immer wieder ausführen. Sie sollten jedoch nur dann mit Datendefinitionsabfragen arbeiten, wenn Sie mit SQL-Anweisungen vertraut sind und bestimmte Tabellen, Einschränkungen oder Indizes regelmäßig löschen und neu erstellen möchten.
Wichtig Die Verwendung von Datendefinitionsabfragen zum Ändern von Datenbankobjekten kann gefährlich sein, da für die Aktionen keine Bestätigungsdialogfelder angezeigt werden. Wenn Sie einen Fehler machen, laufen Sie Gefahr, Daten zu verlieren oder den Entwurf einer Tabelle unabsichtlich zu ändern. Gehen Sie bei der Verwendung von Datendefinitionsabfragen zum Ändern von Objekten in der Datenbank mit äußerster Vorsicht vor. Wenn Sie für die Pflege der von Ihnen verwendeten Datenbank nicht zuständig sind, sollten Sie vor der Ausführung einer Datenbankdefinitionsabfrage den Datenbankadministrator zu Rate ziehen. Darüber hinaus wird dringend empfohlen, eine Sicherheitskopie aller Tabellen anzulegen, für die Sie eine solche Abfrage ausführen möchten.
Seitenanfang
Erstellen oder Ändern von Tabellen
Zum Erstellen einer Tabelle verwenden Sie den CREATE TABLE-Befehl. Der CREATE TABLE-Befehl hat die folgende Syntax:
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1]
[, field2 type [(size)] [NOT NULL] [index2]
[, ...][, CONSTRAINT constraint1 [, ...]])
Die einzigen obligatorischen Elemente eines CREATE TABLE-Befehls sind der CREATE TABLE-Befehl selbst, der Name der Tabelle, mindestens ein Feld sowie der Datentyp eines jeden Felds. Lassen Sie uns hierzu ein einfaches Beispiel erörtern.
Einmal angenommen, Sie möchten eine Tabelle erstellen, in der der Name, das Baujahr und der Preis von Gebrauchtwagen gespeichert werden soll, deren Kauf Sie in Betracht ziehen. Für das Namensfeld möchten Sie bis zu 30 Zeichen vorsehen, und das Feld für das Jahr soll 4 Zeichen umfassen. Wenn Sie diese Tabelle mit einer Datendefinitionsabfrage erstellen möchten, gehen Sie wie folgt vor:
Hinweis Damit eine Datendefinitionsabfrage ausgeführt werden kann, müssen Sie zunächst den Inhalt der Datenbank aktivieren.
- Klicken Sie auf der Statusleiste auf Optionen und dann auf Diesen Inhalt aktivieren.
- Klicken Sie auf der Registerkarte Erstellen in der Gruppe Andere auf Abfrageentwurf.
- Schließen Sie das Dialogfeld Tabelle anzeigen.
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Der Entwurfsbereich wird ausgeblendet, und die Objektregisterkarte "SQL-Ansicht" wird angezeigt.
- Geben Sie die folgende SQL-Anweisung ein:
CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Ändern einer Tabelle
Zum Ändern einer Tabelle verwenden Sie den ALTER TABLE-Befehl. Mithilfe des ALTER TABLE-Befehls können Sie Spalten oder Einschränkungen hinzufügen, ändern oder verwerfen (löschen). Der ALTER TABLE-Befehl hat folgende Syntax:
ALTER TABLE table_name predicate
wobei predicate für eine der folgenden Entitäten stehen kann:
-
ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]
-
ADD CONSTRAINT multifield_constraint
-
ALTER COLUMN field type[(size)]
-
DROP COLUMN field
-
DROP CONSTRAINT constraint
Einmal angenommen, Sie möchten ein 10 Zeichen umfassendes Feld zum Speichern von Angaben zum Zustand des jeweiligen Wagens hinzufügen. In dem Fall können Sie wie folgt vorgehen:
- Klicken Sie auf der Registerkarte Erstellen in der Gruppe Andere auf Abfrageentwurf.
- Schließen Sie das Dialogfeld Tabelle anzeigen.
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Der Entwurfsbereich wird ausgeblendet, und die Objektregisterkarte "SQL-Ansicht" wird angezeigt.
- Geben Sie die folgende SQL-Anweisung ein:
ALTER TABLE Cars ADD COLUMN Condition TEXT(10)
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Seitenanfang
Erstellen eines Index
Zum Erstellen eines Index für eine vorhandene Tabelle verwenden Sie den CREATE INDEX-Befehl. Der CREATE INDEX-Befehl hat die folgende Syntax:
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
Die einzigen obligatorischen Elemente sind der CREATE INDEX-Befehl, der Name des Index, das Argument ON, der Name der Tabelle, die die Felder enthält, die Sie indizieren möchten, sowie die Liste der Felder, die in den Index eingeschlossen werden sollen.
Einmal angenommen, Sie verfügen über eine Tabelle mit Namen "Cars" mit Felder, in denen Sie den Namen, das Baujahr, den Preis und den Zustand von Gebrauchtwagen speichern, deren Kauf Sie in Betracht ziehen. Nehmen wir darüber hinaus an, dass die Tabelle recht umfangreich geworden ist und dass Sie das Feld mit dem Baujahr häufig in Abfragen verwenden. Sie können nun mit dem folgenden Verfahren einen Index für das Feld "Year", damit die Abfrageergebnisse schneller zurückgegeben werden:
- Klicken Sie auf der Registerkarte Erstellen in der Gruppe Andere auf Abfrageentwurf.
- Schließen Sie das Dialogfeld Tabelle anzeigen.
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Der Entwurfsbereich wird ausgeblendet, und die Objektregisterkarte "SQL-Ansicht" wird angezeigt.
- Geben Sie die folgende SQL-Anweisung ein:
CREATE INDEX YearIndex ON Cars (Year)
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Seitenanfang
Erstellen eine Einschränkung oder einer Beziehung
Mit einer Einschränkung wird eine logische Bedingung festgelegt, der ein Feld oder eine Kombination aus Felder entsprechen muss, wenn Werte eingefügt werden. Beispielsweise verhindert die Einschränkung UNIQUE, dass in das mit der Einschränkung versehene Feld ein Wert eingegeben wird, der bereits vorhanden ist, sodass keine Duplikate möglich sind.
Eine Beziehung ist ein Einschränkungstyp, der auf die Werte eines Felds oder einer Kombination aus Feldern in einer anderen Tabelle verweist, um zu ermitteln, ob ein Wert in das eingeschränkte Feld bzw. die Feldkombination eingegeben werden kann.
Verwenden Sie zum Erstellen einer Einschränkung eine CONSTRAINT-Klausel in einem CREATE TABLE- oder ALTER TABLE-Befehl. Es gibt zwei Arten von CONSTRAINT-Klauseln: eine zum Erstellen einer Einschränkung für ein einzelnes Feld, und eine weitere zum Erstellen einer Einschränkung für mehrere Felder.
Einschränkungen für einzelne Felder
Eine CONSTRAINT-Klausel für ein einzelnes Feld folgt unmittelbar auf die Definition des Felds, das hiermit eingeschränkt wird, und weist die folgende Syntax auf:
CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
Einmal angenommen, Sie verfügen über eine Tabelle mit Namen "Cars" mit Felder, in denen Sie den Namen, das Baujahr, den Preis und den Zustand von Gebrauchtwagen speichern, deren Kauf Sie in Betracht ziehen. Nehmen wir des weiteren an, dass Sie häufig vergessen, einen Wert für den Zustand des Wagens einzugeben, diese Angabe aber immer aufgezeichnet werden soll. Sie können nun eine Einschränkung für das Feld "Condition" erstellen, die verhindert, dass das Feld leer bleibt. Gehen Sie hierzu wie folgt vor:
- Klicken Sie auf der Registerkarte Erstellen in der Gruppe Andere auf Abfrageentwurf.
- Schließen Sie das Dialogfeld Tabelle anzeigen.
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Der Entwurfsbereich wird ausgeblendet, und die Objektregisterkarte "SQL-Ansicht" wird angezeigt.
- Geben Sie die folgende SQL-Anweisung ein:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Nehmen wir nun an, dass Sie nach einiger Zeit feststellen, dass das Feld "Condition" zahlreiche ähnliche Werte enthält, die eigentlich gleich sein sollten, d. h. das bei einigen Wagen als Wert für "Condition" der Eintrag poor (armselig) und bei anderen der Eintrag bad (schlecht) vorgenommen wurde. Nachdem Sie die Werte so bereinigt haben, dass sie konsistenter sind, könnten Sie eine Tabelle mit Namen "CarCondition" mit einem Feld mit Namen "Condition" erstellen, die alle Werte enthält, die Sie für die Beschreibung des Zustands von Gebrauchtwagen verwenden möchten:
- Klicken Sie auf der Registerkarte Erstellen in der Gruppe Andere auf Abfrageentwurf.
- Schließen Sie das Dialogfeld Tabelle anzeigen.
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Der Entwurfsbereich wird ausgeblendet, und die Objektregisterkarte "SQL-Ansicht" wird angezeigt.
- Geben Sie die folgende SQL-Anweisung ein:
CREATE TABLE CarCondition (Condition TEXT(10))
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
- Geben Sie zum Einfügen der Werte aus dem Feld "Condition" der Tabelle "Cars" in die neue Tabelle "CarCondition" die folgende SQL-Anweisung auf der Objektregisterkarte "SQL-Ansicht" ein:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
Hinweis Die SQL-Anweisung in diesem Schritt ist eine Anfügeabfrage (Anfügeabfrage: Eine Aktionsabfrage, die die Datensätze eines Resultsets für eine Abfrage zum Ende einer Tabelle hinzufügt.). Im Gegensatz zu einer Datendefinitionsabfrage wird eine Anfügeabfrage mit einem Semikolon abgeschlossen.
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Damit alle neuen Werte, die in das Feld "Condition" der Tabelle "Cars" eingegeben werden, einem Wert des Felds "Condition" in der Tabelle "CarCondition" entsprechen, können Sie nun eine Beziehung zwischen dem Feld "Condition" in den Tabellen "CarCondition" und "Cars" erstellen. Gehen Sie hierzu wie folgt vor:
- Klicken Sie auf der Registerkarte Erstellen in der Gruppe Andere auf Abfrageentwurf.
- Schließen Sie das Dialogfeld Tabelle anzeigen.
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Der Entwurfsbereich wird ausgeblendet, und die Objektregisterkarte "SQL-Ansicht" wird angezeigt.
- Geben Sie die folgende SQL-Anweisung ein:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition)
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Einschränkungen für mehrere Felder
Eine CONSTRAINT-Klausel, die sich auf mehrere Felder bezieht, kann nur außerhalb einer Felddefinitionsklausel verwendet werden und weist die folgende Syntax auf:
CONSTRAINT constraint_name
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) |
UNIQUE (unique1[, unique2[, ...]]) |
NOT NULL (notnull1[, notnull2[, ...]]) |
FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]])
REFERENCES foreign_table
[(fk_field1[, fk_field2[, ...]])] |
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
Nun wollen wir eine weiteres Beispiel in Verbindung mit der Tabelle "Cars" betrachten. Einmal angenommen, Sie möchten sicherstellen, dass es in der Tabelle "Cars" keine Datensätze gibt, die den gleichen Wertesatz für "Name", "Year", "Condition" und "Price" aufweisen. In diesem Fall können Sie mit dem folgenden Verfahren eine UNIQUE-Einschränkung erstellen, die für diese Felder gilt:
- Klicken Sie auf der Registerkarte Erstellen in der Gruppe Andere auf Abfrageentwurf.
- Schließen Sie das Dialogfeld Tabelle anzeigen.
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Der Entwurfsbereich wird ausgeblendet, und die Objektregisterkarte "SQL-Ansicht" wird angezeigt.
- Geben Sie die folgende SQL-Anweisung ein:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (name, year, condition, price)
- Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Seitenanfang