问题来自以下三个表 -
Tour
- Id
TourPackage
- Id
- TourId
Traveller
- Id
- TourId
- PackageId
外键约束已到位。但是,我还希望强制执行旅行者套餐也必须参考旅行者所指的同一个旅行。
Traveller.Tour = Traveller.Package.Tour
我可以在业务层轻松实施此功能,但我可以在数据库中执行此操作吗?或者我应该重新考虑我的设计?请注意,我不打算在新的关系表中提取外键。我认为Tour和Package是Traveler实体的一部分,因此应该驻留在实体本身。
更新
我的应用程序在单个Tour的上下文中运行。因此,我加载的所有数据都将指向单个游览。此外,大多数数据来自Traveler表。因此,有一个直接的TourId到桌面是有道理的。 无论如何,我以这种方式看待这些关系。
所以,我猜一个旅行者指的是游览和包裹是明智的。我错了吗?
答案 0 :(得分:3)
首先,可以使用外键来强制Traveler表中的TourId
和PackageId
引用保持一致。 FORIEGN KEY TRAVLELLER(TOURID, PACKAGEID) REFERENCES PACKAGE(TROURID, ID)
以及TourPackage表上的UNIQUE(TOURID,ID)。
关于您的数据模型,如果巡视有多个包且旅行者为单个包登记,则不需要在Traveler表中使用TourId字段。您可以通过加入三个表来找到TourId。
但是如果旅行者被允许在旅行中登记多个包裹,那么你需要一个关系表来将旅行者与多个包裹联系起来。
答案 1 :(得分:1)
或者,取决于您如何定义“包”。