表示家庭、家庭和关系的数据库模型

标签 database model relationships

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

我正在努力避免这种情况,因为当人们搬家(即兄弟最终找到工作并搬出去)或家庭破裂(即爸爸妈妈离婚,家庭现在一分为二,一些 child 留在妈妈,一些和爸爸)。

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

人 -person_id -hh_id

关系 -person_id_a -person_id_b -relationship_cd

家庭 -hh_id -地址

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

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

最佳答案

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

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

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

  • 约翰·保罗·史密斯
  • 玛丽·保罗·史密斯
  • 约翰·亨利·威廉·阿尔忒弥斯·威廉姆斯
  • Maria de los Angeles Gomez Portillo
  • 阿卜杜勒·拉赫明·伊本·赛义德·伊本·阿卜杜勒·阿齐兹·菲拉斯提尼
  • 阿卜杜拉

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

您应该有一个单独的姓名表,这样一个人可以有多个姓名行。一个例子说明了很多很多原因之一。玛丽史密斯讨厌她的俗名。所以她把它合法地改成了阳光 Lollipop 宇宙伯爵夫人。两年后她有点后悔了。现在,她有时使用 Mary Smith,有时使用 Sunshine Universe,具体取决于月相。将它们都存储起来,您可以通过任何一种方式找到她。

无论您如何操作,人们都会以各种可以想象的方式(有些是您无法想象的)篡改名称,并在不同的时间以不同的方式输入它们。如果你不接受它作为给定的,你就会有问题。

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

关于表示家庭、家庭和关系的数据库模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128025/

相关文章:

database - 如何在 Grails 中使用 Hibernate 索引?

database - 加密存储在数据库中的用户名是否有益?

sql - 翻译词典 - 选择翻译的子集

javascript - MVC : Calling Javascript function in View without any HTML control

php - laravel 4 如何检索登录用户数据

sql - 如何将写入与读取分开以最大程度地减少大量读取查询的影响?

android - 未处理的异常 : NoSuchMethodError while setting values in setter in Model class

javascript - Sails.js 中的模型验证失败

iphone - 没有 KVC 的 RestKit 对象映射关系

c# - 在 Monotouch 中使用 CoolStorage 的映射问题