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

Я не интересуюсь использованием его для управления версиями исходного кода, но я интересуюсь распределенной управляемой версией персональной Wiki, которую я могу синхронизировать между всеми машинами, которые я использую.

49
задан Tim 13 October 2015 в 22:43
поделиться

5 ответов

  1. Определите две таблицы (пример A и B) с их собственным первичным ключом
  2. Определите столбец в таблице 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
78
ответ дан 7 November 2019 в 11:22
поделиться

Это это простой пример классического примера заказа. У каждого клиента может быть несколько заказов , и каждый заказ может состоять из нескольких OrderLine s.

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

enter image description here

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

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

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

Foreign key constraint

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

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

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

59
ответ дан 7 November 2019 в 11:22
поделиться

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

1
ответ дан 7 November 2019 в 11:22
поделиться

Я обычно это делаю (sql server).

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

3
ответ дан 7 November 2019 в 11:22
поделиться

Если вы не используете 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

1
ответ дан 7 November 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: