【问题标题】:Implement specialized entity in ER diagram在 ER 图中实现专门的实体
【发布时间】:2013-04-30 12:16:11
【问题描述】:

我正在设计一个数据库并发现我不知道该怎么做,所以首先让我们用图像来说明部分 ER 图:

如你所见,我有以下内容:

  • 设备产生 0:N 数据
  • 生成的数据可以是不同的数据类型(例如, 设备可以同时产生温度数据和湿度数据 时间戳)
  • 特定数据仅由 1:1 设备生成
  • 1:N 设备和数据之间的关系。由于数据是一个 弱实体(没有设备就无法存在数据),我将有一个复合 由 ID_DEVICE 和 TIMESTAMP 形成的数据中的 PK(图中未显示)
  • 由于特定数据只能是一种类型,因此我专门 “子类型”,从 DataType1 到 DataType10,如果是 DataType2 我 有另一个专业。显然,每个实体都有 不同的属性。

我认为要走的路是每个子类型,从 Data 实体继承 PK,因为只有 TimeStamp + ID_Device 无法区分一行是来自 DataType1 还是 DataTypeX。这意味着超类型 Data 实体不会变成表。

另一方面,如果我要为 Data 超类型创建一个表,我可以在特化关系中添加一个字段“type”,以便唯一标识每个数据行。

¿在这种情况下我应该如何处理? 既然我认为这两种选择都是正确的,那么哪一种提供更多的好处,为什么? 任何改进或建议都是允许的! :D

【问题讨论】:

  • 你用什么工具来画图?
  • 其实我是用笔和纸来做设计的。为了说明我的问题,我使用了 MS Visio

标签: database database-design entity-relationship


【解决方案1】:

您的 ERD 的错误是,您只需要 1 个数据类型表和一个子类型表。那么你应该在 Data 和 Aubtype 之间建立一个关系,在 subtype 和 datatype 之间建立另一个关系。

原因是,数据只属于某个子类型(湿度10,它本身就是湿度类型)

【讨论】:

  • 你告诉我应该有 1 个用于 DataType 的表和另一个用于 Subtype 的表。我不知道你在说“子类型”时指的是哪个实体以及应该有哪些字段。此外,如果每个 DataType 具有不同数量的字段,我也看不到如何将所有 DataTypes 组合在一个表中。也许我对自己的解释不够好,我会再试一次:一个设备可以产生不同类型的数据,但不是全部,只是一个子组。为简化起见,我们可以有 3 种数据类型(温度、湿度和压力)。现在我们可以让 Device1 产生 Temp 和 Hum,Device2 产生 Hum 和 Pressure。
【解决方案2】:

好吧,因为没有其他人给出答案并且我已经在实施,我将用我最终所做的来回答我自己的问题。

我应用了我给出的第一个选项,即从数据实体(ID_DEVICE、TIMESTAMP)继承 PK 到每个子类型中。所以超类型Data不会变成db中的表。

我这样做的原因是因为用户将要执行的查询类型。 95% 的情况下,查询将针对 1 个设备和 1 个特定数据类型进行,因此拥有一个包含对每个数据类型上的全部行数的引用的数据表实际上没有意义。

在这种情况下,如果我要求显示 DEVICE 1 生成的 DATATYPE3 的所有值,我应该首先查询通用 DATA 表(其中包含对所有其他 DATATYPES 的引用,即使我知道我不需要它们),然后,我应该查询 DATATYPE3 表以实际恢复所需的值(因为 DATA 表没有值)。我认为这非常无能。

希望这对某人有所帮助! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2022-01-10
    • 2021-05-31
    • 2018-05-20
    • 2015-07-09
    • 2016-06-28
    相关资源
    最近更新 更多