• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 軟件測試開發技術數據庫主鍵設計之思考

    發表于:2009-09-11來源:作者:點擊數: 標簽:軟件測試庫主思考數據技術
    軟件測試 開發 技術數據庫主鍵設計之思考 數據庫設計 關鍵字:數據庫 主鍵 在我們的數據庫設計中,不可逃避的就是數據庫表的主鍵,可能有很多朋友沒有深入思考過,主鍵的設計對整個數據庫的設計影響很大,因此我們不得不要重視起來。 主鍵的必要性: 有些朋友

    軟件測試開發技術數據庫主鍵設計之思考 數據庫設計

    關鍵字:數據庫 主鍵

      在我們的數據庫設計中,不可逃避的就是數據庫表的主鍵,可能有很多朋友沒有深入思考過,主鍵的設計對整個數據庫的設計影響很大,因此我們不得不要重視起來。

      主鍵的必要性:

      有些朋友可能不提倡數據庫表必須要主鍵,但在我的思考中,覺得每個表都應該具有主鍵,不管是單主鍵還是雙主鍵,主鍵的存在就代表著表結構的完整性,表的記錄必須得有唯一區分的字段,主鍵主要是用于其他表的外鍵關聯,本記錄的修改與刪除,當我們沒有主鍵時,這些操作會變的非常麻煩。

      主鍵的無意義性:

      我強調主鍵不應該具有實際的意義,這可能對于一些朋友來說不太認同,比如訂單表吧,會有“訂單編號”字段,而這個字段呢在業務實際中本身就是應該具有唯一性,具有唯一標識記錄的功能,但我是不推薦采用訂單編號字段作為主鍵的,因為具有實際意義的字段,具有“意義更改”的可能性,比如訂單編號在剛開始的時候我們一切順利,后來客戶說“訂單可以作廢,并重新生成訂單,而且訂單號要保持原訂單號一致”,這樣原來的主鍵就面臨危險了。因此,具有唯一性的實際字段也代表可以作為主鍵。因此,我推薦是新設一個字段專門用為主鍵,此主鍵本身在業務邏輯上不體現,不具有實際意義。而這種主鍵在一定程序增加了復雜度,所以要視實際系統的規模大小而定,對于小項目,以后擴展不會很大的話,也查允許用實際唯一的字段作主鍵的。

      主鍵的選擇

      我們現在在思考一下,應該采用什么來作表的主鍵比較合理,申明一下,主鍵的設計沒有一個定論,各人有各人的方法,哪怕同一個,在不同的項目中,也會采用不同的主鍵設計原則。

      第一:編號作主鍵

      此方法就是采用實際業務中的唯一字段的“編號”作為主鍵設計,這在小型的項目中是推薦這樣做的,因為這可以使項目比較簡單化,但在使用中卻可能帶來一些麻煩,比如要進行“編號修改”時,可能要涉及到很多相關聯的其他表,就象黎叔說的“后果很嚴重”;還有就是上面提到的“業務要求允許編號重復時”,我們再那么先知,都無法知道業務將會修改成什么?

      第二:自動編號主鍵

      這種方法也是很多朋友在使用的,就是新建一個ID字段,自動增長,非常方便也滿足主鍵的原則,優點是:數據庫自動編號,速度快,而且是增量增長,聚集型主鍵按順序存放,對于檢索非常有利;數字型的,占用空間小,易排序,在程序中傳遞也方便;如果通過非系統增加記錄(比如手動錄入,或是用其他工具直接在表里插入新記錄,或老系統數據導入)時,非常方便,不用擔心主鍵重復問題。

      缺點:其實缺點也就是來自其優點,就是因為自動增長,在手動要插入指定ID的記錄時會顯得麻煩,尤其是當系統與其他系統集成時,需要數據導入時,很難保證原系統的ID不發生主鍵沖突(前提是老系統也是數字型的);如果其他系統主鍵不是數字型那就麻煩更大了,會導致修改主鍵數據類型了,這也會導致其他相關表的修改,后果同樣很嚴重;就算其他系統也是數字型的,在導入時,為了區分新老數據,可能想在老數據主鍵前統一加一個“o”(old)來表示這是老數據,那么自動增長的數字型又面臨一個挑戰。

      第三:Max加一

      由于自動編號存在那些問題,所以有些朋友就采用自己生成,同樣是數字型的,只是把自動增長去掉了,采用在Insert時,讀取Max值后加一,這種方法可以避免自動編號的問題,但也存在一個效率問題,如果記錄非常大的話,那么Max()也會影響效率的;更嚴重的是并發性問題,如果同時有兩人讀到相同的Max后,加一后插入的ID值會重復,這已經是有經驗教訓的了。

      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>