存儲動態數據時,數據庫的設計方法

案例:現須要對一些設備的信息進行存儲,設備的類型包括「除溼機」、「空調」、「風機」,其中「除溼機」的數據包括「溫度」、「溼度」、「除溼狀態」;空調的數據包括「溫度」、「狀態」;「風機」的數據包括「電流」、「電壓」、「狀態」。在設計的時候要考慮到設備類型可能會增長,每種類型的設備的數據種類也可能會改變。
 
設計方案一: 將列數據轉換爲行數據存儲
 
類型表:存儲設備類型
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……
               
 
特色:根據屬性表中存儲的列名,直接關聯到數據表中具體的列,因此具體的數據能夠存儲到「數據表」符合數據類型的任意一列中
相關文章
相關標籤/搜索