我正在通过Oracle Academy服务学习Oracle Database 12c SQL数据建模。在了解了递归和层次关系以及如何对它们建模之后,提出了以下问题:
“我们公司在美国各地销售产品。所以我们已经 将美国划分为四个主要销售区域:北部,东部, 南部和西部地区。每个销售区域都有一个独特的区域 码。然后将每个销售区域划分为销售区域。对于 例如,西部地区分为落基山脉, 西北,太平洋沿岸和太平洋地区。每个区都有一个 独特的区号。每个区域都由销售区域组成。 落基山区由三个地区组成: 怀俄明州 - 蒙大拿州,科罗拉多州和犹他州 - 新墨西哥州。西北区 由两个地区组成:华盛顿州和俄勒冈州 - 爱达荷州 领土。太平洋沿岸地区由两个人组成 地区:加利福尼亚州和内华达州。太平洋 区包括夏威夷领土和阿拉斯加领土。每 领土有一个独特的地区代码。
然后将每个销售区域划分为销售区域。对于 例如,科罗拉多州由两个销售区域组成:Front Range和 西斜坡销售区。每个销售区域都有一个独特的销售区域 代码。
每个销售人员负责一个或多个销售区域,并且有一个 具体的销售配额。我们还有负责的销售经理 对于一个或多个销售区,以及销售总监 负责一个或多个销售区域。每个销售经理都是 负责他/她所在地区的领土。我们没有 重叠我们员工的责任。每个销售区域始终是 单个销售人员的责任,以及我们的经理和 董事的责任不重叠。有时我们的销售人员, 经理和董事将有特殊的任务,而不是 负责销售。我们通过他们识别我们所有的销售人员 员工ID。“
以下两个ERD作为此问题的解决方案:
据我所知,每个模型的变化都很大,但它们在逻辑上是否相等?
答案 0 :(得分:0)
“他们在逻辑上是否相同?”
简而言之,没有。
所有模型都介绍了不同类型员工之间的管理关系。这是一个无根据的假设,因为在用例描述中没有任何内容可以表明情况。员工的责任都是根据部门细分来定义的。
我认为将SALES_DIVISION和SALES_ENTITY表示为单个分层实体的模型是错误的。这在逻辑上相似,但我们已经失去了业务规则。 REGION的严格等级> DISTRICT> TERRITORY> AREA是看不见的。同样,我们不再显示规定哪种类型的员工负责每种类型的区域的规则。此外,我们失去了哪些类型具有quota
属性而哪些不具有{{1}}属性的区别。
逻辑数据建模的目的是尽可能清楚地直观地表达业务规则。这意味着在不添加不存在的规则的情况下完整地表示所有内容。当我们将逻辑模型转换为物理模型时,我们可以选择将多个实体合并到一个表中,但我认为ERD应该尽可能具有表现力。