it-swarm.com.de

SQL Server Management Studio - Hinzufügen von Fremdschlüsseln verwirrend?

Ich finde es immer verwirrend, Fremdschlüssel zur Primärtabelle in Management Studio hinzuzufügen.

Sagen wir, ich habe eine

Table1 
{
    ID int, -- Primary Key
    Table2ID int, -- Refers to Table2's ID 
}

Table2 
{
    ID int, -- Primary Key
    SomeData nvarchar(50)
}

Ich füge Table1 einen Fremdschlüssel mit Right Click -> Relationships -> Table and column specification Hinzu. Ich setze "Primary" Popups auf Table2, ID und "Foreign Key Table" auf Table1, Table2ID.

Meine Fragen:

  1. Sollte Tabelle2 nicht für "Fremdschlüsseltabelle" und Tabelle1 für Primärschlüssel aufgelistet werden? Ist mein Verständnis falsch?

  2. Wenn ich speichere, erhalte ich eine Warnung "Die folgenden Tabellen werden in Ihrer Datenbank gespeichert." und es zeigt beide Tabellen. Ich verstehe das wirklich nicht. Ich habe nur Table1 geändert. Warum wird die zweite Tabelle angezeigt?

42
tvr
  • Klicken Sie auf das Erweiterungssymbol neben der Tabelle.
  • Klicken Sie mit der rechten Maustaste auf den Ordner "Keys" und wählen Sie "New Foreign Key".
  • (Alternativ können Sie auf die Schaltfläche Beziehungen im Toolstrip klicken, wenn die Tabelle geöffnet ist.)
  • Klicken Sie auf die Schaltfläche "..." in der Zeile "Tabellen- und Spaltenspezifikationen", um den Editor zu öffnen.
  • Das Dropdown-Menü auf der linken Seite enthält die Tabelle, aus der Sie hinzufügen, und das statische Textfeld enthält die Tabelle, zu der Sie hinzufügen.
  • Verwenden Sie die Dropdown-Listen, um Ihre Einschränkungen festzulegen, und stellen Sie sicher, dass auf beiden Seiten die gleiche Anzahl von Spalten vorhanden ist.
103
Zach

Warum verwenden Sie nicht einfach die entsprechenden T-SQL-Anweisungen? Scheint mir viel einfacher und weniger verwirrend:

ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)

Wenn ich das lese, wird mir sofort klar, um welche zwei Tabellen es sich handelt und wie sie verbunden sind (Table1.Table2ID - (Referenzen) -> Table2.ID)

Wenn Sie in der SSMS-Designerwelt bleiben möchten: Sie können auch ein Datenbankdiagramm Ihrer beteiligten Tabellen erstellen und dann einfach per Drag & Drop Ihr ​​Table2ID Spalte von Table1 nach Table2 und legen Sie es in der Spalte ID ab. Dadurch wird SSMS grafisch mitgeteilt, was Sie tun möchten. Sie müssen nur Ihre Auswahl überprüfen und im daraufhin angezeigten Dialogfeld auf OK klicken.

22
marc_s

1. Sollte Tabelle2 nicht für "Fremdschlüsseltabelle" und Tabelle1 für Primärschlüssel aufgeführt sein? Ist mein Verständnis falsch?

Ich glaube, Ihr Verständnis ist falsch. Tabelle2 ist die Tabelle, auf deren Primärschlüssel Sie verweisen. Daher ist es unter Primärschlüssel aufgeführt. Tabelle1 ist die Tabelle mit dem Fremdschlüssel (der Verweis auf den Primärschlüssel einer anderen Tabelle). Daher ist es unter "Fremdschlüsseltabelle" aufgeführt.

Was den Grund angeht, warum beide Tabellen gespeichert werden, obwohl der Fremdschlüssel später als zu Tabelle 1 gehörig aufgeführt wird: Ich glaube, der Fremdschlüssel schränkt beide Tabellen ein. Sie müssen beide über die Einschränkung "Bescheid wissen", also müssen sie beide gerettet werden.

9
Ann L.
ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)
1
Deepesh