gpt4 book ai didi

database - 在数据库表中表示人与人之间关系的适当方法是什么?

转载 作者:太空狗 更新时间:2023-10-30 01:54:47 24 4
gpt4 key购买 nike

我有一张人员表 - 一个 ID 主键和一个姓名。在我的应用程序中,人们可以与其他人建立 0 个或多个现实世界关系,因此 Jack 可能“为”Jane 工作,而 Tom 可能“取代”Tony,而 Bob 可能"is"Rob 的“员工”,而 Bob 也可能“已婚”给“玛丽。

在数据库中表示它的最佳方式是什么?多对多相交表?一系列自连接?每个关系对和类型各占一行的关系表,我可以在其中为两个方向的关系插入记录?

最佳答案

为每种类型的关系创建一个单独的多对多表。

如果您尝试在单个多对多表中表示多种类型的关系,这违反了 Fourth Normal Form .


回复评论:

实际上违反 4NF 是这样的:

Person1 Person2 Is_Employer Is_Teacher Is_Father
Tom John No No Yes

如果你有一个包含两个人和一种关系类型的三列表,那就更好了,但你仍然遇到相互关系的问题。

Person1 Person2  Rel_type
John Ann married

有些人对是否存储两行感到困惑,或者以某种一致的顺序存储两个人(例如,首先是较低的 ID 值)。但是还有一些直接的关系,比如“雇主”,其中命令意味着什么。并且存在与多个人的关系,例如“ sibling ”。

因此,组织这些关系的另一种方法是创建一个列出组的表,每行一个组,然后创建另一个表列出该组中的人员。

Group Rel_type    Group Person
123 siblings 123 Bobby
123 Peter
123 Greg
123 Cindy
123 Jan
123 Marsha

这最适合成员数量可变且互惠的关系。运动队的成员是另一个例子。它本质上是组和人员之间的多对多表。

您可能需要多种方式来存储关系,以说明所有不同的类型。

关于database - 在数据库表中表示人与人之间关系的适当方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2751152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com