2017-10-11 30 views
1

我写一个图书馆数据库,并具有下列表格:SQL约束防止图书被借出两次

复制(书册)

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来检查一本书是否已经借出。任何帮助赞赏。

+0

用您正在使用的数据库标记您的问题。 –

+0

完成@GordonLinoff – DevDave

回答

1

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

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

谢谢戈登:) – DevDave