Database 关系数据库继承外键和主键

Database 关系数据库继承外键和主键,database,inheritance,entity-relationship,Database,Inheritance,Entity Relationship,我正在研究一个数据库,我试图推断出应用继承的最佳方法 到目前为止,我从一个实体中得到了两个子类,我在中询问了如何在关系表上实现它 我决定使用它,所以我创建了两个表,每个表对应实体的子类。我遇到了两个问题: 我的主键是id int primary key autoincrement,这意味着每个表的第一行将具有id=1。因此,键实际上不是唯一的,因此当从其他表引用它时,无法知道我们引用的是2个表子类中的哪一个(除非我添加了一个不必要的(?)额外列) 当添加引用所述id的外键时,外键应该引用两个子类

我正在研究一个数据库,我试图推断出应用继承的最佳方法

到目前为止,我从一个实体中得到了两个子类,我在中询问了如何在关系表上实现它

我决定使用它,所以我创建了两个表,每个表对应实体的子类。我遇到了两个问题:

  • 我的主键是
    id int primary key autoincrement
    ,这意味着每个表的第一行将具有
    id=1
    。因此,键实际上不是唯一的,因此当从其他表引用它时,无法知道我们引用的是2个表子类中的哪一个(除非我添加了一个不必要的(?)额外列)

  • 当添加引用所述
    id
    的外键时,外键应该引用两个子类表,但我不知道这是否可行


  • 任何关于如何做到这一点的想法或意见都会有很大帮助。多谢了,让子类表引用父类可能是有意义的,而不是反过来。然后,您可以在实体表上有一个id列,该列是唯一的,并且是从子类到父实例的外键。可能是当您希望使用数据在代码中实例化对象时,his也会有所帮助,因为您应该知道要实例化的是哪个类,并且只关心它的祖先,而不关心它的子类。

    您能提供一个示例吗?您的解决方案看起来就像我要找的一样想象4个表,实体,child0,child1和孙子。全部4个表表具有自动递增的id列。child0和child1表具有名为entity_id的列,该列是entity.id的外键。孙子表具有child0_id列,该列是child0.id的外键。然后假设您希望使用数据库中的数据实例化孙子对象,从其表中获取字段以及所有its祖先。只需选择所需的孙子.id并使用外键连接child0和entity表,即可查询此项。这有帮助吗?