2010-10-13 1 views
0

Если у меня есть первичный ключ в таблице A и в таблице B той же базы данных (таблица B имеет свой собственный первичный ключ), я создаю связь с первичным ключом в таблице A, чтобы столбец в таблице B есть внешний ключ, означает ли это, что данные первичного ключа, созданные в столбце первичного ключа таблицы A, также будут добавлены в таблицу B из-за того, что он является столбцом внешнего ключа или мне нужно закодировать это отношение, и если да, то как мне это сделать?Клавиши SQL Server и внешние ключи

ответ

3

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

... должен ли я кодировать это отношений, и если да, то как мне пойти об этом?

Необходимо определить отношения между двумя таблицами. Пример:

ALTER TABLE tableB 
ADD CONSTRAINT FK_tableB_TableA FOREIGN KEY (tableAId) 
    REFERENCES tableA (id) ; 

Когда вы вставляете запись в tableB, вам все равно необходимо определить tableAId. SQL Server не знает, как это должно быть.

Так гипотетически, если TABLEA выглядел следующим образом:

1 | Some text | 1/1/2020 
2 | blah blah | 6/1/2021 

Чтобы вставить запись в TableB, что ссылочного запись 2 вам нужно будет сделать это:

INSERT INTO TableB (2,'My important information') 

Это предполагает TableB имеет следующую структуру :

TableB 
--------- 
Id --identity column/pk 
tableAId --fk 
SomeTextColumn 
+0

благодарит вас за быстрые ответы, я думаю, что понимаю это сейчас. – simon

0

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

Вот пример: у автора таблицы есть поля id и name.

INSERT author (id, name) VALUES (5, 'James Joyce') 

Теперь настольная книга имеет поля id, author_id и title.

INSERT book (id, author_id, title) VALUES(99, 5, 'Ulysses') 

Если id поле автора автоматически генерируется, то вы бы не указать в заявлении вставки, и вы бы получить его значение с помощью @@IDENTITY property.

1

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

Неа, foriegn ключи не будут введите данные в другие таблицы. Вам понадобится запись в таблице A, прежде чем вставлять запись, ссылающуюся на этот ключ foriegn в таблице B.

Q # 2: или мне нужно закодировать эти отношения, и если да, то как это сделать?

вставки в TABLEA, а затем вставить в таблицу В. Триггер может быть поставлен на TableA, чтобы вставить запись в TableB, когда данные были введены в TABLEA бы вы хотели ...