我有两张桌子。 First One是包含Data的产品表,第二个包含Parent Child关系。
ProductTable
===================
PkId Manufacturer Model ...
1 A A1
2 B B1
3 C C1
JoinIng Table for Parent Child relationship (accessories)
Accessories
=============
PkAccessoryId Fk_ProductId(Child) ProductId(Parent)
---------------------------------------------------------
1 2 1 (A has B As accessory)
2 1 2 (B has A as accessory) --(//this record is an invalid entry due to the missing constraint and need to prevent this.)
如何为(Fk_ProductId,ProductId)添加唯一约束,以便无法添加Fk_Productid和ProductId的组合。
Example: Invalid case as this will make a loop of accessory
1, 2
2 1
我已经添加了一个约束,如下所示。
ALTER TABLE Tx_ProductAccessories
ADD CONSTRAINT UNI_CONS_Fk_ProductId_ProductId UNIQUE(Fk_ProductId, ProductId);
此外,我打算防止任何非法进入,它会导致循环。 如下。
A-A (Read product A has product A as accessory )
A-B-A
A-B-C-A
A-B-C-B
...
任何产品(P1)都可以是任何其他产品(P2)的附件 辅助产品P1不是母产品,祖母产品 或其父母行中的任何地方,这将导致循环循环。
答案 0 :(得分:4)
您可以使用计算列来执行此操作:
alter table Tx_ProductAccessories
add least_productId as (case when Fk_ProductId < ProductId
then Fk_ProductId else ProductId end);
alter table Tx_ProductAccessories
add greatest_productId as (case when Fk_ProductId < ProductId
then ProductId else Fk_ProductId end);
alter table Tx_ProductAccessories
add constraint uni_fkProductId_ProductId unique(least_productId, greatest_ProductId);