【问题标题】:Relational Database Inheritance foreign keys and primary keys关系数据库继承外键和主键
【发布时间】:2013-07-21 00:28:49
【问题描述】:

我正在开发一个数据库,我试图在其中推断出应用继承的最佳方法。

到目前为止,我有 2 个来自 Entity 的子类,我在 Extended Entity-Relationship Model to tables (subclasses) 中询问了如何在关系表上实现它。

我决定使用Concrete Table,所以我创建了 2 个表,一个用于实体的每个子类。我遇到了2个问题:

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

    李>
  2. 当添加引用 id 的外键时,外键应该引用两个子类表,但我不知道这是否可能。

任何关于如何做到这一点的想法或意见都会有很大帮助。谢谢

【问题讨论】:

    标签: database inheritance entity-relationship


    【解决方案1】:

    让子类表引用父类可能更有意义,而不是相反。然后,您可以在 Entity 表上有一个 id 列,该列是唯一的,并且是从子实例到其父实例的外键。当您想在代码中使用数据实例化对象时,这可能也会有所帮助,因为您应该知道要实例化的是哪个类,并且只关心它的祖先,而不是它的孩子。

    【讨论】:

    • 你能举个例子吗?您的解决方案似乎是我正在寻找的
    • 想象 4 个表,实体、child0、child1 和孙子。所有 4 个表都有自动增量的 id 列。 child0 和 child1 表有一个名为 entity_id 的列,它是 entity.id 的外键。孙表有一个 child0_id 列,它是 child0.id 的外键。然后说你想用数据库中的数据实例化一个孙对象,从它的表和它的所有祖先中获取字段。您可以通过选择您需要的 grandchild.id 并使用外键连接 child0 和实体表来进行查询。这有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多