我有四個數據庫表像這樣:如何設置外鍵數據庫完整性檢查引用的字段
書
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