我正在设计一个数据库并找到一个我不知道该怎么做的情况,所以首先让我们用图像说明部分ER图:
如您所见,我有以下内容:
我认为要走的是每个子类型,从Data实体继承PK,因为只有TimeStamp + ID_Device才能区分行是来自DataType1还是DataTypeX。这意味着超类型数据实体不会成为一个表。
另一方面,如果我应该为Data超类型创建一个表,我可以在专门化关系中添加一个字段“type”,以便唯一地标识每个数据行。
¿我应该如何处理这个案子? 既然我认为这两个选项都是正确的,哪一个提供更多的好处,为什么? 允许任何改进或建议! :d
答案 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表没有值)。我认为这非常有用。
希望这有助于某人! :)