案例:現須要對一些設備的信息進行存儲,設備的類型包括「除溼機」、「空調」、「風機」,其中「除溼機」的數據包括「溫度」、「溼度」、「除溼狀態」;空調的數據包括「溫度」、「狀態」;「風機」的數據包括「電流」、「電壓」、「狀態」。在設計的時候要考慮到設備類型可能會增長,每種類型的設備的數據種類也可能會改變。
設計方案一: 將列數據轉換爲行數據存儲
類型表:存儲設備類型
Type
屬性表:關聯類型表,存儲每種類型的屬性
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
特色:標準的關係型數據庫,設計好後基本不須要修改表的結構;在獲取設備數據信息的時候,須要關聯查詢,當數據量較大時,會致使查詢性能問題
設計方案二:每種類型的設備新建一張表來存儲
類型表:存儲設備類型和對應的表名
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
除溼機表:
ChuShiJi
Id |
CTime |
WenDu |
ShiDu |
ZhuangTai |
|
|
|
|
|
空調錶:
KongTiao
風機表:
Id |
CTime |
DianLiu |
DianYa |
ZhuangTai |
|
|
|
|
|
特色:分表後,單表數據量會減小,單類型查詢會很快;屬性修改後須要修改相應的表結構,並且在查詢前要先根據類型表和屬性表定位查詢位置
設計方案三:使用分隔符把設備數據拼接後,存儲到一列中
類型表:存儲設備類型
Type
屬性表:關聯類型表,存儲每種類型的屬性
Property
設備表:關聯類型表,存儲設備信息
Device
數據表:關聯設備表,存儲設備數據,其中一列存儲全部的具體數據
Data
Id |
DeviceId |
Data |
|
|
溫度※溼度※狀態 |
特色:查詢方便,但須要對具體的數據進行相關的操做,好比統計分析時會很麻煩
設計方案四:單表多列存儲
類型表:存儲設備類型
Type
屬性表:關聯類型表,存儲每種類型的屬性和列名
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 |
CTime |
DeviceId |
c1 |
c2 |
c3 |
c4 |
c5…… |
|
|
|
|
|
|
|
|
特色:根據屬性表中存儲的列名,直接關聯到數據表中具體的列,因此具體的數據能夠存儲到「數據表」符合數據類型的任意一列中