Database design 复合外键理论

Database design 复合外键理论,database-design,symfony1,doctrine,foreign-key-relationship,Database Design,Symfony1,Doctrine,Foreign Key Relationship,我不确定我是否使用了好的术语,所以我将首先尝试解释我的问题 我有一个交叉参考表,能力合作,其中包含人员与其能力之间的关联。此表有两个主键,人员id和能力id。至此,一切正常 然而,我必须添加的新功能如下:人们必须能够为其他人的能力添加评级。基本上,这意味着我必须添加一个新的表,其中将包含注释,是谁给出的,以及一个指向competencycollab表的链接。一位同事告诉我,我可以使用他所谓的“备用键”,定义两个外键,每个外键对应于competencycollab的主列,并以某种方式告诉数据库,每

我不确定我是否使用了好的术语,所以我将首先尝试解释我的问题

我有一个交叉参考表,
能力合作
,其中包含人员与其能力之间的关联。此表有两个主键,人员id和能力id。至此,一切正常

然而,我必须添加的新功能如下:人们必须能够为其他人的能力添加评级。基本上,这意味着我必须添加一个新的表,其中将包含注释,是谁给出的,以及一个指向
competencycollab
表的链接。一位同事告诉我,我可以使用他所谓的“备用键”,定义两个外键,每个外键对应于
competencycollab
的主列,并以某种方式告诉数据库,每个评级都与能力和人员相关

因此,我的问题如下:

  • 首先,这个设计看起来完全疯了吗?如果是这样,我该怎么办
  • 我必须在Symfony中使用ORM。这样的事情可以用它吗?如果是,有人能告诉我如何在YAML文件中定义它吗

谢谢你的帮助,请随意在评论中提问,我不知道我是否真的那么清楚。

这是两个问题,但我只回答第一个问题,因为我对问题中的ORM工具一无所知

我不太清楚“备用钥匙”是什么意思,但我会考虑的选择是(按优先顺序):

1) 在CompetenceCollab上定义代理主键,并使用该主键从新表创建外键

2) 在新表中同时包含人员id和能力id字段,并为CompetencyCollab创建复合外键


如果Doctrine ORM有一个合适的功能集,它至少应该处理(1),因为这是一个非常常见的场景。

我意识到这是一个老问题,但自从Docrine 2.1以来,复合外键就得到了支持。见: