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