青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

cc

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  38 隨筆 :: 14 文章 :: 21 評論 :: 0 Trackbacks

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

主鍵的必要性:

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

主鍵的無意義性

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

主鍵的選擇

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

第一:編號作主鍵

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

第二:自動編號主鍵

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

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

第三:Max加一

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

第四:自制加一

     考慮Max加一的效率后,有人采用自制加一,也就是建一個特別的表,字段為:表名,當前序列值。這樣在往表中插入值時,先從此表中找到相應表的最大值后加一,進行插入,有人可能發現,也可能會存在并發處理,這個并發處理,我們可以采用lock線程的方式來避免,在生成此值的時,先Lock,取到值以后,再unLock出來,這樣不會有兩人同時生成了。這比Max加一的速度要快多了。但同樣存在一個問題:在與其他系統集成時,脫離了系統中的生成方法后,很麻煩保證自制表中的最大值與導入后的保持一致,而且數字型都存在上面講到的“o”老數據的導入問題。因此在“自制加一”中可以把主鍵設為字符型的。字符型的自制加一我倒是蠻推薦的,應該字符型主鍵可以應付很多我們意想不到的情況。

第五:GUID主鍵

    目前一個比較好的主鍵是采用GUID,當然我是推薦主鍵還是字符型的,但值由GUID生成,GUID是可以自動生成,也可以程序生成,而且鍵值不可能重復,可以解決系統集成問題,幾個系統的GUID值導到一起時,也不會發生重復,就算有“o”老數據也可以區分,而且效率很高,在.NET里可以直接使用System.Guid.NewGuid()進行生成,在SQL里也可以使用 NewID()生成。優點是:

IDENTITY 列相比,uniqueidentifier 列可以通過 NewID() 函數提前得知新增加的行 ID,為應用程序的后續處理提供了很大方便。

便于數據庫移植,其它數據庫中并不一定具有 IDENTITY 列,而 Guid 列可以作為字符型列轉換到其它數據庫中,同時將應用程序中產生的 GUID 值存入數據庫,它不會對原有數據帶來影響。

便于數據庫初始化,如果應用程序要加載一些初始數據, IDENTITY 列的處理方式就比較麻煩,而 uniqueidentifier 列則無需任何處理,直接用 T-SQL 加載即可。

便于對某些對象或常量進行永久標識,如類的 ClassID,對象的實例標識,UDDI 中的聯系人、服務接口、tModel標識定義等。

缺點是:

GUID 值較長,不容易記憶和輸入,而且這個值是隨機、無順序的

GUID 的值有 16 個字節,與其它那些諸如 4 字節的整數相比要相對大一些。這意味著如果在數據庫中使用 uniqueidentifier 鍵,可能會帶來兩方面的消極影響:存儲空間增大;索引時間較慢。

 

我也不是推薦GUID最好,其實在不同的情況,我們都可以采用上面的某一種方式,思考了一些利與弊,也方便大家在進行設計時參考。這些也只是我的一點思考而已,而且可能我知識面限制,會有一些誤論在里面,希望大家有什么想法歡迎討論。

posted on 2009-11-09 12:57 醒目西西 閱讀(147) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美亚洲免费电影| 宅男噜噜噜66一区二区66| 欧美在线视频一区二区| 亚洲一区二区三区精品动漫| 一本久久综合亚洲鲁鲁五月天| 亚洲茄子视频| 亚洲国产婷婷综合在线精品 | 久久一区激情| 老牛嫩草一区二区三区日本| 蜜月aⅴ免费一区二区三区| 免费h精品视频在线播放| 欧美电影在线观看| 亚洲精品一区二区三区99| 正在播放亚洲| 久久精品亚洲精品国产欧美kt∨| 久久深夜福利| 欧美日韩一区二区三区高清| 国产精品系列在线| 亚洲国产成人精品女人久久久| 亚洲精品中文在线| 亚洲欧美日韩电影| 蜜桃久久精品乱码一区二区| 亚洲伦伦在线| 久久精品夜色噜噜亚洲aⅴ| 欧美大片免费久久精品三p | 久久久av毛片精品| 欧美日韩国语| 精品成人久久| 亚洲欧美中日韩| 欧美国产欧美亚洲国产日韩mv天天看完整 | 美国十次成人| 国产精品自拍网站| 亚洲乱码国产乱码精品精98午夜 | 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲深夜福利| 欧美国产综合视频| 一区二区在线观看av| 亚洲欧美另类综合偷拍| 亚洲盗摄视频| 久久久国产一区二区三区| 国产精品卡一卡二| 亚洲视频二区| 亚洲区免费影片| 久久免费少妇高潮久久精品99| 国产精品乱码| 亚洲尤物视频网| 亚洲国产成人一区| 99re热这里只有精品免费视频| 国产欧美在线视频| 亚洲一区二区精品在线观看| 亚洲国产精选| 免费看成人av| 亚洲激情av在线| 另类激情亚洲| 久久久亚洲一区| 精品成人在线观看| 美女露胸一区二区三区| 久久精品国产69国产精品亚洲| 国产麻豆精品theporn| 亚洲欧美日韩国产精品| 亚洲午夜精品一区二区三区他趣| 欧美色精品天天在线观看视频| 亚洲乱码国产乱码精品精 | 亚洲欧美日韩国产一区二区三区| 欧美日韩免费网站| 亚洲欧美伊人| 久久精品国产免费观看| 在线观看av一区| 欧美成人免费播放| 欧美精品手机在线| 亚洲宅男天堂在线观看无病毒| 中文成人激情娱乐网| 国产精品五区| 免费欧美高清视频| 欧美经典一区二区| 亚洲一区三区在线观看| 亚洲欧美在线免费| 一区在线播放视频| 亚洲激情在线播放| 国产精品美女诱惑| 媚黑女一区二区| 欧美日产国产成人免费图片| 亚洲在线一区| 久久久久欧美| 亚洲视频一区| 久久久久中文| 一区二区三区产品免费精品久久75 | 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲一级二级在线| 一区二区三区在线视频观看| 最新日韩精品| 国产一区二区久久精品| 亚洲高清资源综合久久精品| 国产精品久久夜| 亚洲成色777777在线观看影院| 欧美日韩在线电影| 蜜臀av一级做a爰片久久| 欧美日韩午夜激情| 男人的天堂亚洲| 国产精品久久久一区麻豆最新章节| 久久综合电影| 国产精品视频第一区| 欧美激情精品久久久久久蜜臀| 国产精品国产三级国产专播品爱网| 美乳少妇欧美精品| 国产女主播一区| 日韩网站在线看片你懂的| 欧美精品免费在线观看| 欧美激情综合在线| 久久久久久久尹人综合网亚洲| 欧美日本一区二区三区| 美女在线一区二区| 国产欧美精品国产国产专区| 亚洲人体偷拍| 1769国产精品| 久久精品国产96久久久香蕉| 午夜精品一区二区三区四区| 欧美激情一二三区| 欧美国产日韩一二三区| 韩日在线一区| 性欧美精品高清| 午夜精品视频在线观看一区二区 | 一本一本久久a久久精品牛牛影视| 依依成人综合视频| 久久av一区二区| 欧美伊人久久久久久久久影院| 欧美日韩精品在线观看| 亚洲国产免费| 亚洲精品社区| 欧美—级在线免费片| 亚洲国产激情| 91久久午夜| 欧美成人一区二区三区在线观看| 美女图片一区二区| 亚洲福利免费| 免费在线观看成人av| 欧美高清视频www夜色资源网| 在线视频国内自拍亚洲视频| 久久久精品国产免大香伊| 美国成人直播| 亚洲国产美女精品久久久久∴| 久久亚洲精品视频| 亚洲国产精品一区二区三区| 亚洲精品乱码视频| 欧美日韩国产色站一区二区三区| 亚洲国产精品久久久久秋霞影院 | 免费国产自线拍一欧美视频| 美女主播精品视频一二三四| 一区国产精品| 欧美成人一区二区三区在线观看| 亚洲国产欧美在线| 在线性视频日韩欧美| 国产精品乱码| 久久久亚洲成人| 亚洲国产成人久久综合一区| 一区二区三区欧美亚洲| 国产精品一区二区在线观看网站 | 久久国产精品黑丝| 六月婷婷久久| 99re6这里只有精品视频在线观看| 欧美女同在线视频| 亚洲欧美日韩国产成人精品影院| 久久久久久久综合| 亚洲三级毛片| 国产精品实拍| 久久夜色精品国产欧美乱极品| 亚洲第一精品影视| 久久精品视频在线| 亚洲综合三区| 好吊妞**欧美| 欧美视频免费看| 香蕉精品999视频一区二区 | 在线观看成人网| 欧美区国产区| 欧美在线首页| 99re6这里只有精品| 久久免费黄色| 亚洲一区在线免费观看| 在线成人www免费观看视频| 欧美日韩在线三级| 老司机精品视频网站| 亚洲小说春色综合另类电影| 欧美成在线观看| 久久国产精品一区二区| 一本色道久久综合一区| 一区二区三区在线免费播放| 国产精品日韩精品欧美精品| 欧美成人tv| 久热精品在线视频| 欧美一区二区三区四区在线观看地址 | 欧美韩日高清| 欧美综合国产| 亚洲一区高清| 日韩午夜免费| 亚洲黑丝一区二区| 1024精品一区二区三区| 国产亚洲精品成人av久久ww| 国产精品美女黄网| 欧美日韩一区二区在线观看视频 | 亚洲精品国产精品国自产观看 |