0

我正在设计我的数据库,并试图找出避免将来出现条件连接的最佳方法。我已经阅读了显示条件连接的文章,如果可能的话,这绝对是我想要避免的事情。

我有一张CHECK表,CHECK将存储一些数据(金额、日期等)。我还有 3 个“其他”表,VENDOR, VENDOR_DEPTVENDOR_ACCOUNT其中VENDOR_ACCOUNT有一个 fk to VENDOR_DEPT,并且VENDOR_DEPT有一个 fk to VENDOR

我的问题是:我如何设计我的模型,以便 CHECK 可以分配给VENDORVENDOR_DEPT或者VENDOR_ACCOUNT没有vend_idvendacct_id并且venddept_id在我的CHECK表中或者有一个包含列的 VENDOR_CHECK 表,,,check_id.... vendor_leveljoin_id希望你明白)

有没有更清洁的方法?顺便说一句,我正在使用 MYSQL,但我希望该解决方案也可以在其他平台上工作。

由于我处于模型设计阶段,因此我愿意接受所有建议,当然包括重新设计这些表格 :)

4

1 回答 1

1

您正在尝试在 SQL 中实现“一对一”关系。这种类型的关系可能有点挑战性。我想解决它的“关系”方式是说你真的有一个CHECK_ENTITY,这个实体可以是这三种类型之一。然而,这似乎是不必要的麻烦。

一种建议是在表中包含三个不同的列。我的猜测是,您经常希望将 vend_id 用于报告目的。只需为给定的 CHECK 填充适当的值。

是的,您的数据随后会被非规范化,因为 vend_id 将同时位于 CHECK 表和 VEND_ACCT 表中。如果账户和部门发生变化,那么这将捕获 CHECK 时的关系,这可能是您想要的。

另一种选择是拥有一个虚拟帐户,意思是“整个供应商”。然后只使用这个值来表示整个供应商。同样,您需要每个部门的帐户。

这种方法需要一些纪律。建立一个供应商层次结构是很诱人的,它具有任何可能的深度,并带有一个返回父级的链接(帐户 --> 部门 --> 供应商,那么为什么不概括它呢?)。SQL 在层次查询中甚至比在一种关系中更糟糕。“更糟”是指处理此类查询的方法非常依赖于数据库。

于 2012-11-30T15:01:51.993 回答