一对多对自己

Ono*_*cci 5 database-design data-modeling table-structure

如何为一个可以与自身建立一对多关系的实体构建一个表?具体来说,我正在开发一个跟踪动物繁殖的应用程序.每只动物都有一个ID; 它还有一个父亲ID和一个女性ID.因此,从父系或贵妇到后代可以有一对多.我会倾向于这样的事情:

ID INT NOT NULL PRIMARY KEY
SIRE_ID INT 
DAME_ID INT
Run Code Online (Sandbox Code Playgroud)

并且为购买并添加到种畜中的那些动物记录空值,并在表格中记录其余的动物ID.

所以:

  1. 有人能指出我讨论建模这种关系的文章/网页吗?
  2. ID应该是INT还是某种字符串?INT中的NULL表示动物在数据库中没有父项,但可以使用具有特殊标志值的String来表示相同的事物.
  3. 这可能最好通过两个表格建模吗?我指的是动物的一张桌子和一张单独表格,表示亲属关系,例如:

    动物

    ID INT NOT NOT PRIMARY KEY

    亲属

    ID INT NOT NOT PRIMARY KEY FOREIGN KEY

    SIRE_ID INT PRIMARY KEY FOREIGN KEY

    DAME_ID INT PRIMARY KEY FOREIGN KEY

我为上述事件道歉:我的SQL生锈了.我希望它能传达我正在思考的东西.

mil*_*omi 6

嗯,这是一个"正常"的一对多关系,你建议的方法是解决它的经典方法.

请注意,两个表是非规范化的(我不能确切地指出超级密钥不是应该是其他密钥fsck-I-forgot部分的子集,但我很确定它在某处); 直观的原因是第一个元组中的元组最多匹配第二个元组中的元组,所以除非你有很多具有无效父亲和贵宾ID的动物,否则它在任何前景中都不是一个好的解决方案(它会恶化性能 - 需要连接 - 并且不会降低存储要求).