<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        數(shù)據(jù)庫(kù)模型設(shè)計(jì)主鍵的設(shè)計(jì)

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 15:43:15
        文檔

        數(shù)據(jù)庫(kù)模型設(shè)計(jì)主鍵的設(shè)計(jì)

        數(shù)據(jù)庫(kù)模型設(shè)計(jì)主鍵的設(shè)計(jì):在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),主要就是對(duì)實(shí)體和關(guān)系的設(shè)計(jì),實(shí)體表現(xiàn)出來(lái)就是表,關(guān)系表現(xiàn)出來(lái)就是外鍵。而對(duì)于一個(gè)表,由兩部分組成:主鍵和屬性。主鍵的簡(jiǎn)單定義就是表中為每一行數(shù)據(jù)的唯一標(biāo)識(shí)。其實(shí)更準(zhǔn)確的說(shuō)法,每一行數(shù)據(jù)的唯一標(biāo)識(shí)是候選鍵(Candidate Key),
        推薦度:
        導(dǎo)讀數(shù)據(jù)庫(kù)模型設(shè)計(jì)主鍵的設(shè)計(jì):在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),主要就是對(duì)實(shí)體和關(guān)系的設(shè)計(jì),實(shí)體表現(xiàn)出來(lái)就是表,關(guān)系表現(xiàn)出來(lái)就是外鍵。而對(duì)于一個(gè)表,由兩部分組成:主鍵和屬性。主鍵的簡(jiǎn)單定義就是表中為每一行數(shù)據(jù)的唯一標(biāo)識(shí)。其實(shí)更準(zhǔn)確的說(shuō)法,每一行數(shù)據(jù)的唯一標(biāo)識(shí)是候選鍵(Candidate Key),

        在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),主要就是對(duì)實(shí)體和關(guān)系的設(shè)計(jì),實(shí)體表現(xiàn)出來(lái)就是表,關(guān)系表現(xiàn)出來(lái)就是外鍵。而對(duì)于一個(gè)表,由兩部分組成:主鍵和屬性。主鍵的簡(jiǎn)單定義就是表中為每一行數(shù)據(jù)的唯一標(biāo)識(shí)。其實(shí)更準(zhǔn)確的說(shuō)法,每一行數(shù)據(jù)的唯一標(biāo)識(shí)是候選鍵(Candidate Key),一

        在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),主要就是對(duì)實(shí)體和關(guān)系的設(shè)計(jì),實(shí)體表現(xiàn)出來(lái)就是表,關(guān)系表現(xiàn)出來(lái)就是外鍵。而對(duì)于一個(gè)表,由兩部分組成:主鍵和屬性。主鍵的簡(jiǎn)單定義就是表中為每一行數(shù)據(jù)的唯一標(biāo)識(shí)。其實(shí)更準(zhǔn)確的說(shuō)法,每一行數(shù)據(jù)的唯一標(biāo)識(shí)是候選鍵(Candidate Key),一個(gè)表中可以有很多個(gè)候選鍵,主鍵是候選鍵中的一個(gè),主要用于更方便的檢索和管理數(shù)據(jù)。一個(gè)表中可以有多個(gè)候選鍵,但是只有一個(gè)主鍵。由于主鍵常常用于檢索數(shù)據(jù),也用于表之間的關(guān)聯(lián),所以主鍵的設(shè)計(jì)的好壞將會(huì)嚴(yán)重影響數(shù)據(jù)操作的性能。下面來(lái)介紹下主鍵設(shè)計(jì)的幾個(gè)考慮因素。

        主鍵的數(shù)據(jù)類型

        最常見(jiàn)的主鍵數(shù)據(jù)類型是數(shù)字類型、固定長(zhǎng)度的字符類型和GUID類型。通常情況下,RDBMS會(huì)在主鍵上建立聚集索引(SQL Server默認(rèn)都這么做),由于我們使用B-Tree的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)索引數(shù)據(jù),所以一般對(duì)主鍵有以下兩個(gè)要求:

      1. 越短越好——越短在一個(gè)Page中存儲(chǔ)的節(jié)點(diǎn)越多,檢索速度就越快。
      2. 順序增長(zhǎng)——如果每一條插入的數(shù)據(jù)的主鍵都比前面的主鍵大,那么B-Tree上的節(jié)點(diǎn)也是順序增長(zhǎng)的,不會(huì)造成頻繁的B-Tree分割。
      3. 越短越好是為了查詢的速度快,順序增長(zhǎng)是為了插入速度快。

        有了這兩個(gè)要求,我們?cè)賮?lái)分析下各個(gè)數(shù)據(jù)類型:

      4. 數(shù)字類型:根據(jù)數(shù)據(jù)量決定是用Int16還是Int32或者Int64,能用Int32的就不需要使用Int64。
      5. 字符類型:基本不滿足前面提到的2點(diǎn)要求,字符類型一般不會(huì)很短,而且也很可能不是順序增長(zhǎng)的,所以不是特別推薦的主鍵類型。當(dāng)然如果確實(shí)業(yè)務(wù)需求使用字符類型,那么也盡量使用char(XX)而不要使用varchar(XX),因?yàn)樵赗DBMS中,對(duì)于定長(zhǎng)字符串和變成字符串的數(shù)據(jù)結(jié)構(gòu)和處理是不一樣的,varchar的性能更差。
      6. GUID類型:這個(gè)類型并不是所有數(shù)據(jù)庫(kù)都有對(duì)應(yīng)的數(shù)據(jù)類型,SQL Server有uniqueidentifier,MySQL沒(méi)有。GUID類型在SQL Server中是16個(gè)字節(jié),不算短,比4個(gè)字節(jié)的Int32長(zhǎng)多了。在插入新數(shù)據(jù)時(shí),GUID一般都是使用NewId()這樣的生成隨機(jī)GUID的方式生成的,所以也不是順序增長(zhǎng)的,在插入速度上不會(huì)很快。
      7. 通過(guò)上面的比較,我們知道使用數(shù)字類型是更好的方式,那么我們?yōu)槭裁催€會(huì)有人使用GUID和字符串來(lái)當(dāng)主鍵呢?那是因?yàn)椋?/p>

        相對(duì)于數(shù)字類型,字符類型更易讀易記,在檢索關(guān)聯(lián)的數(shù)據(jù)時(shí),更方便直接。

        GUID的優(yōu)勢(shì)是全球唯一,也就是說(shuō)同樣的系統(tǒng),如果部署了多套環(huán)境,那么里面的數(shù)據(jù)的主鍵仍然是唯一的,這樣有助于數(shù)據(jù)的集成。典型的例子就是一個(gè)系統(tǒng)在全國(guó)每個(gè)省份都部署一套,每個(gè)省份的數(shù)據(jù)各種錄入,互不干擾,然后再把每個(gè)省的數(shù)據(jù)集成起來(lái)為總部做分析。

        數(shù)據(jù)庫(kù)主鍵與業(yè)務(wù)主鍵

        前面說(shuō)到一個(gè)表可能有很多個(gè)唯一標(biāo)識(shí)的候選鍵,那么這么多候選鍵中,哪個(gè)應(yīng)該拿來(lái)做主鍵呢?一種方案是再新建一個(gè)獨(dú)立的字段作為主鍵,該字段并沒(méi)有業(yè)務(wù)含義,只是一個(gè)自增列或者流水號(hào),用于唯一標(biāo)識(shí)每一行數(shù)據(jù),這是數(shù)據(jù)庫(kù)主鍵。另外一種方案是選擇其中較短較常用的屬性作為主鍵,這是業(yè)務(wù)主鍵。個(gè)人建議是不要使用任何有業(yè)務(wù)含義的字段作主鍵,而是使用一個(gè)自增的(或者系統(tǒng)生成的)沒(méi)有實(shí)際業(yè)務(wù)意義的字段作為主鍵。為什么呢?主要是出于以下考慮:

        具有業(yè)務(wù)意義的字段很可能是用戶從系統(tǒng)錄入的,不要信任用戶的任何輸入,只要是用戶自己錄入的,那么就很有可能錄錯(cuò)了,如果發(fā)現(xiàn)錄入錯(cuò)誤,這個(gè)時(shí)候再對(duì)主鍵進(jìn)行修改,將會(huì)涉及到大量關(guān)聯(lián)的外鍵表的修改,是很麻煩的一件事情。比如在做人員表的時(shí)候,就不要使用員工號(hào)或者身份證號(hào)做主鍵。

        具有業(yè)務(wù)意義的字段雖然在當(dāng)前階段是唯一的,是不變的,但是并不能保證隨著公司政策變動(dòng)、業(yè)務(wù)調(diào)整等原因,導(dǎo)致該業(yè)務(wù)字段需要修改,以滿足新的業(yè)務(wù)要求,這個(gè)時(shí)候要修改主鍵也是很麻煩的事情。比如部門表,我們以部門Code作為主鍵,但是后來(lái)部門變動(dòng),Code修改,則系統(tǒng)部門表的主鍵也得更改。

        還有一個(gè)原因是業(yè)務(wù)主鍵在數(shù)據(jù)錄入的時(shí)候不一定是明確知道的,有時(shí)我們會(huì)在不知道業(yè)務(wù)主鍵的情況下,就錄入其他相關(guān)信息,這個(gè)時(shí)候,如果使用業(yè)務(wù)主鍵做數(shù)據(jù)庫(kù)的主鍵,那么數(shù)據(jù)將無(wú)法錄入。比如員工表把員工號(hào)作為主鍵,那么員工還沒(méi)有入職,沒(méi)有員工號(hào)的時(shí)候,HR需要先維護(hù)一些該預(yù)入職員工的信息是不可能的。

        聯(lián)合主鍵

        聯(lián)合主鍵就是以多個(gè)字段來(lái)唯一標(biāo)識(shí)每一行數(shù)據(jù)。前面已經(jīng)說(shuō)到主鍵應(yīng)該越短越好,而且是建議是一個(gè)沒(méi)有意義的自增列,那么是不是就不會(huì)再需要聯(lián)合主鍵呢?答案是否定的,我們?nèi)匀豢赡軙?huì)使用到聯(lián)合主鍵。聯(lián)合主鍵主要使用在多對(duì)多的關(guān)系時(shí),中間表就需要使用聯(lián)合主鍵。在簡(jiǎn)單的多對(duì)多關(guān)系中,我們不需要為中間的關(guān)聯(lián)建立實(shí)體,所以中間表可能就只需要兩列,分別是兩個(gè)實(shí)體表的主鍵。

        主鍵值的生成

        主鍵值的生成可以參考NHibernate的配置,概況下來(lái)主要有這么幾種生成方式:

      8. 自增,這是SQL Server常用的主鍵生成方式,完全由數(shù)據(jù)庫(kù)管理主鍵的值。
      9. Sequence對(duì)象,這是Oracle常用的主鍵生成方式,現(xiàn)在SQL Server已支持。主要是在數(shù)據(jù)庫(kù)中有一個(gè)Sequence對(duì)象,通過(guò)該對(duì)象生成主鍵。
      10. GUID,這是用于GUID類型的主鍵,可以使用newid()這種數(shù)據(jù)庫(kù)提供的函數(shù),或者使用程序生成Guid并賦值。
      11. Hilo值,這是一種使用高低位算法生成的數(shù)字值的主鍵。該值由NHibernate程序內(nèi)部生成。
      12. 其他程序賦值,完全由程序根據(jù)自己的算法生成并賦值。
      13. 更詳細(xì)的主鍵生成,我們可以參見(jiàn):http://www.cnblogs.com/chenkai/archive/2009/04/13/1434912.html

        主鍵與索引

        在概念和作用上,主鍵與索引是完全兩個(gè)不同的東西,但是由于我們大部分情況下都是使用主鍵檢索數(shù)據(jù),所以大部分?jǐn)?shù)據(jù)庫(kù)的默認(rèn)實(shí)現(xiàn),在建立主鍵時(shí)會(huì)自動(dòng)建立對(duì)應(yīng)的索引。

        以SQL Server為例,默認(rèn)情況下,建立主鍵的列,就會(huì)建立聚集索引,但是實(shí)際上,我們可以在建立主鍵時(shí)不使用聚集索引。另外還有一個(gè)唯一約束(索引)的概念,該索引中的數(shù)據(jù)必須是唯一不能重復(fù)的,感覺(jué)和主鍵的意義一樣,但是還是有一點(diǎn)點(diǎn)區(qū)別。

        主鍵是只能由一個(gè),而唯一約束(索引)在一個(gè)表中可以有多個(gè)。

        主鍵不能為空,而唯一約束(索引)是可以為空的。

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        數(shù)據(jù)庫(kù)模型設(shè)計(jì)主鍵的設(shè)計(jì)

        數(shù)據(jù)庫(kù)模型設(shè)計(jì)主鍵的設(shè)計(jì):在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),主要就是對(duì)實(shí)體和關(guān)系的設(shè)計(jì),實(shí)體表現(xiàn)出來(lái)就是表,關(guān)系表現(xiàn)出來(lái)就是外鍵。而對(duì)于一個(gè)表,由兩部分組成:主鍵和屬性。主鍵的簡(jiǎn)單定義就是表中為每一行數(shù)據(jù)的唯一標(biāo)識(shí)。其實(shí)更準(zhǔn)確的說(shuō)法,每一行數(shù)據(jù)的唯一標(biāo)識(shí)是候選鍵(Candidate Key),
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产亚洲漂亮白嫩美女在线 | 国产在线ts人妖免费视频| 亚洲精品视频免费看| 毛片免费在线观看| 国产亚洲精品岁国产微拍精品| 欧亚一级毛片免费看| 免费大黄网站在线看| 一级毛片视频免费| 亚洲老妈激情一区二区三区| 久久国产乱子伦精品免费一| 97久久精品亚洲中文字幕无码 | 在线看免费观看AV深夜影院| 亚洲人成免费网站| 国内自产拍自a免费毛片| 丰满亚洲大尺度无码无码专线| 国产免费午夜a无码v视频| 青草青草视频2免费观看| 亚洲国产综合精品中文字幕| 国产一级a毛一级a看免费视频 | 国产自国产自愉自愉免费24区 | 亚洲午夜久久久久久久久久| 曰批全过程免费视频在线观看无码| 亚洲AV电影院在线观看| 毛片基地免费观看| 国产亚洲精品美女久久久久| 亚洲色大成网站www永久一区| 99免费在线观看视频| 亚洲日韩一区二区一无码| 亚洲人成色7777在线观看不卡| 日韩免费在线视频| 亚洲熟女www一区二区三区| 亚洲日韩在线第一页| 24小时在线免费视频| 老子影院午夜伦不卡亚洲| 亚洲国产无套无码av电影| h视频在线观看免费完整版| 极品色天使在线婷婷天堂亚洲| 久久99国产亚洲高清观看首页| 三年片在线观看免费大全 | 亚洲啪啪综合AV一区| 欧美a级在线现免费观看|