如何制作成人和儿童的标准化表格?

时间:2015-07-09 00:28:52

标签: sql database database-design

成年人可能有零个或多个侄子和侄女。孩子可能有零或多个阿姨和叔叔。如果所有成人和儿童都存放在一张桌子上,该模型如何规范?

这是一个测试问题我错了,想澄清一下。提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果这与问题的措辞类似,我想知道它是否部分是一个技巧问题。

  

所有成人和儿童都存放在一张桌子上

也就是说,所有人的信息都需要在一个表中,但它们之间的关系不一定是必须的?

Person
---
personId PK
gender
dateOfBirth
firstName
lastName

PersonRelationship
---
id PK -- not really needed, i just like simple primary keys
personId FK -- always the elder
descendantId FK -- always the youngling

查找特定人员的侄女/侄子:

select *
from person p
inner join personRelationship pr on p.personId = pr.personId
inner join person descendant on pr.descendantId = descendant.personId
where p.personId = 1
找到特定人的阿姨/叔叔:

select *
from person p
inner join personRelationship pr on p.personId = pr.descendantId
inner join person ancestor on pr.personId = ancestor.personId
where p.personId = 3

以此为例,您可以拥有数据。

Person
1, 'm', null, 'uncle', 'tom'
2, 'f', null, 'aunt', 'danielle'
3, 'm', null, 'nephew', 'realName'

PersonRelationship
1, 1, 3 -- 1 is a ancestor to 3, 3 is a descendant of 1
2, 2, 3 -- 2 is a ancestor to 3, 3 is a descendant of 2

答案 1 :(得分:1)

如果您将此成人和儿童关系投资作为分析中的重要关系,并且还需要标准化设计,那么您需要将它们视为通过第三个表格相关的两个不同表格中的两个不同实体。或者将所有成人和儿童放在一张桌子上,将他们的关系放在另一张桌子上。

如果只通过一个表执行此操作,那么您可能必须在一个数据字段中为表中的记录保留多个值,这意味着非标准化设计,并且您需要字符串处理来分隔这些值需要的。