posts - 297,  comments - 1618,  trackbacks - 0

          設(shè)計(jì)之路:數(shù)據(jù)庫設(shè)計(jì)的心得(一)

          /阿蜜果

          日期:/2013-4-17

          1、定義命名規(guī)范——沒有規(guī)矩不成方圓

                   在數(shù)據(jù)庫設(shè)計(jì)之初,為了管理和維護(hù)方便,事先定義索引、觸發(fā)器、視圖、外鍵、字段名、表名等的命名規(guī)范。沒有規(guī)矩就不成方圓。

          2、字段適當(dāng)冗余——提供處理速度

          設(shè)計(jì)關(guān)系數(shù)據(jù)庫時(shí),遵從不同的規(guī)范要求,設(shè)計(jì)出合理的關(guān)系型數(shù)據(jù)庫,這些不同的規(guī)范要求被稱為不同的范式,各種范式呈遞次規(guī)范,越高的范式數(shù)據(jù)庫冗余越小。

          目前關(guān)系數(shù)據(jù)庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。滿足最低要求的范式是第一范式(1NF)。在第一范式的基礎(chǔ)上進(jìn)一步滿足更多規(guī)范要求的稱為第二范式(2NF),其余范式以次類推。一般說來,數(shù)據(jù)庫只需滿足第三范式(3NF)就行了。

          第三范式(3NF)要求一個(gè)數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關(guān)鍵字信息。例如,存在一個(gè)部門信息表,其中每個(gè)部門有部門編號、部門名稱、部門簡介等信息。那么在員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關(guān)的信息再加入員工信息表中。如果不存在部門信息表,則根據(jù)第三范式(3NF)也應(yīng)該構(gòu)建它,否則就會有大量的數(shù)據(jù)冗余。

          但往往在進(jìn)行數(shù)據(jù)庫設(shè)計(jì)的時(shí)候,為了提高處理速度提倡適當(dāng)冗余。只有低級冗余才會增加數(shù)據(jù)的不一致性,因?yàn)橥粩?shù)據(jù),可能從不同時(shí)間、地點(diǎn)、角色上多次錄入。因此,我們提倡高級冗余(派生性冗余),反對低級冗余(重復(fù)性冗余)。

          例如某個(gè)表中有“總結(jié)算金額”、“SI比率”、“運(yùn)營商比率”字段,為了提高處理速度可適當(dāng)冗余加入“SI結(jié)算總金額”和“運(yùn)營商結(jié)算金額”字段。

          又如“考核信息表”中會有某次考核的“總分”、“考核日期”字段,在具體的各個(gè)考核指標(biāo)打分表“考核數(shù)據(jù)表”中加入“考核日期”字段。

          設(shè)計(jì)人員需要在數(shù)據(jù)冗余和處理速度中找到適當(dāng)?shù)钠胶恻c(diǎn)。

          3、主鍵取值——自增主鍵 or UUID

                   主鍵是供程序員使用的表間連接工具,一般可采用自增主鍵、UUID等,不建議將具有物理意義的字段或字段組合作為主鍵。例如將登錄名作為主鍵等。如果需要多個(gè)字段作為聯(lián)合主鍵,建議采用無意義的代理字段作為主鍵。聯(lián)合主鍵的字段個(gè)數(shù)太多時(shí)不但索引空間大,而且速度慢。

          4、基本表提供CODE字段

                   當(dāng)系統(tǒng)與多個(gè)外圍系統(tǒng)有關(guān)系,而且需要保持唯一字段保持一致時(shí)。建議采用CODE(編號)字段與其它系統(tǒng)建立關(guān)系,ID字段可以是UUIDCODE字段可以系統(tǒng)自己定義規(guī)則。可能對于獨(dú)立的系統(tǒng)加上CODE字段有點(diǎn)多余,但對于與外圍關(guān)系復(fù)雜的系統(tǒng),你會認(rèn)識到必要性。

          5、分解多對多關(guān)系——使用關(guān)聯(lián)表

                   分解多對多關(guān)系的辦法就是添加中間表,例如在基于角色的權(quán)限分配的物理模型中,“角色表”和“權(quán)限表”中間添加“角色權(quán)限關(guān)聯(lián)表”,“用戶表”和“角色表”間添加“用戶角色關(guān)聯(lián)表”。關(guān)聯(lián)表與兩個(gè)主表建立外鍵關(guān)系。這是基本的數(shù)據(jù)庫設(shè)計(jì)方法,不一一贅述。

          6、舉一反三,觸類旁通

                   系統(tǒng)資源這一塊的設(shè)計(jì)需要“資源類型表”(例如虛擬機(jī))、“資源類型參數(shù)表”(例如CPU、內(nèi)存、硬盤、IP地址等參數(shù))、“資源清單表”(具體的虛擬機(jī))、“資源參數(shù)值表”(資源清單記錄的CPU、內(nèi)存、硬盤、IP地址等參數(shù)的具體值)。

                   類似這種設(shè)計(jì)可以用在很多地方,例如薪酬通的工資條模板針對不同公司有不同的模板,有可能同一個(gè)公司也有不同的工資模板。可以有“工資模板表”、“工資模板項(xiàng)表”、“工資數(shù)據(jù)表”、“工資模板項(xiàng)值表”。

                   待續(xù)。

          7、參考文檔

          數(shù)據(jù)庫范式_百度百科》:http://baike.baidu.com/view/402020.htm

          3NF_百度百科》:http://baike.baidu.com/view/726437.htm

          數(shù)據(jù)庫設(shè)計(jì)的一點(diǎn)心得和體驗(yàn)》:http://www.nowamagic.net/librarys/veda/detail/642

                                                                                                                                                          

          posted on 2013-04-17 17:17 阿蜜果 閱讀(3344) 評論(0)  編輯  收藏 所屬分類: 架構(gòu)師之路
          <2013年4月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

                生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來如此。
                我的作品:
                玩轉(zhuǎn)Axure RP  (2015年12月出版)
                

                Power Designer系統(tǒng)分析與建模實(shí)戰(zhàn)  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關(guān)注blog

          積分與排名

          • 積分 - 2296321
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 灌阳县| 确山县| 扶绥县| 奈曼旗| 巴南区| 慈溪市| 淳化县| 横峰县| 尼勒克县| 松原市| 上林县| 临江市| 广德县| 邓州市| 扶沟县| 桐乡市| 龙海市| 阿拉善盟| 林西县| 阿荣旗| 工布江达县| 迭部县| 金川县| 尤溪县| 乌恰县| 黎川县| 博野县| 慈利县| 时尚| 嘉祥县| 江口县| 阿尔山市| 湘潭县| 澜沧| 开原市| 大冶市| 民权县| 浦县| 秭归县| 漳浦县| 勃利县|