我正在设计我的数据库,并试图找出避免将来有条件连接的最佳方法。我已经阅读了显示条件连接的文章,如果可能的话,这绝对是我想要避免的。
我有一个CHECK
表,CHECK
会存储一些数据(金额,日期等)。我还有3个“其他”表格VENDOR
,VENDOR_DEPT
,VENDOR_ACCOUNT
,其中VENDOR_ACCOUNT
的fk为VENDOR_DEPT
,VENDOR_DEPT
fk到VENDOR
。
我的问题是:如何设计我的模型,以便CHECK可以分配到VENDOR
,VENDOR_DEPT
或VENDOR_ACCOUNT
,而无需vend_id
,{{1我的vendacct_id
表格中的{}和venddept_id
,或者有一个VENDOR_CHECK表,其中包含CHECK
,check_id
,vendor_level
....(希望你得到的图片)
有更清洁的方式吗?顺便说一下,我正在使用MYSQL,但我也希望该解决方案能够在其他平台上运行。
由于我处于模型设计阶段,我对所有建议持开放态度,包括重新设计这些表格当然:)
答案 0 :(得分:1)
您正在尝试在SQL中实现“一个”关系。这种关系可能有点挑战。我认为解决它的“关系”方式是说你确实有一个CHECK_ENTITY,这个实体可以是三种类型中的一种。然而,这似乎是不必要的麻烦。
一个建议是在表格中有三个不同的列。我的猜测是,您经常希望将vend_id用于报告目的。只需为给定的CHECK填充适当的。
是的,然后您的数据被非规范化,因为vend_id将同时位于CHECK表和VEND_ACCT表中。如果帐户和部门发生变化,那么这将捕获CHECK时的关系,这可能是您想要的。
另一种选择是拥有一个虚拟账户,意味着“整个供应商”。然后使用此值表示整个供应商。同样,您需要每个部门的帐户。
这种方法需要一些纪律。设置具有任何可能深度的供应商层次结构是很诱人的,并且链接回父母(帐户 - >部门 - >供应商,所以为什么不概括它?)。 SQL在分层查询中比在一个关系中更糟糕。 “更糟糕”,我的意思是处理此类查询的方法非常依赖于数据库。