在ER图中实现专门的实体

时间:2013-04-30 12:16:12

标签: database database-design entity-relationship

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

ER diagram

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

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

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

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

¿我应该如何处理这个案子? 既然我认为这两个选项都是正确的,哪一个提供更多的好处,为什么? 允许任何改进或建议! :d

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

我应用了我给出的第一个选项,即将数据实体(ID_DEVICE,TIMESTAMP)中的PK继承到每个子类型中。因此,超类型数据不会成为数据库中的表。

我这样做的原因是因为用户要做的查询类型。 95%的情况下,查询将在1个设备和1个特定数据类型中完成,因此拥有一个包含对每个数据类型的WHOLE行数的引用的Data表并没有多大意义。

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

希望这有助于某人! :)

相关问题