Могу ли я один и тот же столбец представлять внешний ключ для нескольких таблиц? - PullRequest
0 голосов
/ 19 октября 2010

Я пытаюсь использовать один и тот же столбец для представления внешнего ключа для разных столбцов.Это связано с тем, что с помощью этого столбца может быть проиндексировано произвольное количество таблиц.
В настоящее время моя идея состоит в том, чтобы использовать небольшое поле varchar () для представления того, какое поле они индексируют, а затем проверить их, возможно, на-запрос для всех, которые соответствуют данному полю, а затем запрос на основе идентификатора?
Является ли это хорошим методом, который будет использовать преимущества индексации MySQL?
Есть ли другие лучшие способы сделать это?

Ответы [ 4 ]

0 голосов
/ 20 октября 2010

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

Это обычный метод моделирования модели gen-spec в реляционной модели.

0 голосов
/ 20 октября 2010

Создание таблицы «супертипа», которая объединяет ключи из других таблиц Этот пример может помочь:

http://consultingblogs.emc.com/davidportas/archive/2007/01/08/Distributed-Keys-and-Disjoint-Subtypes.aspx

0 голосов
/ 20 октября 2010

Я обычно использую решение Abba для такого рода проблем в отношениях один-ко-многим. Используйте поле type , чтобы определить таблицу, к которой относится внешний ключ.

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

0 голосов
/ 19 октября 2010

Проверьте http://github.com/Theaxiom/Polymorphic2.0 Полиморфное поведение.

Вы используете 2 поля для представления соединения с любой другой таблицей. Одно поле содержит ModelName связанной модели, а другое - произвольное значение foreign_id.

...