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