数据库继承链接

时间:2011-10-30 16:53:06

标签: database inheritance

我在数据库中有基本的泛化模式,我有超级类车辆,它的子类汽车,摩托车。我通过为每个超类/子类组合创建表来实现它们,因此我创建了汽车和摩托车表。

但是现在我有问题,我需要将FK从我的其他表设置为“两个”这些表。所以“人”有摩托车或汽车,但从来没有,从来没有更多。如何将表人与汽车和摩托车联系起来实现这一目标?非常感谢你。

2 个答案:

答案 0 :(得分:1)

不要这样做 - 它只会导致痛苦和许多昂贵的连接。

为整个类层次结构提供一个表,并有一个“鉴别器”列,用于以数字或符号方式确定类型。使用psuedo-sql的简单示例:

create table machine {
    machine_id int auto_increment,
    machine_type char(1),  -- can be 'a' for auto or 'm' for motorcyle,
    make varchar(255),
    model varchar(255),
    auto_specific_field varchar(10) null,
    moto_specific_field varchar(10) null
}

答案 1 :(得分:0)

您可以使用检查约束或存储过程来执行此操作(具体实现细节取决于您的DBMS)。

但我认为您应该重新考虑整体架构。 继承 OO概念,显然应该由客户端代码实现,而不是由数据库实现。数据库(至少是关系数据库)并不打算处理这些事情,而且它们并不擅长。无论如何,当你正在做这件事的时候,你正在不必要地努力工作(而且你为许多难以发现的错误打开了大门......)

HTH!