數據庫的動態數據存儲設計

案例:現須要對一些設備的信息進行存儲,設備的類型包括「除溼機」、「空調」、「風機」,其中「除溼機」的數據包括「溫度」、「溼度」、「除溼狀態」;空調的數據包括「溫度」、「狀態」;「風機」的數據包括「電流」、「電壓」、「狀態」。在設計的時候要考慮到設備類型可能會增長,每種類型的設備的數據種類也可能會改變。數據庫

 

設計方案一: 將列數據轉換爲行數據存儲性能

 

類型表:存儲設備類型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……
               

 

特色:根據屬性表中存儲的列名,直接關聯到數據表中具體的列,因此具體的數據能夠存儲到「數據表」符合數據類型的任意一列中

相關文章
相關標籤/搜索