Rid*_*ous 1 mysql sql relationship
我有一个完整的大型数据库或称为 PERSONS 的人。
我想将它们彼此的关系存储在单独的表中。
我在想这样的事情:
FAMILY
PERSON_IDS: 123, 345, 678
RELATIONS: self, brother, daughter
Run Code Online (Sandbox Code Playgroud)
使用“自我”标志来指示引用关系的人。所以,在这个例子中,123 是一个男人,345 是他的兄弟,678 是一个女人,他的女儿。即,可以从关系中导出性别信息。
这是正确的方法吗?
或者每行只有 2 个人和一种关系类型会更有效吗
PERSON_IDS: 123, 456
RELATION: brother
Run Code Online (Sandbox Code Playgroud)
——
PERSON_IDS: 123, 678
RELATION: daughter
Run Code Online (Sandbox Code Playgroud)
或者每个人都有一个男性/女性字段并且关系表只指定例如“兄弟姐妹”更好。
或者我应该有一张只有 PARENTS 的表并存储 PERSON 的性别?
TABLE PARENTS:
PARENT_ID: 123
CHILD_ID: 678
Run Code Online (Sandbox Code Playgroud)
目的是在显示Person 时显示相关人员。设计应该针对性能和速度进行优化,而不是为了便于管理。
谢谢你的帮助。
这是一种多对多的关系:每个人可以有很多亲戚,也可以是很多人的亲戚。假设您的 Person 表有一个名为 的主键Id,您可以有一个表,其中包含两个人之间的关系以及他们之间的关系类型。拥有一个包含所有可能类型关系的表格会很有用,如下所示:
Relationship(Id, Kind)
Family(Person_Id, Relative_Id, Relationship_Id)
Run Code Online (Sandbox Code Playgroud)
因此,如果您有以下人员和关系表的数据:
Person: Relationship:
Id | Name Id | Kind
1 | John 1 | Father
2 | Mike 2 | Sister
3 | Susan
Run Code Online (Sandbox Code Playgroud)
以及 Family 表的以下内容:
P_Id | Rel_Id | Relation_Id
1 | 2 | 1
1 | 3 | 1
2 | 3 | 2
Run Code Online (Sandbox Code Playgroud)
家庭表上说约翰是迈克和苏珊的父亲,迈克的妹妹是苏珊。我认为这可能是一个很好的方法,但是当然,作为数据库设计中的几乎所有内容,这个解决方案是有争议的。