Составной внешний ключ в Доктрине - PullRequest
4 голосов
/ 20 мая 2010

Я не совсем уверен, что использую хорошие термины, поэтому сначала я попытаюсь объяснить мою проблему.

У меня есть таблица перекрестных ссылок, CompetenceCollab, содержащая связи между людьми и их компетенциями. Эта таблица имеет два первичных ключа: идентификатор пользователя и идентификатор компетенции. На данный момент все в порядке.

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

Итак, мои вопросы следующие:

  • Прежде всего, этот дизайн кажется совершенно безумным, и если это так, то как мне быть?
  • Я должен использовать Doctrine ORM в Symfony. Это возможно, используя это? Если да, может ли кто-нибудь дать мне способ определить его в файле YAML?

Спасибо за помощь, не стесняйтесь задавать вопросы в комментариях, я не знаю, был ли я действительно так ясен.

Ответы [ 2 ]

4 голосов
/ 30 апреля 2012

Я понимаю, что это старый вопрос, но составные внешние ключи поддерживаются начиная с Docrine 2.1. Смотри: http://readthedocs.org/docs/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

1 голос
/ 20 мая 2010

Это 2 вопроса, но я собираюсь ответить только на первый, потому что я ничего не знаю об инструменте ORM в этом вопросе.

Я не совсем уверен, что подразумевается под "альтернативным ключом", но я бы выбрал следующие варианты (в порядке предпочтения):

1) Определите суррогатный первичный ключ в CompetenceCollab и используйте его для создания внешнего ключа из новой таблицы

2) Иметь поле идентификатора персонала и идентификатора компетенции в новой таблице и создать составной внешний ключ для CompetenceCollab

Если в Doctrine ORM есть приличный набор функций, он должен как минимум обрабатывать (1), поскольку это довольно распространенный сценарий.

...