數據表的設計原則:
(1)不應針對整個系統(tǒng)進行數據庫設計,而應該根據系統(tǒng)架構中的組件劃分,針對每個組件所處理的業(yè)務進行組件單元的數據庫設計;不同組件間所對應的數據庫表之間的關聯(lián)應盡可能減少,如果不同組件間的表需要外鍵關聯(lián)也盡量不要創(chuàng)建外鍵關聯(lián),而只是記錄關聯(lián)表的一個主鍵,確保組件對應的表之間的獨立性,為系統(tǒng)或表結構的重構提供可能性。
(2)采用領域模型驅動的方式和自頂向下的思路進行數據庫設計,首先分析系統(tǒng)業(yè)務,根據職責定義對象。對象要符合封裝的特性,確保與職責相關的數據項被定義在一個對象之內,這些數據項能夠完整描述該職責,不會出現職責描述缺失。并且一個對象有且只有一項職責,如果一個對象要負責兩個或兩個以上的職責,應進行分拆。
(3)根據建立的領域模型進行數據庫表的映射,此時應參考數據庫設計第二范式:一個表中的所有非關鍵字屬性都依賴于整個關鍵字。關鍵字可以是一個屬性,也可以是多個屬性的集合,不論那種方式,都應確保關鍵字能夠保證唯一性。在確定關鍵字時,應保證關鍵字不會參與業(yè)務且不會出現更新異常,這時,最優(yōu)解決方案為采用一個自增數值型屬性或一個隨機字符串作為表的關鍵字。
(4)由于第一點所述的領域模型驅動的方式設計數據庫表結構,領域模型中的每一個對象只有一項職責,所以對象中的數據項不存在傳遞依賴,所以,這種思路的數據庫表結構設計從一開始即滿足第三范式:一個表應滿足第二范式,且屬性間不存在傳遞依賴。
(5)同樣,由于對象職責的單一性以及對象之間的關系反映的是業(yè)務邏輯之間的關系,所以在領域模型中的對象存在主對象和從對象之分,從對象是從1-N或N-N的角度進一步主對象的業(yè)務邏輯,所以從對象及對象關系映射為的表及表關聯(lián)關系不存在刪除和插入異常。
(6)在映射后得出的數據庫表結構中,應再根據第四范式進行進一步修改,確保不存在多值依賴。這時,應根據反向工程的思路反饋給領域模型。如果表結構中存在多值依賴,則證明領域模型中的對象具有至少兩個以上的職責,應根據第一條進行設計修正。第四范式:一個表如果滿足BCNF,不應存在多值依賴。
相關推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |