Sql server 没有主实体的多对多递归关系
我曾多次需要一个链接表来处理递归关系,其中一条记录与另一条记录相比不是明确的“父”记录。下面是一个例子,我希望它能让我的问题尽可能地发自内心地展示或解释: (Person) Id Person ------------- 1 Bob 2 Sue (人) 身份证持有人 ------------- 1鲍勃 2.起诉 如果Sue是Bob的母亲,那么使用关系表是合理的: (Relationship) PersonId1 PersonId2 Relationship ---------------------------------------- 2 1 Mother/Son (关系) 人格化关系 ---------------------------------------- 2.1母亲/儿子 但如果他们是表亲,可能是: (Relationship) PersonId1 PersonId2 Relationship ----------------------------------------- 2 1 Cousin/Cousin (关系) 人格化关系 ----------------------------------------- 表亲/表亲 或 (关系) 人格化关系 --------------------------------------- 1 2表亲/表亲 这是…丑陋的…并且需要在连接和where子句中使用常量or或UNION 以下内容看起来很清晰,但非常冗长,但也许没有比这更好的了: (Relationship) Id Type ---------------------- 1 Cousin/Cousin (Relationship_Person) RelationshipId PersonId --------------------------- 1 1 1 2 (关系) Id类型 ---------------------- 1表亲/表亲 (关系人) 关系型人格 --------------------------- 1 1 1 2 有更好的模式吗Sql server 没有主实体的多对多递归关系,sql-server,database-design,Sql Server,Database Design,我曾多次需要一个链接表来处理递归关系,其中一条记录与另一条记录相比不是明确的“父”记录。下面是一个例子,我希望它能让我的问题尽可能地发自内心地展示或解释: (Person) Id Person ------------- 1 Bob 2 Sue (人) 身份证持有人 ------------- 1鲍勃 2.起诉 如果Sue是Bob的母亲,那么使用关系表是合理的: (Relationship) PersonId1 PersonId2 Relationship -----
提前谢谢你 也许这应该是一个注释,但我认为在第一种情况下,您应该有两行:
PersonId1 PersonId2 Relationship
---------------------------------------
1 2 Son
2 1 Mother
那么,更合理的做法是:
PersonId1 PersonId2 Relationship
---------------------------------------
1 2 Cousin
2 1 Cousin
您需要三个键值,一个用于Person(PID),一个用于Relationship Type(RTID),一个用于将关系分组在一起(RID) 一旦建立了一个新的关系组,就可以简单地向关系中添加新成员,而不会影响其他成员,而且在无界关系(如表兄妹关系)中没有笛卡尔积。每个人参与的每个关系都有一行,而不管该关系的成员数量如何
你也可以考虑处理出生和死亡以及婚姻/离婚的有效和有效期限。
谢谢韦斯花了这么多时间来更清晰地重申我的第二个思路。我仍然希望有人可能有一个更简单的链接模式,但它可能不存在(甚至可能不存在)。(Person)->(RelationshipPersonLink)->(RelationshipPersonLink)->(RelationshipPersonLink)->(Person)就是这么多“跳跃”来查看所有连接。我当然意识到我可以把它放到一个视图中,并为它确定一个完美的索引……在这个想象中的“家庭”示例中,它似乎不是什么大不了的事,但是,如果我深入到十几个关系层,查看所有连接的组件,在一个调用中使用四跳多对多链接递归,将此模式应用于其他用途,会感觉。。。。。沉重?…呃…低效?…嗯…复杂。我知道,这些都是非常不科学的解释。戈登起初当我看到你的评论时,我想是的,嗯,这就是我的问题的丑陋之处。但是,尽管这感觉像是裁员部门,而且在每次大学考试中都是错误的答案……我认为这可能是正确的K.I.S.S.答案,即使它违反了许多标准化规则。谢谢你我很惊讶/震惊我在考虑这个!PersonId1 PersonId2 Relationship
---------------------------------------
1 2 Cousin
2 1 Cousin
RID RTID PID
1 1 (Mother) 1 (Mary)
1 2 (Son) 2 (Joe)
2 3 (Cousin) 2 (Joe)
2 3 3 (Sue)
2 3 4 (Carl)
1 2 (Son) 5 (Chris)
1 4 (Daughter) 6 (Kathy)
2 3 (Cousin) 5 (Chris)
2 3 6 (Kathy)
1 5 (Father) 7 (Rick)