讀萬卷書不如行千里路,經驗的積累又不是一蹴而就的,不但需要知識的沉積,還需要長久經驗的總結升華

          常用鏈接

          統計

          積分與排名

          AJAX相關站點

          java壓力、性能等測試工具

          開源軟件基地

          最新評論

          針對事務型數據庫設計小結

          根據個人的總結:希望大家多的補充:

          以下是針對事務型數據庫:

          ?
          1.是否使用聯合主鍵?個人傾向于少采用聯合主鍵。因為這樣會降低索引的效率,聯合主鍵一般都要用到至少一個業務字段,往往是字符串型的,而且理論上多字段的索引比單字段的索引要慢些。看上去似乎也不那么清爽。?
          在實際的設計中,我盡量避免使用聯合主鍵,有些時候“不得不”使用聯合主鍵。?

          2.PK采用無意義的字段(邏輯主鍵)還是有意義的字段(業務主鍵)?個人傾向于“邏輯主鍵”,理由是這樣設計出的數據庫模型結構清晰、關系脈絡清楚,往往更符合“第三范式”(雖然不是故意的,呵呵)。而且更容易避開“聯合主鍵”,而且可以使用索引效率高的字段類型,比如int、long、number。缺點是用無意義的字段建立表間的關系,使跨表查詢增多,效率下降。(矛盾無處不在,前面剛說完可以提高效率,這里馬上又降低效率)。“業務主鍵”可以提升查詢編碼的簡潔度和效率。?
          個人使用實際狀況,總體來說“邏輯主鍵”比“業務主鍵”執行效率低,但不會低到無法滿足需求。采用“邏輯主鍵”比采用“業務主鍵”更利于數據庫模型的結構、關系清晰,也更便于維護。?
          對于分析型數據庫,如數據倉庫,千萬不要這樣做。?

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

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

          5.為每個表設置一些備用字段?沒辦法,我總是設計不出“完美”的數據表,給每個表加幾個備用字段(我一般用字符串型,隨你)可以應付“不時之需”,尤其是需要長期維護的、業務可能有臨時性變動的系統。?

          6.盡量不要在一個表中存入其關聯表的字段?建議不存!這樣做確實可以提高查詢效率,但在一個有很多表,并且關聯表多的情況下,很難保持數據的一致性!數據庫結構也比較糟糕。而且不存,也不會使效率十分低下。?

          7.不要去直接修改數據庫?個人認為這點很重要,當需要修改時,應該先去修改模型,然后同步物理數據庫,尤其是團隊開發,否則要多做更多的事情來搞定,也可能會引入更多的錯誤
          8:每個表加?創建記錄時間,創建記錄人,修改記錄時間,修改記錄人?四個字段的

          posted on 2006-04-04 13:43 劉軍偉 閱讀(200) 評論(0)  編輯  收藏 所屬分類: 數據庫


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 徐州市| 墨竹工卡县| 富阳市| 施甸县| 花垣县| 陕西省| 通城县| 叶城县| 克山县| 宾阳县| 江津市| 通渭县| 江孜县| 甘德县| 马尔康县| 皮山县| 贵州省| 平度市| 滁州市| 汾阳市| 澄城县| 莱州市| 巴林左旗| 博乐市| 绥德县| 龙山县| 焦作市| 策勒县| 灵山县| 精河县| 松江区| 吴旗县| 清徐县| 嘉善县| 桑日县| 牙克石市| 连江县| 遂川县| 定陶县| 屏山县| 县级市|