gpt4 book ai didi

database - 为什么 Doctrine 只在链接表的一列上创建索引?

转载 作者:搜寻专家 更新时间:2023-10-30 20:32:29 24 4
gpt4 key购买 nike

就像stackoverflow一样,Question和Tag之间是多对多的关系。

运行这些 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 链接表中,它有助于在 TagQuestion 表之间建立多对多关系,我发现 Doctrine仅在 tag_id 列上创建了一个“正常”索引。为什么在这一列而不是在 question_id 列?我不知道。

我觉得这很奇怪,因为 Doctrine 创建的索引应该 question_idtag_id 列上,所以它应该变成“唯一”索引,而不是“普通”索引,因为 question_idtag_id 一起构成了复合主键。

我的理解对吗?如果是,为什么 Doctrine 没有以正确的方式做到这一点?

最佳答案

我相信 Doctrine 不支持复合主(或外)键。请记住,Doctrine 项目进展非常迅速,但还很年轻。一直在添加新功能,但我不认为 1.x 分支计划使用多列键。

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

关于database - 为什么 Doctrine 只在链接表的一列上创建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2424017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com