Freigeben über


Fremdschlüsselbeziehungen erstellen

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 Themenbereich

Bevor Sie beginnen

Einschränkungen und Beschränkungen

  • Eine Fremdschlüsseleinschränkung muss nicht nur mit einer Primärschlüsseleinschränkung in einer anderen Tabelle verknüpft werden. sie kann auch definiert werden, um auf die Spalten einer UNIQUE-Einschränkung in einer anderen Tabelle zu verweisen.

  • 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 Fremdschlüsseleinschränkung überprüft werden, geben Sie NOT NULL für alle teilnehmenden Spalten an.

  • 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 Fremdschlüssel-Einschränkung, die auf Spaltenebene angegeben ist, kann nur eine Referenzspalte auflisten. Diese Spalte muss denselben Datentyp aufweisen wie die Spalte, für die die Einschränkung definiert wurde.

  • Eine Fremdschlüsseleinschränkung, die auf Tabellenebene angegeben ist, muss die gleiche Anzahl von Referenzspalten aufweisen wie die Anzahl der Spalten in der Spaltenliste der Einschränkung. Der Datentyp jeder Verweisspalte muss ebenfalls mit dem der entsprechenden Spalte in der Spaltenliste übereinstimmen.

  • Das Datenbankmodul hat keinen vordefinierten Grenzwert für die Anzahl der Fremdschlüsseleinschränkungen, die eine Tabelle enthalten kann, die auf andere Tabellen verweist, oder für die Anzahl der Fremdschlüsseleinschränkungen, die von anderen Tabellen auf eine bestimmte Tabelle verwiesen werden. 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.

  • Fremdschlüsseleinschränkungen werden für temporäre Tabellen nicht erzwungen.

  • 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 an einer FREMDSCHLÜSSELeinschränkung teilnehmen, wenn der Primärschlüssel, auf den verwiesen wird, ebenfalls als Typ varchar(max)definiert ist.

Sicherheit

Erlaubnisse

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

Zum Erstellen eines Fremdschlüssels in einer vorhandenen 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 befindet, und klicken Sie auf "Entwurf".

    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 "Tabellenname>" der Name der Fremdschlüsseltabelle ist.

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

  5. Klicken Sie auf "Tabellen und Spaltenspezifikation" im Gitter rechts und klicken Sie rechts neben der Eigenschaft auf die 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 befindet.

  7. Wählen Sie im Raster darunter die Spalten aus, die zum Primärschlüssel der Tabelle beitragen. Wählen Sie in der angrenzenden Rasterzelle links neben jeder Spalte die entsprechende Fremdschlüsselspalte der Fremdschlüsseltabelle aus.

    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. Wählen Sie OK aus, 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 Sales.SalesReason Tabelle verweist. Die ON DELETE CASCADE- und ON UPDATE CASCADE-Klauseln werden verwendet, um sicherzustellen, dass Änderungen, die an der Sales.SalesReason-Tabelle vorgenommen wurden, automatisch auf die Sales.TempSalesReason-Tabelle 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 Sales.SalesReason Tabelle 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).