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

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

 

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

 

类型表:存储设备类型spa

Type设计

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

 

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

Propertytable

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

 

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

Deviceim

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……
               

 

特色:根据属性表中存储的列名,直接关联到数据表中具体的列,因此具体的数据能够存储到“数据表”符合数据类型的任意一列中

相关文章
相关标签/搜索