SQL - Child成为Parent的Schema Design

时间:2016-07-01 08:26:55

标签: sql database-schema

如何设计架构以容纳单个人成为列表中的父母。

简单地说我的字段就是人。

 PEOPLE
__________
Primary Key
FirstName
Surname
DOB
Sex
EyeColour
Height
Deceased 

这对个人来说很好,但如果个人成为小组的父母,我该如何定义。创建一个表作为父母似乎是错的,因为他们真的是人们应该只是一个单独的表,实际上只是一个表定义父母是否和使用2人ID作为参考?

3 个答案:

答案 0 :(得分:1)

这就是我看到新结构的方式:

 PEOPLE
__________
Primary Key
FirstName
Surname
DOB
Sex
EyeColour
Height
Deceased
CoupleID

其中情侣ID在父母记录中应该相同。

因此,当通过CoupleID分组时,您可以定义父母。当字段为空时,则记录是个人的。

祝你好运!

答案 1 :(得分:1)

Hasan Alizada's answer已经足够好了,但为了完整起见,这是我的.02美分。

PEOPLE
    Primary Key
    FirstName
    Surname
    DOB
    Sex
    EyeColour
    Height
    Deceased

RELATION
    PK
    Source          (FK)
    Target          (FK)
    RelationType    (probably another FK, not null)
    StartDate       (date, not null)
    EndDate         (date, null)

在这样的模型中,您可以正确映射其他关系类型以及给定关系何时结束。

答案 2 :(得分:1)

  

创建一个表,因为父母看起来是错的,因为他们真的是人们应该只是一个单独的表,实际上只是一个表定义父母的表是否

这没有错。并非所有人都是父母。 (因为作为父母意味着成为一个人,宣布FOREIGN KEY Parents (p) REFERENCES People (p)会很有帮助。)

从每个具有谓词(由列名参数化的句子模板)的表的角度来看,表中包含使谓词成为真正命题的行 (声明),People(P, ...)保存行,其中" P标识一个人......"并且Parents(P, ...)保存行,其中" P标识父母......"。 (外键说"对于所有......,父(P,......)暗示人(P,......)。)

如果您有一张桌子ChildOf(C, P, ...)" C是P&#34的孩子;然后你就不需要Parents了,因为它等于SELECT p FROM ChildOf