【问题标题】:Database Model to Represent Families, Households, and Relationships代表家庭、家庭和关系的数据库模型
【发布时间】:2015-05-08 15:53:57
【问题描述】:

这是我的情况。我正在建立一个数据库来跟踪人和家庭之间的关系。通常,一切都与“户主”相关联。

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

当模型基于 HOH 时,弄清楚如何级联数据是一个巨大的挑战。我的方法是将数据分成 3 个表,家庭、人员和关系。 hh 只存储一个地址和一个 ID。关系存储 person_id_a、person_id_b 和关系代码(即 1 = 兄弟)。 person 存储名称和 hh_id。这样,如果一个家庭分裂了,我可以将妈妈和爸爸之间的关系更改为 NULL,并为爸爸和他一起来的任何孩子创建一个新的 hh,而不会破坏其他关系。![这是模型的样子:

人 -person_id -hh_id

关系 -person_id_a -person_id_b -relationship_cd

家庭 -hh_id -地址

这对你们有意义吗?你能想出这行不通的任何原因,或者认为有更好的模型吗?

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

【问题讨论】:

  • 很酷的概念!请问您构建它的目的是什么以及您使用的是什么数据库软件? (顺便说一句,最后一行让我咯咯笑)
  • 您可能需要考虑将姓名存储在一个单独的表中,其中一个人可以有多个姓名。关于家庭,您的模型是否可以存储一个人拥有多个家庭的情况,因为这种情况并不少见(第二套住房、分割监护权等)?
  • @nivixzixer 为非营利组织工作。我们跟踪我们为个人和家庭提供的服务,并且我们正在过渡到一个新的数据库和报告系统。我不知道我们将使用什么软件。我们有一个供应商会实际建造它。
  • @hatchet 这是一个有趣的观点。不,在这个模型中,每个人一次只有一个 hh_id,如果他们无家可归,则可能没有。关于如何适应这些情况的任何想法?
  • @Ian - Person 和 Household 之间的相交表,用于创建多对多关系。一个家庭可以有很多(零个或多个)人,一个人可以有很多(零个或多个)家庭。如果需要,相交记录中的标志可以指示一个人的主要家庭。

标签: database model relationships


【解决方案1】:

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

  • 名字
  • 姓氏
  • NameType {合法,备用}

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

  • 约翰·保罗·史密斯
  • 玛丽·保罗·史密斯
  • 约翰·亨利·威廉·阿尔忒弥斯·威廉姆斯
  • 玛丽亚·德·洛杉矶戈麦斯·波蒂略
  • Abdul Rahmin ibn Saeed ibn Abd al-Aziz al-Filasteeni
  • 阿卜杜拉

那么这些名字说明了什么?第一个是很普通的英文名字,有第一个(John)、中间(Paul)和最后一个(Smith)。第二个是玛丽。她的法定姓名中没有中间名。她的婚前姓氏是保罗,婚后姓氏是史密斯。她同时使用两者,没有连字符。第三个是约翰。他的父母认为给他三个中间名会很棒。第四个是西班牙裔名字,这是她的法定全名。她的名字是玛丽亚·德·洛杉矶。 “de los Angeles”是她拳头名字的一部分。她没有中间名。她父亲的第一个姓是戈麦斯。她母亲的第一个姓是波蒂略。所以玛丽亚的全名是戈麦斯波蒂略。她通常可能只是玛丽亚戈麦斯,因为她厌倦了她的名字以错误的方式输入。从技术上讲,Portillo 是她的“姓氏”,但如果她只使用两个姓氏中的一个,她会使用第一个(父姓)。第五个是巴勒斯坦阿卜杜勒·阿齐兹的孙子赛义德的儿子阿卜杜勒·拉赫敏。把它放在第一个/中间/最后一个玩得开心。阿卜杜勒·拉赫敏是他的名字。其余的都是姓氏。最后一位是阿卜杜拉。他来自阿富汗。人们在那里没有姓氏的情况并不少见。他只是阿卜杜拉。他也不知道他的生日,因为他来自哪里,他们不在乎(这在美国殖民时代经常发生……在许多文化中关心生日是最近的事情)。

您应该有一个单独的姓名表,因此一个人可以有多个姓名行。一个例子说明了许多原因之一。玛丽史密斯讨厌她的俗名。所以她把它合法地改为宇宙的阳光棒棒糖伯爵夫人。两年后,她有点后悔。现在,她有时使用 Mary Smith,有时使用 Sunshine Universe,具体取决于月相。把它们都存起来,不管怎样,你都能找到她。

无论您怎么做,人们都会以各种可以想象的方式(还有一些您无法想象的方式)破坏名称,并在不同的时间以不同的方式输入它们。如果你不接受它作为一个给定的,你会有问题。

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

【讨论】:

  • 非常周到和有趣的回应。谢谢!
  • 您建议如何处理户主?假设每个家庭可以有零个或一个,一个人只能是一个家庭的HoH。由于人们经常搬家,这需要业务逻辑来处理重新分配。什么模型需要最少的更改业务逻辑?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2013-04-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多