用于表示家庭,家庭和关系的数据库模型

时间:2015-05-08 15:53:58

标签: database model relationships

这是我的情况。我正在建立一个数据库来跟踪人与家庭之间的关系。通常情况下,一切都与家庭主管和#34;有关。

我试图避免这种情况,因为它会在人们搬家时产生问题(即兄弟最终找到工作并搬出去)或家庭破裂(即爸爸和妈妈离婚,家庭现在分成两部分,一些孩子留下来妈妈,有些和爸爸一起)。

当模型基于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 -address

这对你们有意义吗?你能想到任何不起作用的原因,或者认为那里有更好的模型吗?

对不起,我知道这有点令人沮丧。所有这些离婚让我的工作变得困难> :(

1 个答案:

答案 0 :(得分:2)

对于名字,我建议保持简单。有一个包含三列的名称表:

  • GivenNames
  • FamilyNames
  • NameType {legal,alternate}

您甚至可以使用FullName的单个名称列。我不会有中间名,已婚姓名,婚前姓,父姓,昵称或其他任何特殊的"名称列。它只会使任何名称搜索算法复杂化,并混淆数据输入。以下是一些需要考虑的示例名称:

  • John Paul Smith
  • Mary Paul Smith
  • John Henry William Artemis Williams
  • Maria de los Angeles Gomez Portillo
  • Abdul Rahmin ibn Saeed ibn Abd al-Aziz al-Filasteeni
  • 阿卜杜拉

那么这些名字显示了什么?第一个是非常正常的英文名字,第一个(约翰),中间(保罗)和最后一个(史密斯)。第二个是玛丽。她的法定名称中没有中间名。她的处女姓是保罗,她的姓氏是史密斯。她使用两者,没有连字符。第三是约翰。他的父母认为给他三个中间名是很棒的。第四个是西班牙裔名字,这是她的完整法定名称。她的名字是Maria de los Angeles。 " de los Angeles"是她的拳头名字的一部分。她没有中间名。她父亲的第一个姓是戈麦斯。她母亲的第一个姓氏是Portillo。玛丽亚的全名是Gomez Portillo。她可能常常只是玛丽亚·戈麦斯(Maria Gomez),因为她已经厌倦了她的名字以错误的方式进入。从技术上讲,Portillo是她的最后一个"名字,但如果她只使用她的两个姓氏中的一个,她会使用第一个(父姓)。第五位是巴勒斯坦人阿卜杜勒·阿齐兹的孙子赛义德的儿子阿卜杜勒·拉赫明。把它放在第一个/中间/最后一个很有趣。 Abdul Rahmin是他的名字。其余的都是姓氏。最后一个是阿卜杜拉。他来自阿富汗。人们在那里没有姓氏并不罕见。他简直就是阿卜杜拉。他也不知道他的出生日期,因为他来自哪里,他们不关心这一点(在美国殖民时期经常出现这样的情况......关心出生日期是许多人最近的事情。培养物)。

您应该有一个单独的名称表,因此一个人可以拥有多个名称行。一个例子说明了其中一个原因。玛丽史密斯讨厌她的俗名。因此,她将其合法地改为阳光棒棒糖宇宙伯爵夫人。两年后,她有点后悔。现在,她有时使用玛丽史密斯,有时使用阳光宇宙,取决于月亮的相位。存放它们,你就可以找到她。

然而,如果你这样做,人们会以各种可想象的方式破坏名字(有些你不会想象),并在不同时间输入不同的名字。如果您不接受这一点,那么您将遇到问题。

对于家庭,正如我在评论中提到的,您可能希望支持多对多关系。一个家庭可以有零到多人,一个人可以有零到多个家庭。这有点棘手,因为它取决于你定义的家庭。你可能觉得有必要将一个人称为小学,但要考虑一个孩子花一半时间与母亲在一起,另一半与父亲在一起。哪一个是主要的?