SQL Server中的多表约束



我有一个包含2个表的数据库(主键用斜体表示(:

  • 房间(ROOM_ID,天,小时(
  • 预订(CUSTOMER_IDROOM_ID,日期(

第一张表描述了客房供应情况和客户的第二次预订情况。

现在假设我已经在ROOM:中插入了3行

3898   WEDNESDAY   2.00
3454   MONDAY      1.00
3563   MONDAY      1.00

并且两行进入RESERVATION:

0898   3454   05-09-2019 
0567   3898   05-08-2019  

现在我想创建一个约束,不允许已经预订房间的客户同时预订另一个可用的房间!

然后,如果我尝试插入:

0567   3563   05-10-2019  

我会得到一个错误,因为根据第一张桌子,3454和3563房间都是1.00。

谢谢!

现在我想创建一个约束,不允许已经预订房间的客户同时预订另一个可用的房间。

我认为这是指客户在每个日期只能预订一个房间。如果是这样,您可以使用(customer_iddate(上的reservation中的唯一索引/约束:

create unique index unq_reservation_customer_date on reservation(customer_id, date);

这保证了给定的客户在每个日期只能预订一个房间。

我可以看到两种创建真正约束的方法:

  1. 您创建两个表的物化视图,并在此视图上添加唯一索引
  2. 将ROOM_DAY和ROOM_HOUR列添加到RESERVATION表中,然后添加复合外键约束以强制数据完整性:
ALTER TABLE RESERVATION WITH CHECK ADD CONSTRAINT FK_RESERVATION_ROOM 
FOREIGN KEY(ROOM_ID, ROOM_DAY, ROOM_HOUR)
REFERENCES ROOM (ROOM_ID, DAY, HOUR)

注意您也必须启用它。然后可以在RESERVATION表上添加唯一索引。

最新更新