Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库继承链接_Database_Inheritance - Fatal编程技术网

Database 数据库继承链接

Database 数据库继承链接,database,inheritance,Database,Inheritance,我在数据库中有基本的概括模式,我有超类车辆,以及它的子类汽车,摩托车。我通过为每个超类/子类组合创建表来实现这些,因此我创建了汽车和摩托车表 但现在我有问题了,我需要将FK从另一个表设置为“两个”这些表。所以“人”既有摩托车也有汽车,但决不能两者兼而有之,也决不能从一种类型中获得更多。我怎样才能把餐桌上的人和汽车、摩托车联系起来呢?非常感谢。不要那样做-这只会导致疼痛和大量昂贵的连接 对于整个类继承权有一个表,并有一个“鉴别器”列,用于以数字或符号方式确定类型。使用psuedo sql的快速示例

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


但现在我有问题了,我需要将FK从另一个表设置为“两个”这些表。所以“人”既有摩托车也有汽车,但决不能两者兼而有之,也决不能从一种类型中获得更多。我怎样才能把餐桌上的人和汽车、摩托车联系起来呢?非常感谢。

不要那样做-这只会导致疼痛和大量昂贵的连接

对于整个类继承权有一个表,并有一个“鉴别器”列,用于以数字或符号方式确定类型。使用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
}

不要那样做-这只会导致疼痛和许多昂贵的连接

对于整个类继承权有一个表,并有一个“鉴别器”列,用于以数字或符号方式确定类型。使用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
}

您可以使用检查约束或存储过程来实现这一点(具体实现细节取决于您的DBMS)

但我认为你应该重新思考你的整体架构。继承是一个OO概念,显然应该由客户机代码而不是数据库来实现。数据库(至少是关系数据库)不打算处理这样的事情,而且它们也不擅长处理。你让你的生活变得不必要的艰难(而且你为许多难以发现的错误敞开了大门),不管你怎么做


您可以通过检查约束或存储过程(具体的实现细节取决于您的DBMS)来实现这一点

但我认为你应该重新思考你的整体架构。继承是一个OO概念,显然应该由客户机代码而不是数据库来实现。数据库(至少是关系数据库)不打算处理这样的事情,而且它们也不擅长处理。你让你的生活变得不必要的艰难(而且你为许多难以发现的错误敞开了大门),不管你怎么做