Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: boboОтветов: 2

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

  • почему бы просто не определить ПК и индексы вручную? Andrei Dziahel 12.03.2010

databasedatabase-designdoctrinesymfony1

Ответы

Ответ 1 · рейтинг 2 · Raise

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

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

Ответ 2 · Tom

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы