一、應用數據模型概念

二、應用數據模型設計原則
關注點:重點關注數據量大、訪問頻繁的實體進行應用數據模型的整改,如合約、結算、客戶。
集成度:過多地進行數據冗餘和衍生則會導致靈活性下降,同時增加維護數據集成的複雜度。如合約中增加結算、客戶信息。
最小化:為了維護數據模型的靈活性和可擴展性,盡量遵循對企業級邏輯模型最小化修改的原則。
存儲量:數據模型根據非範式化原則進行考慮,則很容易導致數據冗餘,從而加大對數據庫存儲需求的增加。
三、應用數據模型設計內容

非範式化與範式化:
範式化數據模型:企業級數據模型是在範式化的應用規則下,考慮靈活性、重用性等原則建立的。由於範式化不建議數據冗餘等使用原則,因此為了充分體現數據關係的清晰性,從而使數據實體相對分散,在應用數據模型進行直接使用,則會由於多表關聯查詢、訪問路徑長等原因導致應用系統的處理能力下降。
非範式化數據模型:應用數據模型設計的主要活動是在企業級邏輯數據模型的基礎上結合本應用的特徵、性能等因素進行非範式化的過程。對數據模型的非範式化應用雖然可以通過合併實體等方法減少數據實體之間的聯合查詢從而最大化地提高數據庫訪問性能和減少數據管理的複雜度,但也會導致不良的效果,如數據集成規則複雜化、數據更新不規則化,同時也大大降低了數據模型的靈活性和重用性原則。因此應用數據模型在設計時必須堅持考慮靈活性和高性能之間的平衡關係。
四、應用數據模型設計方法
1、實體整合原則
(1)超類或子類實體整合

如果子類屬性很少,就將子類屬性上移;否則,也是大多數情況下,則將「超類下移」。
1)子類上移的影響
- 實體數據量相對較大
- 具有空值(或默認值)的屬性的數量增加
- 子類屬性上移後將含義不清
- 結構簡單,要控制的實體較少
2)超類下移的影響
- 實體數據量相對較少
- 具有空值(或默認值)的屬性的數量相等
- 每個子類屬性的含義清晰
- 結構相對複雜,有更多的實體要控制
- 有時需要進行將所有子類實體數據組合的操作
(2)實體上移或下移
如果兩個實體同時訪問和創建的可能性很高,則可以整合為一個實體。這些動作創建了包含兩個實體組合屬性的非範式化實體。

(3)實體上移
「上移」有兩種方法,第一種方法,子實體的屬性信息無法直接作為查詢條件,則此時可以將子實體的信息上移到主實體信息中,如下:

方法2,將需要訪問的屬性信息上移到主實體中直接進行訪問,則會導致數據的靈活性降低。

(4)部分上移
有些情況下,將實體中的屬性信息採用部分「上移」。但是這樣做相比全部「上移」,增加了應用的複雜性,一般情況下所以很少使用。若關係信息大多是1對1的關係,則可以採用此方法。

(5)實體下移
當主實體屬性不多,且主實體屬性不會改變的時候,則可以採用下移方法,否則將會增大數據量存儲,或對維護數據的一致性造成複雜性。

(6)重複組整合
實體的重複數據是確定的,同時操作較為固定,則可以將主實體中按行存儲的屬性信息進行重複組組合,將公共信息進行抽取,非公共信息按照多列進行存儲,對於無法一行存儲的信息則可以折行存儲。這樣做可能會導致數據訪問的複雜度增加,從而增加系統的運行效率。

2、實體分割原則
實體分割是將一個大的數據實體縱向或橫向分成幾個較小的數據實體。目的是減少數據實體的大小,從而提高數據訪問的效率和可管理性。實體分割分為縱向分割和橫向分割兩種。
當實體數據量巨大,並且實體的訪問邏輯都不盡相同,則可以考慮對實體進行分割;
實體分割優點:
① 根據實體訪問的邏輯情況將對數據實體可能被掃描的屬性信息分割出來形成新的實體,則可以提高數據訪問的性能;
② 可以簡化數據實體的管理,如降低數據備份、數據清理、數據恢復的成本,提高索引維護的效率。
實體分割缺點:
① 增加了物理表的數量,從而加大了數據庫的管理複雜度;
② 增加了程序代碼編寫的複雜性,如需要根據不同的業務邏輯訪問不同的數據庫代碼;
③ 不能使用簡單的join語句進行聯合查詢;需要程序代碼進行邏輯判斷定位。
實體縱向分割
縱向分割是把一個實體拆分成兩個或多個實體,每個包含一套不同的源實體的非主鍵屬性。
當訪問模式不同時,建議採用縱向分割實體的方法。
縱向分割的優點:
① 降低實體的大小:把實體中很少被使用的屬性信息分割出來,從而降低實體的大小,提高
了實體的訪問速度。
② 避免實體鎖表:實體的屬性可能被多種處理邏輯進行隨機訪問,從而加大了數據庫鎖表的
風險,當實體被分割後,則只為某一類或幾類訪問邏輯相似的進程訪問,則避免了實體鎖表
的風險,並且還能大大提高數據訪問的效率。

實體橫向分割
「橫向地」把一個實體分割成兩個或多個實體,每個實體都包含源實體的所有屬性信息,但基於數值的不同,每個實體會包含一套不同的數據子集,當訪問範圍不同時橫向分割實體的方法則經常被採用。如合約基本信息按照合約類型進行橫向分割,如個人活期存款合約、個人定期存款合約、個人卡服務合約、單位存款合約、貸款合約、內部合約、其他普通合約實體等。

實體橫向循環分割
當一個數據實體存儲大量很少使用的歷史屬性信息時,則可以通過橫向循環分割的方法將實體按照一定的循環規則進行物理分割,從而提高應用需要快速獲取數據查詢結果的效率。如:合約交易明細表,可以按年進行存儲,則可以將合約明細表橫向分割為12張表,每個月訪問一張表,當下一年時,循環使用這12張表進行數據存儲。這樣不僅可以提高數據訪問的效率,同時也能減少數據存儲壓力。

3、衍生屬性原則
優點:在主實體信息中創建從屬實體的指示標識屬性信息,作為主實體信息的衍生屬性進行存在,目的是為了提高快速查詢從屬實體信息的效率。這對增強數據訪問性能及可用性,以及對數據模型的最小化影響都是很有用的。這種原則下,當從屬信息創建和刪除時,只需要對主實體中的衍生信息標識進行更新即可。
缺點:但是經常變更的屬性信息不建議進行衍生存儲,如利率信息等,當利率發生變化則衍生信息也需要跟着變化,否則會導致數據信息不一致,從而影響數據的有效性和可靠性。
4、冗餘屬性原則
優點:將一個數據實體中的部分屬性信息複製到另一個數據實體中,這樣做的目的是為了將常用的屬性信息複製到經常訪問的數據實體中去,從而減少對數據實體的聯合訪問,縮短數據庫的訪問路徑,大大地提高了系統的處理性能。
缺點:但是將哪些屬性信息可以通過這種方案進行複製,需要根據屬性內容變更的頻繁度來進行考慮。如客戶號相對穩定,因此可以將客戶號信息存儲在合約信息中;再如客戶地址信息,一般情況下,每個地址信息都會分配一個地址編號,而地址編號相對穩定,地址詳細信息則會經常進行變更,因此將地址詳細放在合約信息中,可以提高生成對賬單等處理的效率,但是變更相對頻繁,反而會加大數據集成的複雜度和數據不一致的風險存在,因此不建議將地址信息存儲在合約信息中。
5、代理主鍵原則
關於實體普通主鍵和代理主鍵有很多爭論,但是如果應用從不使用普通主鍵作為搜索條件,就像接口實體在使用時是對數據實體逐條記錄進行全表掃描,則在這種情況下,只是出於建立一個唯一鍵值的考慮,可以使用代理主鍵的概念。一般情況下代理主鍵沒有業務含義,僅用於標識。

6、屬性擺放原則
- 實體的屬性擺放也是影響數據庫性能的一個主要因素;
- 經常被訪問的屬性應該放在數據實體的前面;
- 經常被訪問的屬性應該在數據實體中連續定義;
- 實體中的變長數據信息建議放在數據實體的後面;
- 合理選擇數據類型,一般情況下從查詢處理角度來看,數值型屬性比字符型屬性的處理效率高,因此盡量採用數值型來代替屬性的字符型定義。如是否類屬性,一般情況下我們定義為char(1),則為了提高效率可以定義為decimal(1,0);代碼類屬性,一般情況下我們定義為char(2)~char(6),則可以用int類型來進行定義。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/282140.html