0

问题来自以下三个表 -

Tour
 - Id

TourPackage
 - Id
 - TourId

Traveller
 - Id
 - TourId
 - PackageId

外键约束已到位。但是,我还希望强制要求旅行者套餐也必须参考旅行者所指的同一旅游。

Traveller.Tour = Traveller.Package.Tour

我可能可以轻松地在业务层执行此操作,但我可以在数据库中执行此操作吗?还是我应该重新考虑我的设计?请注意,我不打算在新的关系表中提取外键。我认为 Tour 和 Package 是 Traveler 实体的一部分,因此应该驻留在实体本身中。

更新

我的应用程序在单个 Tour 的上下文中运行。因此,我加载的所有数据都将指向单个游览。此外,大部分数据来自 Traveler 表。因此,有一个直接的 TourId 到表是有意义的。无论如何,我是这样看待关系的。

  • 一个旅游有几个套餐。
  • 一位旅行者报名参加了一次旅行。
  • 旅行者为订阅的旅行选择套餐。

所以,我想一个旅行者提到旅游和包裹是明智的。我在这里错了吗?

4

2 回答 2

3

首先,可以使用外键来强制 Traveler 表中的TourIdPackageId引用保持一致。FORIEGN KEY TRAVLELLER(TOURID, PACKAGEID) REFERENCES PACKAGE(TROURID, ID)与 TourPackage 表上的 UNIQUE(TOURID, ID) 一起。

关于您的数据模型,如果旅游有多个包裹并且旅行者登记了一个包裹,则不需要 Traveler 表中的 TourId 字段。通过加入三个表,您始终可以找到 TourId。

但是如果允许旅行者在一次旅行中加入多个包裹,那么您需要一个关系表来将旅行者与多个包裹联系起来。

于 2013-03-07T21:18:27.910 回答
1

在此处输入图像描述

或者,取决于您如何定义“包”。

在此处输入图像描述

于 2013-03-08T12:39:24.743 回答