2010-03-11 42 views
2

就像stackoverflow,問題和標籤之間有多對多的關係。爲什麼Doctrine僅在鏈接表中的一列創建索引?

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

下面的模式:

運行這些命令的symfony後

的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連結表,這有助於建立多對一TagQuestion表之間的一對多關係d,Doctrine只在tag_id列中創建了一個「正常」索引。爲什麼在這個列上,但不在question_id列?我不知道。

我覺得這很奇怪,因爲這種理論創建索引應該兩個question_idtag_id列,因此它應該成爲一個「獨一無二」的索​​引,而不是一個「正常」的一個,因爲question_idtag_id一起形成複合主鍵。

我的理解是否正確? 如果是的話,爲什麼沒有教條正確的方式呢?

+0

爲什麼不只是手動定義PK和索引? – develop7 2010-03-12 13:05:24

回答

2

我相信Doctrine不支持複合主鍵(或外鍵)。請記住,該教義項目正在快速發展,但仍然相當年輕。雖然我不認爲多列鍵是爲1.x分支計劃的,但新功能一直在增加。

解決方法是創建一個唯一的主鍵列question_tag_id,作爲QuestionTag表中的3個字段之一。

0

如果我正確閱讀你的代碼,你不應該再次在你的QuestionTag表中定義關係。

也可以手動創建兩列的索引(只需在模式中定義它),儘管我還沒有看到如何在Doctrine中的兩列上應用唯一約束。

相關問題