2010-05-05 89 views
2

我有一個SQL Server數據庫與Apartment表(其中列FloorNumBuildingID)和ApartmentBuilding表(具有列NumFloors)。有沒有辦法設置一個約束(使用SQL Server用戶界面)來檢查Apartment.FloorNum是否大於ApartmentBuilding.NumFloorsSQL Server約束跨表

我嘗試這樣做:

FloorNum > ApartmentBuilding.NumFloors 

但現在我意識到,我無論如何都必須加入對BuildingID列,但我不知道該怎麼做的約束之內。

感謝您的幫助!

回答

3

您無法使用CHECK CONSTRAINT執行此操作,因爲它需要來自其他表的數據。你會用INSERT/UPDATE trigger來處理這個問題。

+0

難怪我無法弄清楚如何做到這一點!感謝您阻止我浪費時間 – chama 2010-05-05 20:12:42

0
  1. 在ApartmentBuilding表中,添加唯一約束(BuildingID,NumFloors)
  2. 在公寓表,加列NumFloorsInBuilding
  3. 在公寓表上(BuildingID,NumFloorsInBuilding)指的是添加外鍵(BuildingID, NumFloors)。這保證NumFloorsInBuilding始終等於父表中的NumFloors。
  4. 在公寓表中,添加CHECK(FloorNum < NumFloorsInBuilding)
+1

只需添加一個外鍵引用就不會神奇地填充Apartment表中的'BuildingID'列。當然 - 如果你手動添加最大值。每個公寓的樓層數量,然後CHECK約束是一塊蛋糕 - 但是這會不必要地重複已經在建築物表格中的信息...... – 2010-05-05 21:02:45

+0

它肯定會複製信息,在這裏沒有參數。如果你需要堅如磐石的完整性,這是唯一的出路。如果你容忍一些無效的數據,那麼去觸發器。 – 2010-05-05 21:40:48