我有以下表格和列
车
CarId MarketId Description
胎
TireId CarId MarketId Description
主键为CarId
和TireId
。
现在我想添加一个规则来检查外键CarId
inTire
是否MarketId
与Car
. 我必须添加触发器还是可以以不同的方式完成?
我有以下表格和列
车
CarId MarketId Description
胎
TireId CarId MarketId Description
主键为CarId
和TireId
。
现在我想添加一个规则来检查外键CarId
inTire
是否MarketId
与Car
. 我必须添加触发器还是可以以不同的方式完成?
由于 CarID 在CAR
表中是唯一的,因此 CarID/MarketID 组合也将是唯一的。因此,您可以在可能成为外键约束目标的这两列上创建唯一索引。
create table car
(
carid integer not null primary key,
marketid integer not null,
description varchar(100) not null
);
create unique index idx_car_market on car (carid, marketid);
create table tire
(
tireid integer not null primary key,
carid integer not null references car, -- this fk is not strictly necessary
marketid integer not null,
description varchar(100) not null
);
alter table tire
add constraint fk_tire_car
foreign key (carid, marketid)
references car (carid, marketid);
外键将确保轮胎表中仅使用有效的 CarID/MarketID 组合。
您可以创建一个汽车/轮胎交叉引用表并将 MarketId 放在上面,而不是放在汽车和轮胎表上。然后任何给定的汽车/轮胎组合自动具有相同的 MarketId。
当然,这只是一个有用的想法,如果你能够改变表结构那么大。