不同实体的相同To-Many-Relationship

时间:2016-04-29 08:05:03

标签: database-design doctrine-orm

这可能是很多人遇到的问题,但到目前为止我还没有找到一个非常令人满意的答案,也许还没有一个完美的解决方案。

我有很多实体,比如说:红色,绿色,蓝色,黄色...... 所有这些实体都没有任何共同之处,但我们假设我想拥有一些实体" User"负责这些实体,我想在我的数据模型中实现这种关系。

所以最自然的解决方案是创建一对To-Many-Relationships,例如: RedToUser(使用外键user_id和red_id),YellowToUser(使用外键user_id和yellow_id)等等。

虽然这是一个非常明确的解决方案,但由于我有很多种颜色,因此它并不具有说服力。除了我的外键' color_id'之外,与User的关系看起来总是一样的。感觉就像一遍又一遍地重复自己。

有没有最佳实践解决方案来设计这样的东西?

1 个答案:

答案 0 :(得分:0)

在数据模型术语中,所有这些Red,Green,...实体都具有超级性,比如说AttendedObject与用户实体有m:n的关系。

为了将这些超级构造映射到关系表,有不同的方法详细描述,例如,在https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html。对于像你这样的简单案例,我只用一个鉴别器定义一个表,告诉用户参与哪种类型的实体,如

Attendance(id, user_id, object_id, discriminator, ...)

其中鉴别器采用红色,绿色等值