Способы связать внешний ключ С первичным ключом в SQL

#c# #sql #asp.net #database

#c# #sql #asp.net #База данных

Вопрос:

Я работаю над дизайном базы данных в Microsoft Sql Server Management Studio, у меня небольшая проблема. У LibraryItem должна быть обязательная категория, связанная с внешним ключом CategoryID, сопоставленным с Id в категории таблицы, как показано на рисунке.

СМОТРИТЕ ИЗОБРАЖЕНИЕ

ВТОРОЕ ИЗОБРАЖЕНИЕ

Мне нужна помощь в том, как я могу связать CategoryID(FK) с Id (PK в таблице категорий). Я просто не знаю, как это сделать.

Ответ №1:

Вам нужно будет добавить ссылку на скрипт, который создает таблицу, и добавить имя к ограничению следующим образом:

 CONSTRAINT FK_LibraryItem_Category_CategoryId FOREIGN KEY ([CategoryId]) REFERENCES [dbo].[Category] ([Id])
  

Примечание: я по умолчанию dbo использовал схему. Вам нужно будет изменить это, если оно отличается для таблицы категорий, которую вы создаете.

Это создаст внешний ключ для вашей таблицы LibraryItem и свяжет CategoryID с соответствующей записью в таблице категорий.

Также следует отметить еще одну вещь: это приведет к возникновению ошибок, если ваше значение для FK не соответствует идентификатору в таблице категорий.

Для исправления ошибок:

Допустим, вы добавляете CategoryId значение 2 к записи в своей LibraryItem таблице, но запись с ID числом 2 не существует в вашей Category таблице, она выдаст ошибку, подобную этой:

 The INSERT statement conflicted with the FOREIGN KEY constraint "FK_LibraryItem_Category_CategoryId". The conflict occurred in database "foo", table "dbo.LibraryItem". The statement has been terminated.
  

Это можно легко решить, убедившись, что идентификаторы совпадают в обеих таблицах.

Комментарии:

1. Если FK dosent совпадают? Что вы имеете в виду? Может быть более понятным, пожалуйста.

2. @Dell97 обновлен, чтобы ответить на ваш дополнительный вопрос.

3. Я понимаю, не могли бы вы, пожалуйста, проверить ВТОРОЕ ИЗОБРАЖЕНИЕ выше, чтобы сказать мне, правильно ли я все сделал. Я обновил свой вопрос.

4. Да, это выглядит правильно для меня. Хорошая работа :). Я бы рекомендовал протестировать его, добавив запись, когда вы можете, с INSERT помощью скрипта.

5. К сожалению, нет, но я буду следить за любыми вопросами, которые могут возникнуть у вас по этому поводу, и постараюсь помочь, где смогу. Удачи вам в собеседовании, и у вас все будет хорошо. Использование ресурсов по сети — отличный способ проявить инициативу, так что у вас все получится.