2011-02-01 11 views
2

В соединении от одного до большого между родительским столом и дочерним столом.Наличие внешнего ключа в качестве первичного ключа в дочернем таблице

Можно ли сделать внешний ключ на таблице «Дети» основным ключом на той же дочерней таблице.

Просто работаю через СУБД и буду благодарен экспертным взглядам на эти типы конструкций.

Зачем и что?

+1

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

ответ

6

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

+0

Цените ответ! прямо на кнопке! Большое спасибо! Итак, просто повторите попытку. Такой дизайн будет работать только в случае отношений 1 к 1, как объяснил Адам Робинсон? –

+1

@ Jasdeep: Чтобы быть точным, 1: 0-1, а не 1: 1 (соотношение 1: 1 невозможно обеспечить в базе данных, так как обе стороны должны были бы создаваться одновременно, что невозможно) –

4

Это создало бы связь 1: 0-1, а не 1: 0-n, поскольку определял внешний ключ, который связывает ребенка с родителем, поскольку первичный ключ ребенка предотвратит вас из более чем одного ребенка с один и тот же родительский ключ.

Смежные вопросы