gpt4 book ai didi

mysql - 接近sql家谱的想法(mysql)

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:02 26 4
gpt4 key购买 nike

我目前在我的 mysql 数据库中有 100k+ 条记录来定义一个人。一个人有一个 ID、一个 fatherID、一个 motherID 和一个 partnerID。

我想为每条记录添加 treeID,这样我就可以区分未连接的家庭。虽然我似乎无法找到一个好的方法,尤其是在 mysql 的限制下。

如果有什么好主意,请赐教:)

最佳答案

很多工作已经投入到系谱数据结构中。看看GEDCOM标准以及它们如何定义和连接各种数据元素。这些对象往往存储在平面文件而不是数据库中,但对象仍然具有相当相关的结构。

一般来说,它比您当前的结构所表达的要复杂一点。但是如果你提取一个稍微不同的实体结构,它就会开始很好地结合在一起。目前你有一个 Person,它应该知道所有关于它的连接。相反,将连接本身变成一个结构。像这样:

Person
----------
ID
Name
etc.

Family
----------
FatherID
MotherID

Child
----------
FamilyID
PersonID

这应该至少在基本层面上涵盖血缘关系。可以安全地假设任何给定的人都是由一位父亲和一位母亲创造的。他们目前的家庭结构可能大不相同,但生育 child 的实际行为非常标准且有据可查。对于父亲或母亲未知的家庭,这些列可以为空。

您可以从那里扩展结构以包含其他功能。例如,也许一个人出生于一个家庭,但被收养到另一个家庭。然后您可以将类型标志添加到 Child 表:

Child
----------
FamilyID
PersonID
TypeID

类型可能包括出生、收养、教父等。要包括由同性伴侣抚养的 child ,您可以重命名 Family 字段:

Family
----------
Parent1ID
Parent2ID

如果您将Gender 添加到Person,那么您可以在必要时推断出“父亲”和“母亲”。 (对于在任何给定时间有两个以上 parent 的家庭,我想会更有想象力。)这也可以处理死亡/离婚和再婚的家庭。 Person 可以是多个 Family 实体的 Child,具有不同的 Type 标志。并且 Person 可以是多个 Family 实体中的 Parent,也许还有其他区别数据。

此类区分数据可能包括事件日期。也许是这样的:

FamilyEvent
----------
ID
EventTypeID
FamilyID
DateOccurred

因此,家庭 可能有“婚姻”事件,也可能没有。可能会发生“离婚”事件。等等。 Person 可以有事件,例如“出生”和“死亡”(以及介于两者之间的任意数量的重要事件)也是合理的:

PersonEvent
----------
ID
EventTypeID
PersonID
DateOccurred

(您可以使用表子类型来概括一点,但我认为没有必要。引入的复杂性会使进一步扩展变得更加困难,相信我,当您发现文化时,这可以进一步扩展很多在一个非常大的谱系结构中,人与家庭之间存在差异。)

关于mysql - 接近sql家谱的想法(mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22114313/

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