SQL约束防止书被借两次

时间:2017-10-11 11:58:51

标签: sql sql-server sql-server-2012 constraints

我正在编写一个图书馆数据库,并有以下表格:

复制(书籍副本)

Id int
ISBN nvarchar(13)
Purchase_Date datetime

客户

Id int
First_Name nvarchar(255)
Last_Name nvarchar(255)
Address nvarchar(255)
Membership_Joined_Date datetime
Membership_Expiry_Date datetime

贷款

Id int
CopyId int
CustomerId int
Loan_Date datetime
Loan_Expiry_Date datetime
Extension_Date datetime (nullable)
Return_Date datetime (nullable)

copyId和customerId字段分别是Copy和Customer表中的外键。

我可以用贷款表写一个表达式来阻止我两次借这本书吗?我在贷款表中使用空Return_Date来检查一本书是否已经借出。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

许多数据库(包括SQL Server)都支持过滤索引。您可以创建过滤的唯一索引:

create unique index unq_loan_copyid
    on loan(copyid) where Loan_Expiry_Date is null;