【发布时间】:2018-02-16 07:03:34
【问题描述】:
我需要实现一个实体的特化,使用一对一的关系,让我们这样说:
create table vehicles (
vehicle_id int primary key,
...
)
create table cars (
car_id int primary key,
vehicle_id int references vehicles(vehicle_id),
...
)
create table bikes (
bike_id int primary key,
bike_id int references vehicles(vehicle_id),
...
)
现在,我想强制执行脱节约束,以确保车辆既可以是汽车也可以是自行车,可能两者都不是,但绝不可能两者兼而有之。据我了解,通过 RDBM 本身实现并不容易,因此我决定在应用程序(Ruby on Rails)中验证这一点。在这种情况下,我认为如果我反过来做关系会更容易验证,因为它在插入期间不需要任何额外的选择和锁定:
create table vehicles (
vehicle_id int primary key,
car_id int references cars(car_id),
bike_id int references bikes(bike_id),
...
)
create table cars (
car_id int primary key,
...
)
create table bikes (
bike_id int primary key,
...
)
现在,我发现没有一个不相交的约束实现使用这种方式。它有什么我看不到的缺点吗?
【问题讨论】:
标签: sql database postgresql database-design