这是我的情况.我正在建立一个数据库来跟踪人与家庭之间的关系.通常,一切都与“户主”联系在一起.
我试图避免这种情况,因为它会在人们搬家时产生问题(即兄弟最终找到工作并搬出去)或家庭破裂(即爸爸和妈妈离婚,家庭现在分成两部分,一些孩子留在妈妈,一些和爸爸一起).
当模型基于HOH时,弄清楚如何级联数据是一个巨大的挑战.我的方法是将数据分成3个表,家庭,人和关系. ……只是存储一个地址和一个id. relationship存储person_id_a,person_id_b和关系代码(即1 =兄弟).人存储名称和hh_id.这样,如果一个家庭分手,我可以将妈妈和爸爸之间的关系改为NULL并为爸爸和任何跟随他的孩子创建一个新的……而不会破坏其他关系.![这是模型的样子:
人
-person_id
-hh_id
关系
-person_id_a
-person_id_b
-relationship_cd
家庭
-hh_id
-地址
这对你们有意义吗?你能想到任何不起作用的原因,或者认为那里有更好的模型吗?
对不起,我知道这有点令人沮丧.所有这些离婚让我的工作变得困难> 🙁
最佳答案 对于名字,我建议保持简单.有一个包含三列的名称表:
> GivenNames
> FamilyNames
> NameType {legal,alternate}
您甚至可以使用FullName的单个名称列.我不会有中间名,已婚姓名,婚前姓,父姓,昵称或任何其他“特殊”名称列.它只会使任何名称搜索算法复杂化,并混淆数据输入.以下是一些需要考虑的示例名称:
>约翰保罗史密斯
>玛丽保罗史密斯
> John Henry William Artemis Williams
>玛丽亚德洛杉矶戈麦斯波蒂略
> Abdul Rahmin ibn Saeed ibn Abd al-Aziz al-Filasteeni
>阿卜杜拉
那么这些名字显示了什么?第一个是非常正常的英文名字,第一个(约翰),中间(保罗)和最后一个(史密斯).第二个是玛丽.她的法定名称中没有中间名.她的处女姓是保罗,她的姓氏是史密斯.她使用两者,没有连字符.第三是约翰.他的父母认为给他三个中间名是很棒的.第四个是西班牙裔名字,这是她的完整法定名称.她的名字是Maria de los Angeles. “de los Angeles”是她名字的一部分.她没有中间名.她父亲的第一个姓是戈麦斯.她母亲的第一个姓氏是Portillo.玛丽亚的全名是Gomez Portillo.她可能常常只去玛丽亚戈麦斯,因为她已经厌倦了她的名字以一种错误的方式进入.从技术上讲,Portillo是她的“最后”名字,但如果她只使用她的两个姓氏中的一个,她会使用第一个(父姓).第五位是巴勒斯坦人阿卜杜勒·阿齐兹的孙子赛义德的儿子阿卜杜勒·拉赫明.把它放在第一个/中间/最后一个很有趣. Abdul Rahmin是他的名字.其余的都是姓氏.最后一个是阿卜杜拉.他来自阿富汗.人们在那里没有姓氏并不少见.他简直就是阿卜杜拉.他也不知道他的出生日期,因为他来自哪里,他们并不关心这一点(在美国殖民时期经常出现这种情况……在许多文化中,关心出生日期是一种近期的事情).
您应该有一个单独的名称表,因此一个人可以有多个名称行.一个例子说明了其中一个原因.玛丽史密斯讨厌她的俗名.因此,她将其合法地改为阳光棒棒糖宇宙伯爵夫人.两年后,她有点后悔.现在,她有时使用玛丽史密斯,有时使用阳光宇宙,取决于月亮的相位.存放它们,你找到她的方式.
无论你如何做,人们都会以各种可想象的方式(以及一些你无法想象的方式)破坏名字,并在不同的时间以不同的方式输入它们.如果你不接受这个,那你就会遇到问题.
对于家庭,正如我在评论中提到的,您可能希望支持多对多关系.一个家庭可以有零到多人,一个人可以有零到多个家庭.这有点棘手,因为它取决于你定义的家庭.你可能觉得有必要将一个人称为小学,但要考虑一个孩子花一半时间与母亲在一起,另一半与父亲在一起.哪一个是主要的?