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概念,显然应该由客户机代码而不是数据库来实现。数据库(至少是关系数据库)不打算处理这样的事情,而且它们也不擅长处理。你让你的生活变得不必要的艰难(而且你为许多难以发现的错误敞开了大门),不管你怎么做 嗯