如何在检查约束中引用其他表?

Jak*_*les 5 sql-server referential-integrity check-constraints

我有一个表,ProductSupportArticles:

ProductSupportArticleID int NOT NULL <primary key>
ParentArticleID int NULL
ProductID int NOT NULL
Title varchar(100) NOT NULL
Content varchar(MAX) NOT NULL
Run Code Online (Sandbox Code Playgroud)

ProductID是Products.ID的外键,ParentArticleID是同一个表的外键,ProductSupportArticles.ProductSupportArticleID.我有一个检查约束ProductSupportArticleID!= ParentArticleID,以便文章不能是它自己的父项.

但是,与特定产品有关的支持物品不应该是与不同产品有关的物品的父母或子女.如何添加检查约束或类似说法:(ProductID = (SELECT ProductID FROM ProductSupportArticles P WHERE ParentArticleID = P.ProductSupportArticleID))

或者我应该如何以不同方式实现我的表?

A-K*_*A-K 5

  1. 在(ProductSupportArticleID,ProductID)上创建UNIQUE约束.
  2. 有一个FK引用(ParentArticleID,ProductID)到(ProductSupportArticleID,ProductID)

警告:通过包含在CHECK约束中的UDF实施业务规则有多个漏洞.例如,它们可能会给多行修改带来误报和漏报.他们也很慢.