存储动态数据时,数据库的设计方法
案例:现需要对一些设备的信息进行存储,设备的类型包括“除湿机”、“空调”、“风机”,其中“除湿机”的数据包括“温度”、“湿度”、“除湿状态”;空调的数据包括“温度”、“状态”;“风机”的数据包括“电流”、“电压”、“状态”。在设计的时候要考虑到设备类型可能会增加,每种类型的设备的数据种类也可能会改变。
设计方案一: 将列数据转换为行数据存储
类型表:存储设备类型
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…… |
特点:根据属性表中存储的列名,直接关联到数据表中具体的列,所以具体的数据可以存储到“数据表”符合数据类型的任意一列中
作者:sy
出处:http://www.cnblogs.com/sydeveloper
QQ:522733724
本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利