Как и в случае с 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 не делает это правильно?