Внешний ключ к одной из многих таблиц?

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

У меня есть полиморфное отношение между 1 таблицей и рядом таблицы.

Это означает, что эта таблица будет иметь отношение с одной из тех таблиц в наборе.

например.

images: person_id, person_type
subordinates: id, col1, col2...col9
products: id, colA, colB...colZ

В вышеупомянутом примере, если person_type является "подчиненными" затем, person_id должен быть внешним ключом к subordinates.id, и то же идет с продуктами.

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

Этот вопрос и для MySQL и для PostgreSQL.

Спасибо

17
задан never_had_a_name 1 August 2010 в 19:22
поделиться

4 ответа

43
ответ дан 30 November 2019 в 10:53
поделиться

Внешний ключ по определению должен указывать либо на первичный ключ, либо на ключ кандидата в единственной таблице - только первичный доступен в типичной СУБД. Вам лучше иметь одну таблицу с людьми и таблицы, связанные с этим, например, информация менеджера.

2
ответ дан 30 November 2019 в 10:53
поделиться

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

Ничто не мешает вам определить несколько ограничений внешнего ключа для столбца. Но это означает, что единственное значение, разрешенное для сохранения, - это значения, которые уже существуют во всех других внешних связанных таблицах. IE: TABLE_1 имеет значения 1 и 2, TABLE_2 имеет значения 2 и 3 - TABLE_3 имеет отношения внешнего ключа, определенные для таблиц 1 и 2 в столбце TABLE_3 col ... Единственное допустимое значение, которое я могу вставить в ] TABLE_3.col равен 2, потому что он находится в обеих таблицах (при условии, что col не допускает значения NULL).

1
ответ дан 30 November 2019 в 10:53
поделиться

Внешний ключ может указывать только на одну таблицу.

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

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

1
ответ дан 30 November 2019 в 10:53
поделиться
Другие вопросы по тегам:

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