Поле, внешний ключ, который может ссылаться на таблицы кратных значений - PullRequest
0 голосов
/ 06 июля 2011

Я разрабатываю социальную сеть для интранета, и я столкнулся с проблемой [?]. У меня есть субъекты Пользователь и Бизнес в качестве основных объектов сети.

Примечание: Бизнес не обязательно должен иметь отношения с Пользователем.

Следуя этой идее, у меня есть таблица group , и group может быть создан либо пользователем , либо business возникает вопрос, как сделать поле автора в этой таблице?

Я сделал следующее, я создал таблицу type со следующими данными:

 id | name
  1   user
  2   business

И мой стол групп вот так:

 id
 name
 description
 tid (FK -> type.id)
 author (INT)

Таким образом, если группа имеет tid, равный 1, это означает, что автор ссылается на User , если он имеет tid, равный 2, он ссылается на Бизнес .

Что вы думаете об этой реализации? Это правильно? Что я могу сделать, чтобы улучшить его?

Я использую PHP 5.3.6 (Zend Framework и Doctrine2) + MySQL 5.1.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

По запросу:

Терминология для этого "полиморфная".У Билла Карвина был хороший ответ, который я сейчас не могу найти по этому поводу.С точки зрения проектирования базы данных, мне сказали, что термин логической модели для этого является «дуговым» отношением.В любом случае, я не вижу проблем с тем, что вы опубликовали, кроме поддержки нескольких авторов.

1 голос
/ 02 апреля 2012

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

Я бы рекомендовал использовать вместо 2 таблиц.один для хранения отношений между пользователем и группой, а другой для хранения отношений между бизнесом и группой.

Это позволит вам использовать все преимущества fk, такие как каскадное удаление, при удалении группы, бизнеса или пользователя.

...