存储动态数据时,数据库的设计方法案例:现需要对一些设备的信息进行存储,设备的类型包括“除湿机”、“空调”、“风机”,其中“除湿机”的数据包括“温度”、“湿度”、“除湿状态”;空调的数据包括“温度”、“状态”;“风机”的数据包括“电流”、“电压”、“状态”。在设计的时候要考虑到设备类型可能会增加,每种类型的设备的数据种类也可能会改变。设计方案一: 将列数据转换为行数据存储类型表:存储设备类型TypeId
Name
1
除湿机
2
空调
3
风机
属性表:关联类型表,存储每种类型的属性PRopertyId
TypeId
Name
1
1
温度
2
1
湿度
3
1
除湿状态
4
2
温度
5
2
状态
6
3
电流
7
3
电压
8
3
状态
设备表:关联类型表,存储设备信息DeviceId
TypeId
Name
1
1
除湿机1
2
1
除湿机2
3
1
除湿机3
4
2
空调1
5
2
空调2
6
2
空调3
7
3
风机1
8
3
风机2
9
3
风机3
数据表:关联设备表,存储设备数据,但不包含具体的数据DataId
DeviceId
CTime
1
1
xxx
2
2
xxx
详细表:关联数据表和属性表,存储设备具体的数据DetailId
DataId
PropertyId
特点:标准的关系型数据库,设计好后基本不需要修改表的结构;在获取设备数据信息的时候,需要关联查询,当数据量较大时,会导致查询性能问题设计方案二:每种类型的设备新建一张表来存储类型表:存储设备类型和对应的表名TypeId
Name
TableName
1
除湿机
ChuShiJi
2
空调
KongTiao
3
风机
FengJi
属性表:关联类型表,存储设备属性和列名PropertyId
TypeId
Name
ColumnName
1
1
温度
WenDu
2
1
湿度
ShiDu
3
1
状态
ZhuangTai
4
2
温度
WenDu
5
2
状态
ZhuangTai
6
3
电流
DianLiu
7
3
电压
DianYa
8
3
状态
ZhuangTai
设备表:关联类型表,存储设备信息DeviceId
TypeId
Name
除湿机表:ChuShiJiId
CTime
WenDu
ShiDu
ZhuangTai
空调表:KongTiaoId
CTime
WenDu
ZhuangTai
风机表:Id
CTime
DianLiu
DianYa
ZhuangTai
特点:分表后,单表数据量会减少,单类型查询会很快;属性修改后需要修改相应的表结构,而且在查询前要先根据类型表和属性表定位查询位置设计方案三:使用分隔符把设备数据拼接后,存储到一列中类型表:存储设备类型TypeId
Name
属性表:关联类型表,存储每种类型的属性PropertyId
TypeId
Name
设备表:关联类型表,存储设备信息DeviceId
TypeId
Name
数据表:关联设备表,存储设备数据,其中一列存储所有的具体数据DataId
DeviceId
Data
温度※湿度※状态
特点:查询方便,但需要对具体的数据进行相关的操作,比如统计分析时会很麻烦设计方案四:单表多列存储类型表:存储设备类型TypeId
Name
1
除湿机
2
空调
3
风机
属性表:关联类型表,存储每种类型的属性和列名Id
TypeId
Name
ColumnName
1
1
温度
c1
2
1
湿度
c2
3
1
状态
c3