代码之家  ›  专栏  ›  技术社区  ›  bobo

为什么条令只在链接表的一列上创建索引?

  •  2
  • bobo  · 技术社区  · 15 年前

    就像stackoverflow一样,问号和标签之间有一种多对多的关系。

    运行这些symfony命令后:

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

    使用以下架构:

    Simul.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 表中,我发现条令只在 tag_id 列。为什么在这个专栏上,而不是在 question_id 专栏?我不知道。

    我认为这很奇怪,因为教义创造的指数应该是 两者兼而有之 疑问句 塔吉德 列,因此它应该成为“唯一”索引,而不是“普通”索引,因为 疑问句 塔吉德 一起构成复合主键。

    我的理解正确吗? 如果是的,为什么教义不以正确的方式来做呢?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Raise    15 年前

    我认为该原则不支持复合主键(或外键)。记住,教义项目进展非常迅速,但它还相当年轻。尽管我不认为1.x分支计划使用多列键,但新功能一直在被添加。

    解决方法是创建一个唯一的主键列question_tag_id,作为question tag表中的3个字段之一。

        2
  •  0
  •   Tom    15 年前

    如果我正确地阅读了您的代码,您不应该在questiontag表中再次定义关系。

    也可以手动在两列上创建索引(只需在模式中定义它),尽管我还没有看到如何在条令中对两列应用唯一约束。