5

テーブル ProductSupportArticles があります。

ProductSupportArticleID int NOT NULL <primary key>
ParentArticleID int NULL
ProductID int NOT NULL
Title varchar(100) NOT NULL
Content varchar(MAX) NOT NULL

ProductID は Products.ID への外部キーであり、ParentArticleID は同じテーブル ProductSupportArticles.ProductSupportArticleID への外部キーです。チェック制約 ProductSupportArticleID != ParentArticleID があるため、記事がそれ自体の親になることはできません。

ただし、特定の製品に関連するサポート記事は、別​​の製品に関連する記事の親または子になることはできません。チェック制約または同様のことわざを追加するにはどうすればよいですか:(ProductID = (SELECT ProductID FROM ProductSupportArticles P WHERE ParentArticleID = P.ProductSupportArticleID))

または、テーブルを別の方法で実装するにはどうすればよいですか?

4

2 に答える 2

5
  1. (ProductSupportArticleID、ProductID) に UNIQUE 制約を作成します。
  2. FK で (ParentArticleID, ProductID) を (ProductSupportArticleID, ProductID) に参照させる

警告: CHECK 制約でラップされた UDF を使用してビジネス ルールを適用すると、複数の抜け穴があります。たとえば、複数行の変更に対して偽陽性と偽陰性を与える可能性があります。また、それらは非常に遅いです。

于 2011-03-21T01:32:06.407 に答える