0

我有以下表格和列

CarId   MarketId   Description

TireId CarId MarketId Description

主键为CarIdTireId

现在我想添加一个规则来检查外键CarIdinTire是否MarketIdCar. 我必须添加触发器还是可以以不同的方式完成?

4

2 回答 2

2

由于 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 组合。

于 2013-09-12T13:10:19.900 回答
0

您可以创建一个汽车/轮胎交叉引用表并将 MarketId 放在上面,而不是放在汽车和轮胎表上。然后任何给定的汽车/轮胎组合自动具有相同的 MarketId。

当然,这只是一个有用的想法,如果你能够改变表结构那么大。

于 2013-09-12T13:05:54.367 回答