Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Datenbanken erstellen » Mit Datenbankobjekten arbeiten » Fremdschlüssel verwalten

 

Fremdschlüssel verwalten (SQL)

Für eine Tabelle kann nur ein Primärschlüssel definiert sein, sie darf aber mehrere Fremdschlüssel haben. In Interactive SQL können Sie Fremdschlüssel mit den Anweisungen CREATE TABLE und ALTER TABLE erstellen und bearbeiten. Mit diesen Anweisungen können Sie viele Tabellenattribute einstellen, einschließlich Spaltenintegritätsregeln und Prüfungen.

♦  So erstellen Sie einen Fremdschlüssel (SQL)
  1. Verbinden Sie sich als Benutzer mit DBA-Berechtigung mit der Datenbank.

  2. Führen Sie die Anweisung ALTER TABLE aus.

Spaltennamen bei der Erstellung von Fremdschlüsseln weglassen (SQL)

Namen für Fremdschlüsselspalten werden den Namen für Primärschlüsselspalten immer entsprechend der Position in den beiden Listen zugeordnet. Wenn die Spaltennamen der Primärtabelle bei der Festlegung des Fremdschlüssels nicht angegeben werden, dann werden die Primärschlüsselspalten verwendet. Nehmen wir beispielsweise an, dass Sie zwei Tabellen folgendermaßen erstellen:

CREATE TABLE Table1( a INT, b INT, c INT, PRIMARY KEY ( a, b ) );
CREATE TABLE Table2( x INT, y INT, z INT, PRIMARY KEY ( x, y ) );

Anschließend erstellen Sie einen Fremdschlüssel fk1, indem Sie genau angeben, wie die Spalten zwischen den Tabellen gepaart werden sollen, und zwar folgendermaßen:

ALTER TABLE Table2 ADD FOREIGN KEY fk1( x,y ) REFERENCES Table1( a, b );

Unter Verwendung der folgenden Anweisung erstellen Sie einen zweiten Fremdschlüssel fk2, indem Sie nur die Fremdtabellenspalten angeben. Der Datenbankserver paart automatisch diese zwei Spalten mit den ersten zwei Spalten im Primärschlüssel der Primärtabelle.

ALTER TABLE Table2 ADD FOREIGN KEY fk2( x, y ) REFERENCES Table1;

Unter Verwendung der folgenden Anweisung erstellen Sie einen Fremdschlüssel, ohne die Primär- oder die Fremdtabelle anzugeben:

ALTER TABLE Table2 ADD FOREIGN KEY fk3 REFERENCES Table1;

Da Sie keine referenzierenden Spalten angegeben haben, sucht der Datenbankserver nach Spalten in der Fremdtabelle (Table2) mit demselben Namen wie Spalten in der Primärtabelle (Table1). Wenn sie vorhanden sind, stellt er sicher, dass die Datentypen übereinstimmen und erstellt dann den Fremdschlüssel unter Verwendung dieser Spalten. Wenn keine Spalten vorhanden sind, werden sie in Table2 erstellt. In diesem Beispiel hat Table2 KEINE Spalten namens a und b, daher werden sie mit denselben Datentypen wie Table1.a und Table1.b erstellt. Diese automatisch erstellten Spalten können nicht teil des Primärschlüssels der Fremdtabelle werden.

Beispiele

Im folgenden Beispiel erstellen Sie eine Tabelle namens "Skills", die eine Liste möglicher Kompetenzen enthält. Anschließend erstellen Sie eine Tabelle namens "EmployeeSkills", die eine Fremdschlüsselbeziehung zur Tabelle "Skills" hat. Beachten Sie, dass "EmployeeSkills.SkillID" eine Fremdschlüsselbeziehung mit der Primärschlüsselspalte (Id) der Tabelle "Skills" hat.

CREATE TABLE Skills (
   Id INTEGER PRIMARY KEY,
   SkillName CHAR(40),
   Description CHAR(100) 
);
CREATE TABLE EmployeeSkills (
   EmployeeID INTEGER NOT NULL,
   SkillId INTEGER NOT NULL,
   SkillLevel INTEGER NOT NULL,
   PRIMARY KEY( EmployeeID ),
   FOREIGN KEY (SkillID) REFERENCES Skills ( Id )
);

Sie können einer Tabelle auch einen Fremdschlüssel hinzufügen, nachdem sie erstellt wurde, indem Sie die Anweisung ALTER TABLE benutzen. Im folgenden Beispiel erstellen Sie Tabellen ähnlich wie im vorherigen Beispiel, nur fügen Sie jetzt den Fremdschlüssel erst nach dem Erstellen der Tabelle hinzu.

CREATE TABLE Skills2 (
   Id INTEGER PRIMARY KEY,
   SkillName CHAR(40),
   Description CHAR(100) 
);
CREATE TABLE EmployeeSkills2 (
   EmployeeID INTEGER NOT NULL,
   SkillId INTEGER NOT NULL,
   SkillLevel INTEGER NOT NULL,
   PRIMARY KEY( EmployeeID ),
);
ALTER TABLE EmployeeSkills2
   ADD FOREIGN KEY SkillFK ( SkillID )
   REFERENCES Skills2 ( Id );

Sie können Eigenschaften für den Fremdschlüssel festlegen, wenn Sie ihn erstellen. Mit der folgenden Anweisung wird z.B. derselbe Fremdschlüssel erstellt wie in Beispiel 2, aber er wird als NOT NULL definiert und erhält Einschränkungen für die Aktualisierung und das Löschen.

ALTER TABLE Skills2
ADD NOT NULL FOREIGN KEY SkillFK ( SkillID )
REFERENCES Skills2 ( ID )
ON UPDATE RESTRICT
ON DELETE RESTRICT;
Siehe auch