在Doctrine中复合外键

时间:2010-05-20 13:41:17

标签: database-design symfony1 doctrine foreign-key-relationship

我不确定我是否使用了良好的条款,所以我会首先尝试解释我的问题。

我有一个交叉引用表CompetenceCollab,其中包含人与其能力之间的关联。此表有两个主键,人员ID和权限ID。到目前为止,一切都还可以。

但是,我必须添加的新功能如下:人们必须能够为其他人的能力添加评级。基本上,这意味着我必须添加一个新表,其中包含提供它的注释,以及某种方式指向CompetenceCollab表的链接。一位同事告诉我,我可以使用他所谓的“备用密钥”,定义两个外键,每个主要列CompetenceCollab一个,并以某种方式告诉数据库每个评级与能力和人员相关联。

所以我的问题如下:

  • 首先,这个设计看起来很疯狂,如果是这样,我该怎么办?
  • 我必须在Symfony中使用Doctrine ORM。这种事情有可能使用吗?如果是,有人可以为我提供如何在YAML文件中定义它的方法吗?

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

2 个答案:

答案 0 :(得分:4)

我意识到这是一个老问题,但自Docrine 2.1以来支持复合外键。请参阅:http://readthedocs.org/docs/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

答案 1 :(得分:1)

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

我不确定“替代密钥”是什么意思,但我会考虑的选择(按优先顺序排列):

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

2)在新表中同时拥有一个人员ID和能力id字段,并为CompetenceCollab创建一个复合外键

如果Doctrine ORM有一个不错的功能集,它至少应该处理(1),因为这是一种非常常见的情况。