Обычный способ установить ограничение внешнего ключа состоит в том, чтобы выбрать, которые представляют внешний ключ в виде таблицы, укажет на.
У меня есть полиморфное отношение между 1 таблицей и рядом таблицы.
Это означает, что эта таблица будет иметь отношение с одной из тех таблиц в наборе.
например.
images: person_id, person_type
subordinates: id, col1, col2...col9
products: id, colA, colB...colZ
В вышеупомянутом примере, если person_type является "подчиненными" затем, person_id должен быть внешним ключом к subordinates.id, и то же идет с продуктами.
Так интересно, это возможный иметь внешний ключ к одной из многих таблиц или сделать Вас должно конкретно установить, на какую таблицу это указывает на то, когда Вы присваиваете тот.
Этот вопрос и для MySQL и для PostgreSQL.
Спасибо
Нет, ограничение внешнего ключа всегда ссылается только на одну родительскую таблицу.
Этот вопрос возникает часто. Вот некоторые из моих прошлых ответов на него:
Для получения дополнительной информации о полиморфных ассоциациях, см. мою презентацию Практические объектно-ориентированные модели в SQL или мою книгу Антипаттерны SQL: избегая ловушек программирования баз данных .
Внешний ключ по определению должен указывать либо на первичный ключ, либо на ключ кандидата в единственной таблице - только первичный доступен в типичной СУБД. Вам лучше иметь одну таблицу с людьми и таблицы, связанные с этим, например, информация менеджера.
Столбец - это только заполнитель для значения. Ограничение внешнего ключа означает, что данные, хранящиеся в этом столбце, могут быть только значением, которое соответствует столбцу таблицы, определенному в ограничении. Ограничения внешнего ключа для каждой таблицы ...
Ничто не мешает вам определить несколько ограничений внешнего ключа для столбца. Но это означает, что единственное значение, разрешенное для сохранения, - это значения, которые уже существуют во всех других внешних связанных таблицах. IE: TABLE_1 имеет значения 1 и 2, TABLE_2 имеет значения 2 и 3 - TABLE_3 имеет отношения внешнего ключа, определенные для таблиц 1 и 2 в столбце TABLE_3 col
... Единственное допустимое значение, которое я могу вставить в ] TABLE_3.col
равен 2, потому что он находится в обеих таблицах (при условии, что col
не допускает значения NULL).
Внешний ключ может указывать только на одну таблицу.
Мне кажется, что вы действительно хотели здесь создать родительский идентификатор в своей таблице лиц. У подчиненных будет родительский идентификатор, указывающий на их менеджеров. Если у подчиненного должно быть несколько менеджеров, можно создать отдельную объединяющую таблицу с двумя столбцами, каждая из которых содержит идентификатор человека, один из которых является подчиненным, а другой - одним из менеджеров.
Если вы хотите ограничить, кто может быть назначен родительскому полю, это можно сделать с помощью ограничения проверки.