Создание отношения один ко многим с использованием SQL Server

Как вы создаете отношения один ко многим, используя SQL Server?

 user388592703 авг. 2017 г., 00:22
Мой профессор в USC сказал нам это простое правило: когда есть отношения один ко многим, ставьте ключ «одна» в качестве внешнего ключа на сторону «многие». И когда между многими есть отношения, поместите оба ключа как внешние ключи в третью таблицу.

Ответы на вопрос(5)

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

 Tim20 авг. 2009 г., 21:38
Я не думаю, что это то, что я хочу. Я нормализовал таблицу, и теперь я хочу создать отношения.
 nXqd14 янв. 2011 г., 21:37
Этот используется для создания m-n отношений :)
 andrewWinn20 авг. 2009 г., 21:40
голосование "вниз" из-за предоставленного решения является одним из многих для многих. Даже если использовать один-ко-многим, это лишняя нагрузка при запуске соединений. Кроме того, вам нужно объединить три таблицы, чтобы больше печатать.

Покупатель может иметь несколькопорядокс, и каждыйпорядок может состоять из несколькихOrderLines.

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

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

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

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

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

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

Для эффективного запроса к базе данных, как это, вы можетечитать на JOINS.

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

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

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

Решение Вопроса
Определите две таблицы (пример 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: Имя таблицы, в данном случае bid: Имя столбца в таблице B
 Lopsided02 июл. 2013 г., 19:50
Вы объяснили это прекрасно, спасибо. Надеюсь, Microsoft в конечном итоге научится делать то же самое.
 AceMark01 сент. 2013 г., 07:16
Я думаю, что это должно быть:ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY ( b_id ) references b(id)
 OMG Ponies20 авг. 2009 г., 21:54
@George: обновлен и теперь включает команду ALTER TABLE ADD CONSTRAINT, при условии что таблицы существуют
 Bondolin05 дек. 2013 г., 14:53
Да, обязательно ставьте fk_b после CONSTRAINT, а не FOREIGN KEY.
 Tim20 авг. 2009 г., 21:35
что является самым простым способом «Определить столбец в таблице A как имеющий отношение внешнего ключа на основе первичного ключа таблицы B»

Вот как я обычно это делаю (сервер 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

Ваш ответ на вопрос