复合键约束

时间:2014-03-14 17:21:23

标签: sql sql-server-2008 tsql sql-server-2008-r2 sql-server-2012

我正在为手提包购物网站创建一个数据库,其中我有一个名为dbo.ProductMatching的表

CREATE TABLE [dbo].[ProductMatching](
[ProductMatchingID] [int] NOT NULL IDENTITY, -- This can be Made Primary Key but i want to use composite keys
[MainProductID] [int] NOT NULL,
[MainProductColourID] [int] NOT NULL,
[ReferenceProductID] [int] NULL,
[ReferenceProductColourID] [int] NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[UpdatedOn] [datetime] NOT NULL
) ON [PRIMARY]

我想要做的是Make(MainProductID,MainProductColourID)是唯一的,对于每个这个组合,我想组合(ReferenceProductID,ReferenceProductColourID)也是唯一的。

例如,假设我有(MainProductID,MainProdcutColourID)=(1,1)它的组合(ReferenceProductID,ReferenceProductColourID)=(2,2)那么(1,1)不能引用另一个(2,3)组合..我不能使整个四键复合键,因为它将允许参考(1,1)到(2,3)组合..

我知道我可以在插入数据时使用exists语句或者在插入触发器或更新触发器之前进行数据一致性但是我想知道是否可以使用复合键来完成...如果没有其他可用选项...

2 个答案:

答案 0 :(得分:1)

如果我理解了这个问题那么两个简单的唯一约束

MainProductID,MainProductColourID

MainProductID,ReferenceProductID

我会用左 MainProductID,MainProductColourID作为复合PK
(这将满足该唯一约束)

如果这是错误的,请显示更多正确的例子 还有更多不正确的理由

答案 1 :(得分:-1)

哇,凌乱,最简单的方法是三张桌子

MainProduct (
MainProductId int not null identity(1,1)
ProductID int not null
ProductColourID in not null
) with a primary key on id, a unique key on Id/ColourID

ReferenceProduct (
ReferenceProductId int not null identity(1,1)
ProductID int not null
ProductColourID in not null
) with a primary key on id, a unique key on Id/ColourID

然后匹配为ProductMatchingID, MainProductID, ReferenceProductID, etc 再次使用id上的主键和两个代理组合的唯一键

然后显示实际信息两个连接到匹配。