我正在为手提包购物网站创建一个数据库,其中我有一个名为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语句或者在插入触发器或更新触发器之前进行数据一致性但是我想知道是否可以使用复合键来完成...如果没有其他可用选项...
答案 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上的主键和两个代理组合的唯一键
然后显示实际信息两个连接到匹配。