<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 154  文章 - 60  trackbacks - 0
    <2008年2月>
    272829303112
    3456789
    10111213141516
    17181920212223
    2425262728291
    2345678

    聲明:

    該blog是為了收集資料,認(rèn)識朋友,學(xué)習(xí)、提高技術(shù),所以本blog的內(nèi)容除非聲明,否則一律為轉(zhuǎn)載!!

    感謝那些公開自己技術(shù)成果的高人們!!!

    支持開源,尊重他人的勞動(dòng)!!

    常用鏈接

    留言簿(3)

    隨筆分類(148)

    隨筆檔案(143)

    收藏夾(2)

    其他

    學(xué)習(xí)(技術(shù))

    觀察思考(非技術(shù))

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)方法及原則
    Author: Chancey 
     
    在目前的企業(yè)信息系統(tǒng)中,數(shù)據(jù)庫還是最佳的數(shù)據(jù)存儲方式,雖然已經(jīng)有很多的書籍在指導(dǎo)我們進(jìn)行數(shù)據(jù)庫設(shè)計(jì),但應(yīng)該那種方式是設(shè)計(jì)數(shù)據(jù)庫的表結(jié)構(gòu)的最好方法、設(shè)計(jì)時(shí)應(yīng)遵從什么樣的原則、四個(gè)范式如何能夠用一種方式達(dá)到順暢的應(yīng)用等是我一直在思考和總結(jié)的問題,下文是我針對這幾個(gè)問題根據(jù)自己的設(shè)計(jì)經(jīng)歷準(zhǔn)備總結(jié)的一篇文章的提綱,歡迎大家一塊進(jìn)行探討,集思廣益。其中提到了領(lǐng)域建模的概念,但未作詳細(xì)解釋,希望以后能夠有時(shí)間我們針對這個(gè)命題進(jìn)行深入探討。


    1)不應(yīng)該針對整個(gè)系統(tǒng)進(jìn)行數(shù)據(jù)庫設(shè)計(jì),而應(yīng)該根據(jù)系統(tǒng)架構(gòu)中的組件劃分,針對每個(gè)組件所處理的業(yè)務(wù)進(jìn)行組件單元的數(shù)據(jù)庫設(shè)計(jì);不同組件間所對應(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è)主鍵,確保組件對應(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é)定義對象。對象要符合封裝的特性,確保與職責(zé)相關(guān)的數(shù)據(jù)項(xiàng)被定義在一個(gè)對象之內(nèi),這些數(shù)據(jù)項(xiàng)能夠完整描述該職責(zé),不會出現(xiàn)職責(zé)描述缺失。并且一個(gè)對象有且只有一項(xiàng)職責(zé),如果一個(gè)對象要負(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)鍵字不會參與業(yè)務(wù)且不會出現(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è)對象只有一項(xiàng)職責(zé),所以對象中的數(shù)據(jù)項(xiàng)不存在傳遞依賴,所以,這種思路的數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)從一開始即滿足第三范式:一個(gè)表應(yīng)滿足第二范式,且屬性間不存在傳遞依賴。

    5)同樣,由于對象職責(zé)的單一性以及對象之間的關(guān)系反映的是業(yè)務(wù)邏輯之間的關(guān)系,所以在領(lǐng)域模型中的對象存在主對象和從對象之分,從對象是從1-N或N-N的角度進(jìn)一步主對象的業(yè)務(wù)邏輯,所以從對象及對象關(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)域模型中的對象具有至少兩個(gè)以上的職責(zé),應(yīng)根據(jù)第一條進(jìn)行設(shè)計(jì)修正。第四范式:一個(gè)表如果滿足BCNF,不應(yīng)存在多值依賴。

    7)在經(jīng)過分析后確認(rèn)所有的表都滿足二、三、四范式的情況下,表和表之間的關(guān)聯(lián)盡量采用弱關(guān)聯(lián)以便于對表字段和表結(jié)構(gòu)的調(diào)整和重構(gòu)。并且,我認(rèn)為數(shù)據(jù)庫中的表是用來持久化一個(gè)對象實(shí)例在特定時(shí)間及特定條件下的狀態(tài)的,只是一個(gè)存儲介質(zhì),所以,表和表之間也不應(yīng)用強(qiáng)關(guān)聯(lián)來表述業(yè)務(wù)(數(shù)據(jù)間的一致性),這一職責(zé)應(yīng)由系統(tǒng)的邏輯層來保證,這種方式也確保了系統(tǒng)對于不正確數(shù)據(jù)(臟數(shù)據(jù))的兼容性。當(dāng)然,從整個(gè)系統(tǒng)的角度來說我們還是要盡最大努力確保系統(tǒng)不會產(chǎn)生臟數(shù)據(jù),單從另一個(gè)角度來說,臟數(shù)據(jù)的產(chǎn)生在一定程度上也是不可避免的,我們也要保證系統(tǒng)對這種情況的容錯(cuò)性。這是一個(gè)折中的方案。

    8)應(yīng)針對所有表的主鍵和外鍵建立索引,有針對性的(針對一些大數(shù)據(jù)量和常用檢索方式)建立組合屬性的索引,提高檢索效率。雖然建立索引會消耗部分系統(tǒng)資源,但比較起在檢索時(shí)搜索整張表中的數(shù)據(jù)尤其時(shí)表中的數(shù)據(jù)量較大時(shí)所帶來的性能影響,以及無索引時(shí)的排序操作所帶來的性能影響,這種方式仍然是值得提倡的。

    9)盡量少采用存儲過程,目前已經(jīng)有很多技術(shù)可以替代存儲過程的功能如“對象/關(guān)系映射”等,將數(shù)據(jù)一致性的保證放在數(shù)據(jù)庫中,無論對于版本控制、開發(fā)和部署、以及數(shù)據(jù)庫的遷移都會帶來很大的影響。但不可否認(rèn),存儲過程具有性能上的優(yōu)勢,所以,當(dāng)系統(tǒng)可使用的硬件不會得到提升而性能又是非常重要的質(zhì)量屬性時(shí),可經(jīng)過平衡考慮選用存儲過程。

    10)當(dāng)處理表間的關(guān)聯(lián)約束所付出的代價(jià)(常常是使用性上的代價(jià))超過了保證不會出現(xiàn)修改、刪除、更改異常所付出的代價(jià),并且數(shù)據(jù)冗余也不是主要的問題時(shí),表設(shè)計(jì)可以不符合四個(gè)范式。四個(gè)范式確保了不會出現(xiàn)異常,但也可能由此導(dǎo)致過于純潔的設(shè)計(jì),使得表結(jié)構(gòu)難于使用,所以在設(shè)計(jì)時(shí)需要進(jìn)行綜合判斷,但首先確保符合四個(gè)范式,然后再進(jìn)行精化修正是剛剛進(jìn)入數(shù)據(jù)庫設(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ù)庫的性能。

     

    posted on 2008-02-18 09:55 lk 閱讀(7655) 評論(2)  編輯  收藏 所屬分類: DB

    FeedBack:
    # re: 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)方法及原則 2008-03-24 19:51 wlx
    內(nèi)容寫的有點(diǎn)多,不過看起來還挺好理解的,謝謝了  回復(fù)  更多評論
      
    # re: 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)方法及原則 2008-11-17 13:11 rory
    not well understand.  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲一区AV无码少妇电影☆| 亚洲精品A在线观看| 亚洲国产人成在线观看69网站| eeuss影院免费直达入口| vvvv99日韩精品亚洲| 黄色免费在线观看网址| 亚洲精品国产精品乱码不卞 | 亚洲精品国产国语| 久久久高清免费视频| 国产成人亚洲综合一区| 麻豆国产精品入口免费观看| 久久亚洲色WWW成人欧美| 五月婷婷亚洲综合| 精品多毛少妇人妻AV免费久久| 亚洲开心婷婷中文字幕| 十九岁在线观看免费完整版电影| 亚洲网站在线播放| 99视频在线精品免费观看6| 亚洲丶国产丶欧美一区二区三区 | 国产成人高清精品免费观看| 中文亚洲AV片在线观看不卡| 小日子的在线观看免费| 久久久久se色偷偷亚洲精品av| 男女交性永久免费视频播放| 美女黄频视频大全免费的| 亚洲一区爱区精品无码| 中文字幕天天躁日日躁狠狠躁免费| 亚洲精品国产日韩| 亚洲人成无码网WWW| 91短视频在线免费观看| 亚洲性无码一区二区三区| 亚洲国产av无码精品| 久久免费线看线看| 亚洲人成网站色7799| 亚洲午夜久久久久久久久久 | 国产成人精品日本亚洲语音| 亚洲国产精品一区第二页 | 最好看最新的中文字幕免费 | 亚洲AV噜噜一区二区三区| 亚洲色无码专区在线观看| 国产成人精品免费视频网页大全|