Подтвердить что ты не робот

Создайте отношения "один ко многим" с помощью SQL Server

Как вы создаете отношения "один ко многим" с помощью SQL Server?

4b9b3361

Ответ 1

  • Определите две таблицы (примеры A и B) с собственным первичным ключом
  • Определите столбец в таблице A как имеющий отношение внешнего ключа на основе первичного ключа таблицы B

Это означает, что таблица A может содержать одну или несколько записей, относящихся к одной записи в таблице B.

Если у вас уже есть таблицы, используйте оператор ALTER TABLE для создания ограничения внешнего ключа:

ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id) 
  • fk_b: имя ограничения внешнего ключа должно быть уникальным для базы данных
  • b_id: Имя столбца в таблице A вы создаете отношение внешнего ключа на
  • b: Имя таблицы, в данном случае b
  • id: Имя столбца в таблице B

Ответ 2

Это простой пример классического примера заказа. Каждый клиент может иметь несколько ордеров, и каждый заказ может состоять из нескольких OrderLines.

Вы создаете отношение, добавив столбец foreign key. В каждой записи заказа есть идентификатор CustomerID, который указывает на идентификатор клиента. Аналогично, каждый OrderLine имеет значение OrderID. Вот как выглядит диаграмма базы данных:

Диаграмма "один ко многим" SQL http://www.subbot.net/personal/external/stackoverflow/sql-one-to-many.png

На этой диаграмме существуют фактические ограничения внешнего ключа. Они являются необязательными, но они обеспечивают целостность ваших данных. Кроме того, они делают структуру вашей базы данных более ясной для всех, кто ее использует.

Я предполагаю, что вы знаете, как создавать сами таблицы. Тогда вам просто нужно определить отношения между ними. Разумеется, вы можете определить ограничения в T-SQL (как указано несколькими людьми), но их также легко добавить с помощью конструктора. Используя SQL Management Studio, вы можете щелкнуть правой кнопкой мыши по таблице Order, нажав Design (я думаю, что это можно назвать Edit в 2005 году). Затем в любом месте окна, которое открывается, щелкните правой кнопкой мыши и выберите Отношения.

Появится еще один диалог, справа должен быть вид сетки. Одна из первых строк гласит " Таблица и спецификация столбцов". Нажмите эту строку, затем нажмите еще раз маленькую кнопку [...], которая появляется справа. Вы получите этот диалог:

Ограничение внешнего ключа http://www.subbot.net/personal/external/stackoverflow/sql-fk.png

Таблица заказов уже должна быть выбрана справа. В раскрывающемся списке слева выберите таблицу Customer. Затем в левой сетке выберите столбец ID. В правой сетке выберите столбец CustomerID. Закройте диалог и следующий. Нажмите Ctrl + S, чтобы сохранить.

Наличие этого ограничения гарантирует, что никакие записи заказов не могут существовать без сопровождающей записи Клиента.

Чтобы эффективно запросить такую ​​базу данных, вы можете читать в JOINs.

Ответ 3

Так я обычно это делаю (сервер sql).

Create Table Master (
MasterID int identity(1,1) primary key,
Stuff varchar(10)
)
GO
Create Table Detail (
DetailID int identity(1,1) primary key,
MasterID int references Master, --use 'references'
Stuff varchar(10))
GO
Insert into Master values('value')
--(1 row(s) affected)
GO
Insert into Detail values (1, 'Value1') -- Works
--(1 row(s) affected)
insert into Detail values (2, 'Value2') -- Fails
--Msg 547, Level 16, State 0, Line 2
--The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Detail__MasterID__0C70CFB4". 
--The conflict occurred in database "Play", table "dbo.Master", column 'MasterID'.
--The statement has been terminated.

Как вы можете видеть, вторая вставка в детали терпит неудачу из-за внешнего ключа. Здесь хорошая веб-ссылка, которая показывает различный синтаксис для определения FK во время создания таблицы или после.

http://www.1keydata.com/sql/sql-foreign-key.html

Ответ 4

Если вы говорите о двух видах enitities, скажем, учителях и учениках, вы создадите две таблицы для каждой и третью, чтобы сохранить отношения. Эта третья таблица может иметь два столбца, например, teacherID и StudentId. Если это не то, что вы ищете, пожалуйста, уточните свой вопрос.

Ответ 5

Если вы не используете SSMS, вот синтаксис:

ALTER TABLE <table_name>
ADD <constraint_name> FOREIGN KEY 
(<column_name1> ,
<column_name2> )
REFERENCES <table_name>
(<column_name1> ,
<column_name2>)

http://infogoal.com/sql/sql-add-foreignkey.htm