Freigeben über


Erstellen von Fremdschlüssel-Beziehungen

In diesem Thema wird beschrieben, wie Fremdschlüsselbeziehungen in SQL Server 2014 mithilfe von SQL Server Management Studio oder Transact-SQL erstellt werden. Sie erstellen eine Beziehung zwischen zwei Tabellen, wenn Sie die Zeilen der einen Tabelle mit den Zeilen der anderen Tabelle verknüpfen möchten.

In diesem Thema

Vorbereitungen

Einschränkungen

  • Eine FOREIGN KEY-Einschränkung muss nicht notwendigerweise mit einer PRIMARY KEY-Einschränkung in einer anderen Tabelle verknüpft sein; sie kann auch so definiert werden, dass sie auf die Spalten einer UNIQUE-Einschränkung in einer anderen Tabelle verweist.

  • Wenn ein anderer Wert als NULL in die Spalte einer FOREIGN KEY-Einschränkung eingegeben wird, muss der Wert in der Spalte vorhanden sein, auf die verwiesen wird; andernfalls wird eine Fremdschlüsselverletzungs-Fehlermeldung zurückgegeben. Um sicherzustellen, dass alle Werte einer zusammengesetzten FOREIGN KEY-Einschränkung überprüft werden, legen Sie NOT NULL für alle betroffenen Spalten fest.

  • FOREIGN KEY-Einschränkungen können nur auf Tabellen verweisen, die sich innerhalb derselben Datenbank auf demselben Server befinden. Datenbankübergreifende referenzielle Integrität muss durch Trigger implementiert werden. Weitere Informationen finden Sie unter CREATE TRIGGER (Transact-SQL).

  • FOREIGN KEY-Einschränkungen können auf eine andere Spalte in derselben Tabelle verweisen. Ein solcher Verweis wird als Eigenverweis bezeichnet.

  • Eine auf Spaltenebene angegebene FOREIGN KEY-Einschränkung kann nur eine Verweisspalte auflisten. Diese Spalte muss denselben Datentyp aufweisen wie die Spalte, für die die Einschränkung definiert wurde.

  • Eine auf Tabellenebene angegebene FOREIGN KEY-Einschränkung muss ebenso viele Verweisspalten haben, wie sich Spalten in der Einschränkungsspaltenliste befinden. Der Datentyp jeder Verweisspalte muss ebenfalls mit dem der entsprechenden Spalte in der Spaltenliste übereinstimmen.

  • Das Datenbank-Engine verfügt über keine vordefinierte Grenze hinsichtlich der Anzahl von FOREIGN KEY-Einschränkungen, die eine Tabelle, die auf andere Tabellen verweist, enthalten kann, oder hinsichtlich der Anzahl von FOREIGN KEY-Einschränkungen im Besitz anderer Tabellen, die auf eine bestimmte Tabelle verweisen. Nichtsdestotrotz ist die tatsächliche Anzahl von FOREIGN KEY-Einschränkungen , die verwendet werden können, durch die Hardwarekonfiguration und den Entwurf der Datenbank und der Anwendung begrenzt. Als Empfehlung gilt, dass eine Tabelle maximal 253 FOREIGN KEY-Einschränkungen enthalten sollte und dass maximal 253 FOREIGN KEY-Einschränkungen auf eine Tabelle verweisen sollten.

  • FOREIGN KEY-Einschränkungen werden nicht auf temporäre Tabellen angewendet.

  • Wenn ein Fremdschlüssel für eine Spalte eines CLR-benutzerdefinierten Typs definiert wird, muss die Implementierung des Typs eine binäre Sortierreihenfolge unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte CLR-Typen.

  • Eine Spalte vom Typ varchar(max) kann nur dann in eine FOREIGN KEY-Einschränkung einbezogen werden, wenn der Primärschlüssel, auf den verwiesen wird, ebenfalls als varchar(max)-Typ definiert ist.

Sicherheit

Berechtigungen

Zum Erstellen einer neuen Tabelle mit einem Fremdschlüssel sind die CREATE TABLE-Berechtigung für die Datenbank und die ALTER-Berechtigung für das Schema erforderlich, in dem die Tabelle erstellt wird.

Zum Erstellen eines Fremdschlüssels für eine vorhandene Tabelle ist die ALTER-Berechtigung für die Tabelle erforderlich.

Verwendung von SQL Server Management Studio

So erstellen Sie eine Fremdschlüsselbeziehung im Tabellen-Designer

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle, die sich auf der Fremdschlüsselseite der Beziehung befinden soll, und klicken Sie auf Entwerfen.

    Die Tabelle wird im Tabellen-Designer geöffnet.

  2. Klicken Sie im Menü Tabellen-Designer auf Beziehungen.

  3. Klicken Sie im Dialogfeld Fremdschlüsselbeziehungen auf Hinzufügen.

    Die Beziehung wird in der Liste Ausgewählte Beziehung mit einem vom System bereitgestellten Namen im Format FK_<tablename>_<tablename> angezeigt, wobei tablename der Name der Fremdschlüsseltabelle ist.

  4. Klicken Sie in der Liste Ausgewählte Beziehung auf die Beziehung.

  5. Klicken Sie im Datenblatt rechts auf Tabellen- und Spaltenspezifikation, und klicken Sie anschließend auf die rechts neben der Eigenschaft angezeigten Auslassungspunkte ( ... ).

  6. Wählen Sie im Dialogfeld Tabellen und Spalten in der Dropdownliste Primärschlüssel die Tabelle aus, die sich auf der Primärschlüsselseite der Beziehung befinden soll.

  7. Wählen Sie im darunter angezeigten Datenblatt die Spalten aus, die für den Primärschlüssel der Tabelle verwendet werden sollen. Geben Sie in die jeweils links neben den einzelnen Spalten angrenzende Datenblattzelle die entsprechende Fremdschlüsselspalte aus der Fremdschlüsseltabelle ein.

    DerTabellen-Designer schlägt einen Namen für die Beziehung vor. Wenn Sie diesen Namen ändern möchten, bearbeiten Sie den Inhalt des Textfelds Beziehungsname .

  8. Klicken Sie auf OK , um die Beziehung zu erstellen.

Verwenden von Transact-SQL

So erstellen Sie einen Fremdschlüssel in einer neuen Tabelle

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen. Im Beispiel wird eine Tabelle erstellt und eine Fremdschlüsseleinschränkung für die Spalte TempID definiert, die auf die Spalte SalesReasonID in der Tabelle Sales.SalesReason verweist. Die Klauseln ON DELETE CASCADE und ON UPDATE CASCADE werden verwendet, um sicherzustellen, dass an der Sales.SalesReason -Tabelle vorgenommene Änderungen automatisch an die Tabelle Sales.TempSalesReason weitergegeben werden.

    USE AdventureWorks2012;  
    GO  
    CREATE TABLE Sales.TempSalesReason (TempID int NOT NULL, Name nvarchar(50),   
    CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID),   
    CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)   
        REFERENCES Sales.SalesReason (SalesReasonID)   
        ON DELETE CASCADE  
        ON UPDATE CASCADE  
    );GO  
    
    

So erstellen Sie einen Fremdschlüssel in einer vorhandenen Tabelle

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen. Im Beispiel wird ein Fremdschlüssel für die Spalte TempID erstellt und auf die Spalte SalesReasonID in der Tabelle Sales.SalesReason verwiesen.

    USE AdventureWorks2012;  
    GO  
    ALTER TABLE Sales.TempSalesReason   
    ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)   
        REFERENCES Sales.SalesReason (SalesReasonID)   
        ON DELETE CASCADE  
        ON UPDATE CASCADE  
    ;  
    GO  
    
    

    Weitere Informationen finden Sie unter ALTER TABLE (Transact-SQL),CREATE TABLE (Transact-SQL) und table_constraint (Transact-SQL).