2010-05-05 86 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