我不喜欢在联结/关联表中拥有两个以上的字段(例如:pk1& pk2)。但是,我确实有这种情况,并且不确定解决它的最佳方法是什么。
表1: 合同(身份证,价格,描述)
表2: 人(id,firstname,lastname)
表3(交界/结社) person_contract(person_id,contract_id)
因此,合同可以有一个或多个人,一个人可以有一个或多个合同。因此需要结点/关联表; person_contract。
到此为止没有问题。现在每个合同的人都有一个序列来表示他们对给定合同的重要性。例如: - person1,contract1,sequence = 1 - person2,contract1,sequence = 2 - person3,contract1,sequence = 3 - person1,contract2,sequence = 2 - person4,contract2,sequence = 1
问题是在哪里保存合同的人员顺序?将序列添加到联结/关联表并不适合我。如果可能的话,我正在寻找更好的方法。
答案 0 :(得分:0)
在这种表格中包含其他字段并没有错。对于您已描述的特定方案,它实际上非常有用,因为您可以添加“排名”列,然后使用该列对与合同关联的人员进行排序,如果您要查找最重要的人员。在成功之前我使用过非常相似的模式。
从数据建模的角度考虑这一点,在实体关系术语中,这是一个关联实体。 Wikipedia对此事有所说明:
因此,如果某些数据是关于特定表建模的关系,那么它就属于该表。
我经常发现用这种东西走出数据库思维是有帮助的 - 而不是把它看作一个联结表,你可以把它想象成一组签订合同的人。您在概念上质疑的重要性数据描述了与特定合同相关的一组人员。
至于你在评论中的注释,你开始认为这可能是有问题的,因为Hibernate如何基于表格生成实体,我看到ORM工具在两个方向上创建了一些非常值得怀疑的事情(即自动生成效果不佳)数据库和自动生成的代码很差)。质疑输出 - 正如你所做的那样 - 似乎是明智的。我不知道这些问题是否可以解决,或者它是否是使用自动生成工具不可避免的成本;值得一个针对Hibernate专家的新问题,关于你是否可以让它接受这种表并仍然自动生成合适的代码。