SQL Server-满足条件时如何添加约束

时间:2018-08-13 21:45:24

标签: sql-server

我要做的是使客户订单不能在 Order 中多次指定相同的产品。我认为我需要检查CustomerOderId是否相同,是否检查了它们是否具有多个相同的ProductId,但是我不确定该如何处理。我的数据库中有以下表格

**OrderProduct**
(Id) int
(CustomerOrderId) int
(ProductId) int
(Quantity) int
(ProdcutRating) int

**CustomerOrder**
(Id) int
(CustomerId) int
(AddedDate) datetime

**Product**
(Id) int
(Name) nvarchar(75)
(Price) int
(AddedDate) datetime

我尝试了以下方法,但我认为可以。使其没有其他客户可以订购相同的产品和两种产品;必须删除所有当前重复项

ALTER TABLE OrderProduct ADD  CONSTRAINT [IX_UniqueProductId] UNIQUE 
NONCLUSTERED (ProductId ASC)

有人吗?

2 个答案:

答案 0 :(得分:2)

如果我正确地理解了您的问题(以及您的数据设置),那么您所要做的就是将customerOrderId列添加到唯一索引中。这样一来,每个客户订单只能购买一次产品。

ALTER TABLE OrderProduct ADD  CONSTRAINT [IX_UniqueProductId] UNIQUE 
NONCLUSTERED (ProductId ASC, CustomerOrderID ASC)

这假定每次客户订购时都会生成一个新的客户订单ID,并且同一客户可以在后续订单中订购同一产品。

答案 1 :(得分:0)

如果我了解您,则您的OrderProduct中的每个customerOrder只需要一种产品。为此,您应该使用(productId,CustomerOrderId)作为OrderProduct表的主键,以便存在一对一的关系。

ALTER TABLE OrderProduct ADD  CONSTRAINT [IX_UniqueProductId] UNIQUE 
NONCLUSTERED (ProductId ASC, CustomerOrderID ASC)