如何为一个可以与自身建立一对多关系的实体构建一个表?具体来说,我正在开发一个跟踪动物繁殖的应用程序.每只动物都有一个ID; 它还有一个父亲ID和一个女性ID.因此,从父系或贵妇到后代可以有一对多.我会倾向于这样的事情:
ID INT NOT NULL PRIMARY KEY SIRE_ID INT DAME_ID INT
并且为购买并添加到种畜中的那些动物记录空值,并在表格中记录其余的动物ID.
所以:
有人能指出我讨论建模这种关系的文章/网页吗?
ID应该是INT还是某种字符串?INT中的NULL表示动物在数据库中没有父项,但可以使用具有特殊标志值的String来表示相同的事物.
这可能最好通过两个表格建模吗?我指的是动物的一张桌子和一张单独表格,表示亲属关系,例如:
动物
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生锈了.我希望它能传达我正在思考的东西.
嗯,这是一个"正常"的一对多关系,你建议的方法是解决它的经典方法.
请注意,两个表是非规范化的(我不能确切地指出超级密钥不是应该是其他密钥fsck-I-forgot部分的子集,但我很确定它在某处); 直观的原因是第一个元组中的元组最多匹配第二个元组中的元组,所以除非你有很多具有无效父亲和贵宾ID的动物,否则它在任何前景中都不是一个好的解决方案(它会恶化性能 - 需要连接 - 并且不会降低存储要求).