Почему Doctrine создает индекс только для одного столбца в таблице ссылок?

Как и в случае с stackoverflow, между вопросом и тегом существует связь «многие ко многим».

После запуска этих команд Symfony:

./symfony doctrine:drop-db
./symfony doctrine:build-db
./symfony doctrine:build-model
./symfony doctrine:build-sql
./symfony doctrine:insert-sql

По следующей схеме:

schema.yml

Tag:
 columns:
   name:
     type: string(10)
     notnull: true
 relations:
     Questions:
       class: Question
       foreignAlias: Tags
       refClass: QuestionTag

Question:
  columns:
    html:
     type: string(1000)
  relations:
     Tags:
       class: Tag
       foreignAlias: Questions
       refClass: QuestionTag

QuestionTag:
  columns:
    question_id:
     type: integer     
     primary: true
    tag_id:
      type: integer      
      primary: true
  relations:
    Question:
      class: Question
      foreignAlias: QuestionTags
      type: many
      foreignType: one
    Tag:
      class: Tag
      foreignAlias: QuestionTags
      type: many
      foreignType: one

В таблице связывания QuestionTag, которая помогает установить отношение «многие ко многим» между таблицами Tag и Question, я обнаружил, что Doctrine создала «обычный» индекс только для столбца tag_id. Почему в этом столбце, а не в столбце question_id? Я не знаю.

Я думаю, что это странно, потому что индекс, который создает Doctrine, должен быть по обоим столбцам question_id и tag_id, и поэтому он должен стать «уникальным» индексом, а не «обычным», потому что question_id и tag_id вместе образуют составной первичный ключ.

Правильно ли я понимаю? Если да, то почему Doctrine не делает это правильно?


person bobo    schedule 11.03.2010    source источник
comment
почему бы просто не определить ПК и индексы вручную?   -  person Andrei Dziahel    schedule 12.03.2010


Ответы (2)


Я считаю, что Doctrine не поддерживает составные первичные (или внешние) ключи. Помните, что проект Doctrine развивается чрезвычайно быстро, но он все еще довольно молод. Новые функции добавляются постоянно, хотя я не думаю, что ключи с несколькими столбцами запланированы для ветки 1.x.

Обходным путем может быть создание уникального столбца первичного ключа, question_tag_id, в качестве одного из 3 полей в таблице QuestionTag.

person Raise    schedule 11.03.2010

Если я правильно понимаю ваш код, вам не следует снова определять отношения в таблице QuestionTag.

И также можно создать индекс для двух столбцов вручную (просто определите его в своей схеме), хотя я не видел, как применить уникальное ограничение для двух столбцов в Doctrine.

person Tom    schedule 11.03.2010