我有四个数据库表像这样:如何设置外键数据库完整性检查引用的字段
书
ID_Book | ID_Company |说明BookExtension
ID_BookExtension | ID_Book | ID_Discount折扣
ID_Discount |说明| ID_公司公司
ID_Company |说明
通过外键的任何BookExtension
记录指向间接两种不同的ID_Company
领域:
BookExtension.ID_Book引用包含Book.ID_Company
BookExtension.ID_Discount一书记录引用一个折扣记录中包含Discount.ID_公司
是否有可能在Sql Server中执行任何新记录BookExtension
必须有Book.ID_Company = Discount.ID_Company
?
简而言之,我希望以下查询必须返回0记录!
SELECT count(*) from BookExtension
INNER JOIN Book ON BookExstension.ID_Book = Book.ID_Book
INNER JOIN Discount ON BookExstension.ID_Discount = Discount.ID_Discount
WHERE Book.ID_Company <> Discount.ID_Company
,或者用简单的英语:
我不希望这样一个BookExtension
记录引用一个Company
的Book
记录和另一个不同Company
一个Discount
纪录!
你说“任何新的记录”的独特索引 - 这是否限制也适用于已经存在的记录? – 2011-03-26 21:23:30
@Martin现有记录很好,因为一旦将新的ID_Discount字段添加到BookExtension中,所有记录和相应的ID_Discount值将按照严格的规则进行批量更新。该表现在由Web应用程序提供,虽然我可以在插入新记录之前从应用程序中进行双重检查,但我希望使用数据库规则强制实施此限制。 – systempuntoout 2011-03-26 21:30:33