(7)在經(jīng)過(guò)分析后確認(rèn)所有的表都滿足二、三、四范式的情況下,表和表之間的關(guān)聯(lián)盡量采用弱關(guān)聯(lián)以便于對(duì)表字段和表結(jié)構(gòu)的調(diào)整和重構(gòu)。并且,我認(rèn)為數(shù)據(jù)庫(kù)中的表是用來(lái)持久化一個(gè)對(duì)象實(shí)例在特定時(shí)間及特定條件下的狀態(tài)的,只是一個(gè)存儲(chǔ)介質(zhì),所以,表和表之間也不應(yīng)用強(qiáng)關(guān)聯(lián)來(lái)表述業(yè)務(wù)(數(shù)據(jù)間的一致性),這一職責(zé)應(yīng)由系統(tǒng)的邏輯層來(lái)保證,這種方式也確保了系統(tǒng)對(duì)于不正確數(shù)據(jù)(臟數(shù)據(jù))的兼容性。當(dāng)然,從整個(gè)系統(tǒng)的角度來(lái)說(shuō)我們還是要盡最大努力確保系統(tǒng)不會(huì)產(chǎn)生臟數(shù)據(jù),單從另一個(gè)角度來(lái)說(shuō),臟數(shù)據(jù)的產(chǎn)生在一定程度上也是不可避免的,我們也要保證系統(tǒng)對(duì)這種情況的容錯(cuò)性。這是一個(gè)折中的方案。
(8)應(yīng)針對(duì)所有表的主鍵和外鍵建立索引,有針對(duì)性的(針對(duì)一些大數(shù)據(jù)量和常用檢索方式)建立組合屬性的索引,提高檢索效率。雖然建立索引會(huì)消耗部分系統(tǒng)資源,但比較起在檢索時(shí)搜索整張表中的數(shù)據(jù)尤其時(shí)表中的數(shù)據(jù)量較大時(shí)所帶來(lái)的性能影響,以及無(wú)索引時(shí)的排序操作所帶來(lái)的性能影響,這種方式仍然是值得提倡的。
(9)盡量少采用存儲(chǔ)過(guò)程,目前已經(jīng)有很多技術(shù)可以替代存儲(chǔ)過(guò)程的功能如“對(duì)象/關(guān)系映射”等,將數(shù)據(jù)一致性的保證放在數(shù)據(jù)庫(kù)中,無(wú)論對(duì)于版本控制、開(kāi)發(fā)和部署、以及數(shù)據(jù)庫(kù)的遷移都會(huì)帶來(lái)很大的影響。但不可否認(rèn),存儲(chǔ)過(guò)程具有性能上的優(yōu)勢(shì),所以,當(dāng)系統(tǒng)可使用的硬件不會(huì)得到提升而性能又是非常重要的質(zhì)量屬性時(shí),可經(jīng)過(guò)平衡考慮選用存儲(chǔ)過(guò)程。
(10)當(dāng)處理表間的關(guān)聯(lián)約束所付出的代價(jià)(常常是使用性上的代價(jià))超過(guò)了保證不會(huì)出現(xiàn)修改、刪除、更改異常所付出的代價(jià),并且數(shù)據(jù)冗余也不是主要的問(wèn)題時(shí),表設(shè)計(jì)可以不符合四個(gè)范式。四個(gè)范式確保了不會(huì)出現(xiàn)異常,但也可能由此導(dǎo)致過(guò)于純潔的設(shè)計(jì),使得表結(jié)構(gòu)難于使用,所以在設(shè)計(jì)時(shí)需要進(jìn)行綜合判斷,但首先確保符合四個(gè)范式,然后再進(jìn)行精化修正是剛剛進(jìn)入數(shù)據(jù)庫(kù)設(shè)計(jì)領(lǐng)域時(shí)可以采用的最好辦法。
(11)設(shè)計(jì)出的表要具有較好的使用性,主要體現(xiàn)在查詢時(shí)是否需要關(guān)聯(lián)多張表且還需使用復(fù)雜的SQL技巧。
(12)設(shè)計(jì)出的表要盡可能減少數(shù)據(jù)冗余,確保數(shù)據(jù)的準(zhǔn)確性,有效的控制冗余有助于提高數(shù)據(jù)庫(kù)的性能。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |