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

          聲明:

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

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

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

          常用鏈接

          留言簿(3)

          隨筆分類(148)

          隨筆檔案(143)

          收藏夾(2)

          其他

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

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

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          以下是針對(duì)事務(wù)型數(shù)據(jù)庫(kù):
          1.是否使用聯(lián)合主鍵?個(gè)人傾向于少采用聯(lián)合主鍵。因?yàn)檫@樣會(huì)降低索引的效率,聯(lián)合主鍵一般都要用到至少一個(gè)業(yè)務(wù)字段,往往是字符串型的,而且理論上多字段的索引比單字段的索引要慢些。看上去似乎也不那么清爽。
          在實(shí)際的設(shè)計(jì)中,我盡量避免使用聯(lián)合主鍵,有些時(shí)候“不得不”使用聯(lián)合主鍵。

          2.PK采用無意義的字段(邏輯主鍵)還是有意義的字段(業(yè)務(wù)主鍵)?個(gè)人傾向于“邏輯主鍵”,理由是這樣設(shè)計(jì)出的數(shù)據(jù)庫(kù)模型結(jié)構(gòu)清晰、關(guān)系脈絡(luò)清楚,往往更符合“第三范式”(雖然不是故意的,呵呵)。而且更容易避開“聯(lián)合主鍵”,而且可以使用索引效率高的字段類型,比如int、long、number。缺點(diǎn)是用無意義的字段建立表間的關(guān)系,使跨表查詢?cè)龆啵氏陆怠#軣o處不在,前面剛說完可以提高效率,這里馬上又降低效率)。“業(yè)務(wù)主鍵”可以提升查詢編碼的簡(jiǎn)潔度和效率。
          個(gè)人使用實(shí)際狀況,總體來說“邏輯主鍵”比“業(yè)務(wù)主鍵”執(zhí)行效率低,但不會(huì)低到無法滿足需求。采用“邏輯主鍵”比采用“業(yè)務(wù)主鍵”更利于數(shù)據(jù)庫(kù)模型的結(jié)構(gòu)、關(guān)系清晰,也更便于維護(hù)。
          對(duì)于分析型數(shù)據(jù)庫(kù),如數(shù)據(jù)倉(cāng)庫(kù),千萬不要這樣做。

          3.不要使用多對(duì)多關(guān)系?個(gè)人傾向于少使用多對(duì)多關(guān)系。這個(gè)問題其實(shí)不是數(shù)據(jù)庫(kù)設(shè)計(jì)的問題了,在數(shù)據(jù)庫(kù)設(shè)計(jì)中,多對(duì)多關(guān)系也僅僅存在于概念模型(E-R)階段,物理模型不在有多對(duì)多關(guān)系,實(shí)際數(shù)據(jù)庫(kù)中也不會(huì)有“多對(duì)多”關(guān)系。這是使用ORM時(shí)的問題,比如使用Hibernate,多對(duì)多關(guān)系有時(shí)會(huì)使編碼看起來靈活一些,代價(jià)是效率的明顯降低。
          個(gè)人實(shí)際使用中,設(shè)計(jì)時(shí)基本不考慮多對(duì)多關(guān)系,但編碼時(shí)總會(huì)有小組成員使用一些多對(duì)多關(guān)系,自己建立多對(duì)多的ORM,使自己編碼方便些,用在數(shù)據(jù)量小的地方,影響不大。大數(shù)據(jù)量,則“禁止使用”。

          4.為每個(gè)表增加一個(gè)state字段?我習(xí)慣在設(shè)計(jì)時(shí)給每個(gè)表設(shè)一個(gè)state字段,取值0或1,默認(rèn)值為1,具體業(yè)務(wù)意義或操作上的意義可以自定義。可以作為一個(gè)狀態(tài)控制字段,如查詢、更新、刪除條件,單據(jù)是否有效(業(yè)務(wù)單據(jù)對(duì)應(yīng)的表會(huì)有業(yè)務(wù)意義上的“有/無效”或“狀態(tài)”字段,這種情況下,我還是會(huì)再加一個(gè)state字段),甚至僅僅是控制一條數(shù)據(jù)是否“有效”(有效的意義你自己定)。在數(shù)據(jù)遷移(如轉(zhuǎn)入分析用的數(shù)據(jù)庫(kù))時(shí)也可能會(huì)發(fā)揮作用。

          5.為每個(gè)表設(shè)置一些備用字段?沒辦法,我總是設(shè)計(jì)不出“完美”的數(shù)據(jù)表,給每個(gè)表加幾個(gè)備用字段(我一般用字符串型,隨你)可以應(yīng)付“不時(shí)之需”,尤其是需要長(zhǎng)期維護(hù)的、業(yè)務(wù)可能有臨時(shí)性變動(dòng)的系統(tǒng)。

          6.盡量不要在一個(gè)表中存入其關(guān)聯(lián)表的字段?建議不存!這樣做確實(shí)可以提高查詢效率,但在一個(gè)有很多表,并且關(guān)聯(lián)表多的情況下,很難保持?jǐn)?shù)據(jù)的一致性!數(shù)據(jù)庫(kù)結(jié)構(gòu)也比較糟糕。而且不存,也不會(huì)使效率十分低下。

          7.不要去直接修改數(shù)據(jù)庫(kù)?個(gè)人認(rèn)為這點(diǎn)很重要,當(dāng)需要修改時(shí),應(yīng)該先去修改模型,然后同步物理數(shù)據(jù)庫(kù),尤其是團(tuán)隊(duì)開發(fā),否則要多做更多的事情來搞定,也可能會(huì)引入更多的錯(cuò)誤。 

          posted on 2008-02-18 09:31 lk 閱讀(330) 評(píng)論(0)  編輯  收藏 所屬分類: DB
          主站蜘蛛池模板: 鄢陵县| 马公市| 蒙阴县| 鄂伦春自治旗| 民乐县| 临桂县| 吉木萨尔县| 运城市| 老河口市| 营山县| 盈江县| 富宁县| 剑阁县| 云梦县| 镇平县| 长汀县| 赤峰市| 苗栗市| 冕宁县| 新余市| 乌鲁木齐市| 拉孜县| 阿图什市| 凯里市| 依安县| 黄陵县| 鄂伦春自治旗| 辽阳县| 洪江市| 三原县| 隆尧县| 龙海市| 松滋市| 泽库县| 鄯善县| 关岭| 米脂县| 体育| 云龙县| 阿合奇县| 疏勒县|