考虑下面的例子
CREATE TABLE Vehicle (
Vehicle_id INT PRIMARY KEY
...
);
CREATE TABLE Bike (
Vehicle_id INT PRIMARY KEY REFERENCES Vehicle(Vehicle_id)
...
);
CREATE TABLE Car (
Vehicle_id INT PRIMARY KEY REFERENCES Vehicle(Vehicle_id)
...
);
??
)ALTER TABLE ONLY Car
ADD CONSTRAINT not_in_bike CHECK (??)
ALTER TABLE Car AND Bike
ADD CONSTRAINT Car_or_Bike CHECK (Car.Vehicle_id <> Bike.Vehicle_id)
谢谢!
有两种可能:
将所有实体存储在一个表中,并使用一列(type
左右)来确定某行是哪种类型。
使用您现在的布局,但type
在所有三个表中添加一列。将该列添加到主键或在 上创建唯一约束(vehicle_id, type)
。
定义要包含的外键type
并使用CHECK
约束确保它们具有正确的值:
ALTER TABLE bike ADD FOREIGN KEY (vehicle_id, vehicle_type) REFERENCES vehicle;
ALTER TABLE bike ADD CHECK (vehicle_type = 'bike');
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句