【问题标题】:How to represent an attribute of an entity on which entity is subdivided in an er diagram?如何在er图中表示实体在其上细分的实体的属性?
【发布时间】:2018-07-17 07:26:45
【问题描述】:

我正在为一家汽车租赁公司制作 er 图表。该公司有小型车、豪华车和厢式车作为不同的车辆,每种类型都有单独的租赁费用,例如。小型车每天 100 美元,豪华车 200 美元,面包车 150 美元。如果每辆车的成本不同,那么我可以使用专业化,但每辆具有相同成本的相同类型的车辆会增加冗余。我本可以制作抽象实体之类的东西,但不知道这样的东西是否存在于 er 图中。我怎么能建模呢?

【问题讨论】:

  • “冗余”是一个模糊的通用术语。解释你所说的“增加冗余”是什么意思,以及为什么你认为这是一个问题。另请阅读数据库设计介绍。 Google re 数据库/sql 子类型化。

标签: database er-diagrams


【解决方案1】:

当您需要对域的子集具有不同的属性、关系或约束时,使用子类型。在这种情况下,不同类型的汽车都具有相同的属性 - 类型名称和租赁成本 - 而且您没有提及任何其他关系或约束,因此我们不需要子类型(目前)。

对于您的 ER 图,您可以简单地为汽车类型建模并为其设置成本:

这转化为如下表图所示的物理模型:

【讨论】:

  • 在这个 ER 模型中,不会创建真正的 CarType 对象,所以它仍然被认为是一个强实体吗?
  • 我不确定您所说的“不会创建 CarType 的真实对象”是什么意思。 CarType(实体集)由其自身的属性(CarTypeId)标识,因此它是一个常规实体集(Chen 定义了弱实体集和常规实体集,而不是强实体集)。
【解决方案2】:

不需要专业化。大多数情况下,在三元关系中需要特化。或者当实体的某些实体出现需要额外的属性时。该模型可以解决冗余问题。

更新您可以使用 CarName 和 Cost 的组合作为表 Cost 的复合主键

UPDATE2既然你提到了

如果每辆车的成本不同

我把成本交给了汽车。

更新 3 我建议您使用第一个模型,但您想要的是能够同时拥有 CarType 和 Car 的租赁成本。在此数据模型中,汽车实体可以选择拥有自己的成本。因此,在这种情况下,请使用专业化 {Optional, And}。不会有任何冗余。

当我们使用{Optional, And} 时,您应该为 Car 创建一个表,为 CarCost 创建一个表。

【讨论】:

  • 为什么不让成本取决于汽车类型,因为 OP 说“每种类型都有单独的租赁成本”?
  • 使用 (CarName, Cost) 作为 Cost 表的 PK 是不明智的。
  • 因为每辆车都有自己的成本。
  • 每辆车没有自己的成本,但每种车型都有
  • 检查更新 3. 在这个数据模型中,汽车实体有自己的成本是可选的。
猜你喜欢
  • 2018-05-20
  • 2016-06-28
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 2019-04-18
  • 2019-08-28
  • 2020-12-11
相关资源
最近更新 更多