SQL Server Management Studio - добавление внешнего ключа сбивает с толку? - PullRequest
41 голосов
/ 09 октября 2010

Меня всегда смущает добавление внешних ключей в основную таблицу в Management Studio.

Допустим, у меня есть

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

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

Я добавляю внешний ключ в таблицу Table1 на Right Click -> Relationships -> Table and column specification.Я устанавливаю «Основные» всплывающие окна для Table2, ID и «Таблица внешних ключей» для Table1, Table2ID.

Мои вопросы:

  1. Не следует ли перечислять Table2 для«Таблица внешнего ключа» и Таблица1 для первичного ключа?Мое понимание неверно?

  2. При сохранении я получаю предупреждение «Следующие таблицы будут сохранены в вашей базе данных».и это показывает обе таблицы.Я действительно не понимаю этого.Я только изменил Table1.Почему отображается вторая таблица?

Ответы [ 4 ]

102 голосов
/ 14 ноября 2011
  • Щелкните по символу раскрытия рядом с таблицей.
  • Щелкните правой кнопкой мыши папку «Ключи» и выберите «Новый внешний ключ».
  • (В качестве альтернативы вы можете нажать кнопку Отношения на панели инструментов, когда таблица открыта)
  • Нажмите кнопку «...» в строке «Спецификации таблиц и столбцов», чтобы открыть редактор.
  • Выпадающий слева будет таблица, из которой вы добавляете, а в статическом текстовом поле будет таблица, в которую вы добавляете.
  • Используйте раскрывающиеся списки, чтобы указать свои ограничения, и убедитесь, что обе стороны имеют одинаковое количество столбцов.
22 голосов
/ 09 октября 2010

Почему бы вам просто не использовать эквивалентные операторы T-SQL ?? Мне кажется, намного проще и менее запутанным:

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

Когда я читаю это, я полагаю, что сразу понятно, какие две таблицы задействованы и как они связаны (Table1.Table2ID - (ссылки) -> Table2.ID)

Если вы хотите остаться в мире дизайнеров SSMS: вы также можете создать диаграмму базы данных ваших задействованных таблиц, а затем просто перетащить столбец Table2ID с Table1 на Table2 и перетащить его на ID столбец там - это графически скажет SSMS, что вы хотите сделать, и вам просто нужно просмотреть ваш выбор и нажать OK в появившемся диалоговом окне.

9 голосов
/ 07 апреля 2011

1.Не следует ли указывать Таблицу 2 для «Таблицы внешнего ключа» и Таблицу 1 для Первичного ключа?Мое понимание неверно?

Я считаю, что ваше понимание неверно.Table2 - это таблица, на первичный ключ которой вы ссылаетесь.Поэтому он указан в разделе «Первичный ключ».Table1 - таблица, которая будет иметь внешний ключ (ссылка на первичный ключ другой таблицы);поэтому он указан в разделе «Таблица внешних ключей».

Что касается того, почему обе таблицы были сохранены, несмотря на то, что внешний ключ впоследствии указан как принадлежащий Table1: я полагаю, это потому, что внешний ключ ограничивает обе таблицы.Они оба должны «знать» об ограничении, поэтому их обоих нужно сохранить.

1 голос
/ 09 мая 2011
ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...