1

我有一个完整的大型数据库或称为 PERSONS 的人。

我想将他们彼此的关系存储在一个单独的表中。

我在想这样的事情:

FAMILY
PERSON_IDS: 123, 345, 678
RELATIONS:  self, brother, daughter

使用“自我”标志来指示引用关系的人。因此,在示例中,123 是一个男人,345 是他的兄弟,678 是一个女人,他的女儿。即,可以从关系中导出性别信息。

这是正确的方法吗?

或者每行只有 2 个人和一种关系类型会更有效吗

PERSON_IDS: 123, 456
RELATION: brother

-

PERSON_IDS: 123, 678
RELATION: daughter

或者每个人有一个男性/女性字段并且关系表只指定例如“兄弟姐妹”是否更好。

或者我应该有一张只有父母的桌子,并用人来存储性别?

TABLE PARENTS:
PARENT_ID: 123
CHILD_ID: 678

目的是在显示 Person 时显示相关人员。设计应该针对性能和速度而不是易于管理进行优化。

谢谢你的帮助。

4

1 回答 1

6

这是一个多对多的关系:每个人可以有很多亲戚,也可以是很多人的亲戚。假设您的 Person 表有一个名为 的主键Id,您可以有一个表,它保存两个人之间的关系以及他们之间的关系类型。拥有一个包含所有可能类型关系的表会很有用,如下所示:

Relationship(Id, Kind)
Family(Person_Id, Relative_Id, Relationship_Id)

因此,如果您有以下人员和关系表数据:

Person:             Relationship:
Id | Name           Id | Kind
 1 | John            1 | Father
 2 | Mike            2 | Sister
 3 | Susan

以及家庭表的以下内容:

P_Id | Rel_Id | Relation_Id
 1   |   2    |      1
 1   |   3    |      1
 2   |   3    |      2

家庭表说约翰是迈克和苏珊的父亲,迈克的妹妹是苏珊。我认为这可能是一个好方法,但当然,就像数据库设计中的几乎所有内容一样,这个解决方案是有争议的。

于 2013-04-06T14:16:29.193 回答