数据库的动态数据存储设计

2016/09/03 10:41
阅读数 169

案例:现需要对一些设备的信息进行存储,设备的类型包括“除湿机”、“空调”、“风机”,其中“除湿机”的数据包括“温度”、“湿度”、“除湿状态”;空调的数据包括“温度”、“状态”;“风机”的数据包括“电流”、“电压”、“状态”。在设计的时候要考虑到设备类型可能会增加,每种类型的设备的数据种类也可能会改变。

 

设计方案一: 将列数据转换为行数据存储

 

类型表:存储设备类型

Type

Id Name
1 除湿机
2 空调
3 风机

 

属性表:关联类型表,存储每种类型的属性

Property

Id TypeId Name
1 1 温度
2 1 湿度
3 1 除湿状态
4 2 温度
5 2 状态
6 3 电流
7 3 电压
8 3 状态

 

设备表:关联类型表,存储设备信息

Device

Id 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

 

数据表:关联设备表,存储设备数据,但不包含具体的数据

Data

Id DeviceId CTime
1 1 xxx
2 2 xxx

 

详细表:关联数据表和属性表,存储设备具体的数据

Detail

Id DataId PropertyId
     

 

特点:标准的关系型数据库,设计好后基本不需要修改表的结构;在获取设备数据信息的时候,需要关联查询,当数据量较大时,会导致查询性能问题

 

设计方案二:每种类型的设备新建一张表来存储

 

类型表:存储设备类型和对应的表名

Type

Id Name TableName
1 除湿机 ChuShiJi
2 空调 KongTiao
3 风机 FengJi

 

属性表:关联类型表,存储设备属性和列名

Property

Id 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

 

设备表:关联类型表,存储设备信息

Device

Id TypeId Name
     

 

除湿机表:

ChuShiJi

Id CTime WenDu ShiDu ZhuangTai
         

 

空调表:

KongTiao

Id CTime WenDu ZhuangTai
       

 

风机表:

Id CTime DianLiu DianYa ZhuangTai
         

 

特点:分表后,单表数据量会减少,单类型查询会很快;属性修改后需要修改相应的表结构,而且在查询前要先根据类型表和属性表定位查询位置

 

设计方案三:使用分隔符把设备数据拼接后,存储到一列中

 

类型表:存储设备类型

Type

Id Name
   

 

属性表:关联类型表,存储每种类型的属性

Property

Id TypeId Name
     

 

设备表:关联类型表,存储设备信息

Device

Id TypeId Name
     

 

数据表:关联设备表,存储设备数据,其中一列存储所有的具体数据

Data

Id DeviceId Data
    温度※湿度※状态

 

特点:查询方便,但需要对具体的数据进行相关的操作,比如统计分析时会很麻烦

 

设计方案四:单表多列存储

 

类型表:存储设备类型

Type

Id Name
1 除湿机
2 空调
3 风机

 

属性表:关联类型表,存储每种类型的属性和列名

Id TypeId Name ColumnName
1 1 温度 c1
2 1 湿度 c2
3 1 状态 c3
4 2 温度 c1
5 2 状态 c3
6 3 电流 c1
7 3 电压 c2
8 3 状态 c3

 

设备表:关联类型表,存储设备信息

Id TypeId Name
     

 

数据表:关联设备表,存储设备数据,具体数据存储到多列中

Id CTime DeviceId c1 c2 c3 c4 c5……
               

 

特点:根据属性表中存储的列名,直接关联到数据表中具体的列,所以具体的数据可以存储到“数据表”符合数据类型的任意一列中

展开阅读全文
加载中

作者的其它热门文章

打赏
0
5 收藏
分享
打赏
0 评论
5 收藏
0
分享
返回顶部
顶部