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

浙公网安备 33010602011771号