我正在设计一个数据库并发现我不确定该怎么做的情况,所以首先让我们用图像说明 ER 图的一部分:
如您所见,我有以下内容:
- 设备产生 0:N 数据
- 产生的数据可以是不同的DataType(例如,一个设备可以同时产生温度数据和湿度数据)
- 特定数据仅由 1:1 设备生成
- Device和Data之间的1:N关系。由于数据是一个弱实体(没有设备就不能存在数据),我将在由 ID_DEVICE 和 TIMESTAMP 形成的数据中拥有一个复合 PK(未在图像中表示)
- 由于特定数据只能是一种类型,因此我有专门的“子类型”,从 DataType1 到 DataType10,如果是 DataType2,我有另一种专门化。显然,这些实体中的每一个都具有不同的属性。
我认为要走的路是针对每个子类型,从 Data 实体继承 PK,因为只有 TimeStamp + ID_Device 无法区分行是来自 DataType1 还是来自 DataTypeX。这意味着超类型数据实体不会成为表。
另一方面,如果我应该为 Data 超类型创建一个表,我可以在专业化关系中添加一个字段“type”,以便唯一标识每个数据行。
¿ 在这种情况下我应该如何进行?既然我认为这两种选择都是正确的,那么哪一种提供更多的好处,为什么?任何改进或建议都是允许的!:D