Definieren von Sekundärschlüsseln

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Anzeigen und Ändern der Datenbankstruktur > Gestalten von Tabellen im Design Editor >

Definieren von Sekundärschlüsseln

Mit Hilfe von Sekundärschlüsseln kann die Integrität der Datenbank sichergestellt werden. Angenommen Sie erstellen eine Datenbank zur Verwaltung der Angestellten eines Unternehmens. Die Angestellten sind in der Tabelle PERSON und die Abteilungen in der Tabelle DEPARTMENT gespeichert.

 

+----+------------------+--------------------------+---------------+

| ID | NAME             | EMAIL                    | DEPARTMENT_ID +

+----+------------------+--------------------------+---------------+

| 1  | Toby Hughey      | t.hughey@nanonull.com    | 1             |

| 2  | Mia Dahill       | m.dahill@nanonull.com    | 2             |

| 3  | Fred Weinstein   | f.weinstein@nanonull.com | 1             |

+----+------------------+--------------------------+---------------+

Die Tabelle PERSON

+----+-------------+

| ID | NAME        |

+----+-------------+

| 1  | Development |

| 2  | Marketing   |

+----+-------------+

Die Tabelle DEPARTMENT

Beachten Sie, dass DEPARTMENT_ID in der Tabelle PERSON auf die ID der Abteilung in der Tabelle DEPARTMENT verweist. Diese Beziehung kann mit Hilfe eines Sekundärschlüssel-Constraint zwischen diesen beiden Spalten gewährleistet werden, um Folgendes sicherzustellen:

 

dass jeder Personendatensatz in der Tabelle PERSON jede der vorhandenen Abteilungen in der Tabelle DEPARTMENT referenzieren kann (1:1-Beziehung).
Wenn Sie jemals versuchen sollten, einen Datensatz aus der Tabelle DEPARTMENT zu löschen und es PERSON-Datensätze gibt, die auf dieses DEPARTMENT verweisen, würde die Datenbank einen Validierungsfehler ausgeben (z.B "Sekundärschlüssel-Constraint fehlgeschlagen").

 

Sie können Sekundärschlüssel-Constraints entweder durch Schreiben einer SQL-Abfrage im SQL Editor erstellen oder Sie können diese über den Design Editor von DatabaseSpy visuell erstellen. Die folgenden Voraussetzungen müssen gegeben sein:

 

Die Spalten, die an der Sekundärschlüsselbeziehung beteiligt sind, müssen denselben Datentyp und dieselbe Länge haben. In diesem Beispiel wird davon ausgegangen, dass sowohl die Spalte DEPARTMENT.ID als auch die Spalte PERSON.DEPARTMENT_ID den Typ "int" haben.
Die referenzierende Spalte (in diesem Beispiel DEPARTMENT.ID) muss entweder Teil eines Primärschlüssels oder eines eindeutigen Schlüssels sein.

 

Anmerkung:In SQL Server können Sie eine Sekundärschlüsselreferenz auch dann zu einer Spalte hinzufügen, wenn dafür ein eindeutiger Index definiert ist. Dies ist auch in neueren Versionen von MySQL möglich (vorausgesetzt der Speicherprozessor ist InnoDB).

 

Es gibt verschiedene Möglichkeiten, um im Design Editor einen Sekundärschlüssel zu definieren.

 

Methode 1

1.Fügen Sie die Tabelle, in der der Sekundärschlüssel definiert werden soll, und die referenzierte Tabelle zum Design Editor hinzu.
2.Wählen Sie eine der folgenden Methoden:
oZiehen Sie die Spalte aus dem Abschnitt "Spalten" eines Tabellendesigns (oder aus dem Online Browser) in den Abschnitt "Schlüssel" eines Tabellendesigns.
oZiehen Sie einen Primärschlüssel, einen eindeutigen Schlüssel oder (in SQL Server) einen eindeutigen Index aus einem Tabellendesign (oder dem Online Browser) in den Abschnitt "Schlüssel" eines Tabellendesigns.

 

Standardmäßig wird für die erste Spalte, die denselben Datentyp wie die vom gezogenen Schlüssel bzw. Index referenzierte Spalte hat, automatisch ein Sekundärschlüssel mit dem Namen <generiert> erstellt. Dies ist nicht notwendigerweise die Spalte, für die Sie den Sekundärschlüssel benötigen. Doppelklicken Sie daher gegebenenfalls in die Spalte (unter "Spalten" in den Abschnitt "Schlüssel") und wählen Sie die richtige Spalte aus der Liste aus.

 

dbs_fk_approach1

 

Methode 2

1.Wählen Sie eine der folgenden Methoden:
oKlicken Sie im Abschnitt "Schlüssel" eines Tabellendesigns auf das Symbol Neuen Schlüssel-Constraint erstellen ic_add-column.
oKlicken Sie mit der rechten Maustaste an eine beliebige Stelle im Tabellendesign und wählen Sie im Kontextmenü den Befehl Neu einfügen | Schlüssel | Sekundärschlüssel.

 

Daraufhin wird automatisch ein Sekundärschlüssel mit dem Namen <generiert> ohne Referenz auf eine bestimmte Tabelle erstellt. Um die referenzierte Tabelle auszuwählen, klicken Sie auf [referenzierte Tabelle auswählen] und wählen Sie die gewünschte Tabelle aus der Liste aus.

dbs_fk_approach2a

2.Definieren Sie gegebenenfalls die Ausgangs- und Zielspalten für den Sekundärschlüssel. Gehen Sie dazu folgendermaßen vor:

 

oUm die Spalte, in der sich der Sekundärschlüssel befindet, zu ändern, doppelklicken Sie unter "Spalten" im Abschnitt "Schlüssel" auf die Spalte und wählen Sie den gewünschten Eintrag aus der Liste aus.

dbs_fk_approach2b

oUm die Spalte, auf die der Sekundärschlüssel verweist, zu ändern, doppelklicken Sie unter "Referenz" im Abschnitt "Schlüssel" auf die Spalte und wählen Sie den gewünschten Eintrag aus der Liste aus.

 

Benennen von Sekundärschlüsseln

Standardmäßig lautet der Name des Sekundärschlüssels <generiert>, d.h. der Name wird von der Datenbank automatisch generiert. Dadurch wird die Eindeutigkeit des Namens in der Datenbank gewährleistet. Falls erforderlich, können Sie die generierten Namen außer Kraft setzen. Geben Sie dazu anstelle von <generiert>, einen beschreibenden Namen ein und drücken Sie die Eingabetaste.

 

Wenn Sie den generierten Namen durch einen benutzerdefinierten Namen ersetzen, muss der neue Name eindeutig sein; andernfalls treten bei der Ausführung des Datenbank-Change Script Fehler auf.

 

Anmerkung:In SQLite werden benutzerdefinierte Schlüsselnamen von der Datenbank ignoriert. Der im Online Browser von DatabaseSpy angezeigte Schlüsselname ist der von der Datenbank intern vergebene Schlüsselname.

 

Duplizieren Sie von Sekundärschlüsseln

Wenn Sie einen vorhandenen Sekundärschlüssel duplizieren möchten, können Sie eine SQL-Anweisung generieren, die den Sekundärschlüssel-Constraint zur Tabellen hinzufügen. Gehen Sie dazu folgendermaßen vor:

 

1.Erweitern Sie im Online Browser den Ordner "Schlüssel" jener Tabelle, die den Sekundärschlüssel enthält, den Sie duplizieren möchten, und klicken Sie mit der rechten Maustaste auf den Sekundärschlüssel.
2.Wählen Sie In neuem SQL Editor anzeigen | Add aus dem Kontextmenü.
3.Bearbeiten Sie im SQL Editor den Namen der Tabelle, Spalte sowie des Sekundärschlüssels wie erforderlich.
4.Klicken Sie auf die Schaltfläche Ausführen ic_execute-sql, um die SQL-Anweisung auszuführen und den neuen Sekundärschlüssel zu erstellen.

 

Schemaübergreifende Referenzen

Sekundärschlüssel können auch eine Spalte in einer Tabelle referenzieren, die sich in einem anderen Schema befindet. Wenn diese Referenz mit Hilfe des Design Editors definiert wird, werden in der Dropdown-Liste, die erscheint wenn Sie in einem Tabellendesign eine Tabelle in der Spalte "Referenz" doppelklicken, Tabellen aus dem selben Schema schwarz angezeigt, wohingegen Tabellen, die sich in einem anderen Schema befinden, blau angezeigt werden.

 

design_cross-schema-FK


© 2019 Altova GmbH