如何在数据库中保存婚姻关系

时间:2010-12-07 15:50:40

标签: mysql database database-design entity-relationship relational-database

我必须将此信息保存在数据库中

人 - >结婚了 - >人

我应该在哪里保存这些信息?我应该在这里应用什么样的设计模式?

谢谢!

6 个答案:

答案 0 :(得分:4)

如果你只能嫁给一个人:1:1

-------------
- Person    -
-------------
id (key)
maried_to_id (foreign key)

如果您可以与多人结婚或想跟踪以前的婚姻,n:n

-------------
- Person    -
-------------
person_id (key)

-------------
- Mariage   -
-------------
first_person_id (foreign key)
second_person_id (foreign key)
start_date
end_date

(也是first_person_id + second_person_id +日期形成一个唯一的婚姻关键。你可以省略日期,但不会跟踪再婚)

答案 1 :(得分:2)

这是您可以使用的假设模式。所有人都在一张桌子里,每个人都有一个独特的身份证。婚姻在关系表中,带有外键。

PERSONS
- ID - INTEGER, PK
- FIRSTNAME - VARCHAR(20)
- LASTNAME - VARCHAR(20)
- SEX - CHAR(1)
- ... any other fields

MARRIAGES
- PERSON1_ID - INTEGER, FK
- PERSON2_ID - INTEGER, FK
- MARRIAGE_DATE - DATE
- ANULLMENT_DATE - DATE
- ... any other fields

答案 2 :(得分:1)

这对于教学模式设计来说是一个很好的问题。看似简单的问题很容易变得非常复杂:

,例如,如何处理:
  - 两人以上的婚姻   - 不同类型的婚姻(法律,宗教,其他)
  - 并发婚姻
  - 重复婚姻
  - 离婚   - 自我婚姻(嘿,它发生在欢乐合唱团!)

诀窍,如果有的话,就是要仔细考虑你想要建模的所有排列。只有这样,你才能真正开始模拟它。

答案 3 :(得分:0)

我会推荐以下结构 可以说表名是Person。

  1. PersonId(int,Key)
  2. MarriedTo(int, 可为空的)
  3. .....

    无需创建外键关系。

答案 4 :(得分:0)

您可以使用“人物”表中的“配偶”列进行此操作,该列可以为空(对于未婚人士的情况)。

如果已婚,则持有另一个人的身份,就像外国人一样。

更好的解决方案是单独的“婚姻”表,其中至少有三列:

MarriageId
Person1Id
Person2Id
...

人员ID是“人员”表中的外键,您应该将MarriageId,Person1Id和Person2Id的组合设为唯一,以避免添加人员交换的行。

虽然应该指出这两种模式都是非常基本的,并且可以假设一个婚姻中可以有多少人;)

答案 5 :(得分:0)

这听起来像是用于简单的查找表 - 重要的部分是有两个字段,一个是Person1的ID字段的外键,另一个是Person2的ID字段的外键。关于婚姻的任何细节(日期,是否仍然是当前等)也将存储在此表中。

这将有助于人们有多重婚姻,一夫多妻关系等等。如果你想要一个简单的1:1关系,你可以在person字段中包含对配偶的外键引用,但它的灵活性会大大降低。