#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. К сожалению, нет, но я буду следить за любыми вопросами, которые могут возникнуть у вас по этому поводу, и постараюсь помочь, где смогу. Удачи вам в собеседовании, и у вас все будет хорошо. Использование ресурсов по сети — отличный способ проявить инициативу, так что у вас все получится.