999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談數據庫主鍵設計的原則

2009-04-29 00:00:00常玉慧
電腦知識與技術 2009年36期

摘要:主鍵在數據庫中具有重要地位,其設計直接影響到數據庫系統的應用和效能。該文從主鍵概念出發,對現在常用的數據庫主鍵設計方法進行了比較,提出了主鍵設計的相關原則。

關鍵詞:關系數據庫;主鍵設計

中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2009)36-10176-02

Discussion on Principles for Database Primary Key Design

CHANG Yu-hui

(Jiangsu Technical Teachers College, Computer Engineering, Changzhou 203001, China)

Abstract: Primary keys are very important in databases, and .their design directly affects the application and performance of database systems. Starting from the concept of the primary key, the paper compares the commonly used design methods of the primary key, and proposes the relevant principles for primary key design.

Key words: Database; primary key

1 主鍵的概念及其設計主鍵的必要性

在我們進行數據庫設計中,不可逃避的就是要定義數據庫表的主鍵,主鍵的設計對整個數據庫的設計影響很大,因此我們不得不要重視起來。那么我們首先來看看什么是數據庫的主鍵和與它密切相關的外鍵。

1.1 主鍵

能夠唯一表示數據表中的每個記錄的字段或者字段的組合就稱為主鍵(主碼)。一旦確定為主鍵則該字段不可為空也不可以重復。一個主鍵是唯一識別一個表的每一記錄,但這只是其作用的一部分。主鍵的主要作用是將記錄和存放在其他表中的數據進行關聯。在這一點上主鍵是不同表中各記錄之間的簡單指針。所以主鍵的值對用戶而言是沒有什么意義并且和它要賦予的值也沒有什么特別的聯系。比如學生表中的學號就可以定義成該表的主鍵。

1.2 外鍵

外鍵的定義是相對于主鍵而言的若有兩個表A、B,key是A的主鍵而B中也有key字段則key就是表B的外鍵。比如另有一張成績表表中也出現了學生表中的對應學號字段則相對于學生表學號就是成績表的外鍵。

1.3 設計主鍵的必要性

有些朋友可能不提倡數據庫表必須要主鍵,但在我的思考中,覺得每個表都應該具有主鍵,不管是單主鍵還是雙主鍵,主鍵的存在就代表著表結構的完整性,表的記錄必須得有唯一區分的字段,主鍵主要是用于其他表的外鍵關聯,本記錄的修改與刪除,當我們沒有主鍵時,這些操作會變的非常麻煩。主鍵除了上述作用外常常與外鍵構成參照完整性約束防止出現數據不一致。所以數據庫在設計時主鍵起到了很重要的作用。

2 主鍵設計的原則

大家都設計過數據庫,也為表定義過主鍵,我想闡述的是,應該如何正確的設計一個主鍵,在以往的一些資料中,都只是提了主鍵設計的方法而沒有提及到主鍵設計的原則。針對于此,我對幾種常用的設計主鍵的方法做了如下總結:

2.1 是否要采用自動遞增的方式

對于以前談到的主鍵,要求唯一性,因此大家都用自動遞增的方式。這樣的方式是非常不可取的。可能是為了方便插入記錄時,不必去人為創建主鍵值。以為這樣會方便,其實不是的。帶來的麻煩要遠遠勝于這種所謂的\"方便\"。第一,數據導入不方便,經常會有從另一系統導入數據進來,自動遞增的主鍵,將不允許原表中的ID被導入進來。這會導致主鍵丟失。第二,對于象訂單這樣的有主外鍵的表來說,如果訂單的\"主檔表\"主鍵是自動生成的,那么在保存一個訂單時,會要求對主檔表與明細表同進行事務保存,而此時,先要生成一條訂單,然后取出這個訂單自動生成的主鍵,然后再把此作為明細表的一個外鍵,進行明細的保存。這過程中,將變的復雜而且不可行,事務將如何處理呢?訂單主檔表插入記錄后,要是明細保存時遇到錯誤,主檔表記錄還要進行刪除。繁瑣。插入成功以后,還要取出產生的最大值。這將是一個嚴重的浪費。記錄多的話會影響速度,而且會存在并行插入。導致獲取的記錄可能是不正確的。因此在以上的嚴重問題下,請不要采用自動遞增方式。

2.2 是否要采用int型作為主鍵

以前大家都采用int型作為主鍵,導致主鍵的值都是數字。其實我們也明白。并不是只是數字的東西就是數字型的,比如電話號碼等。因此對于主鍵采用int型的優勢是速度快插入查詢時都可能會比其他的方式快。但我這種快的效果也未必有多明顯比如以varchar(15)為例物理主鍵排序的數據會自動以主鍵進行物理數據排序。因此就算是字符型的數據在插入時也會插入到相應的物理位置上也就是說在插入時可能會影響一些速度。但在以后的查詢中速度影響不會太明顯。而我要說的不采用int型作為主鍵不是說里面不存數據。我還是建議大家在主鍵中存放數字這樣的排序比較要比夾雜字母的排序來的快之所以要采用字符型也是為以后的數據導入作準備有一天會要求從其他表導入數據時可以在導入數據的主鍵上加一個特定字母來避免與原主鍵沖突。比如在導入數據的主鍵前加一個“N”字母。這也就不用擔心要求導入數據表中的主鍵是數字型還是字符型了。

2.3 是否采用編號來定義主鍵

主鍵設計有個原則就是主鍵不應具有任何實際意義,這條其實是非常重要的。有人就是覺得編號本身是唯一的可以作為主鍵用但可能會為以后帶來麻煩。因為帶有實際意義的字段還是存在被修改的可能性,而對于主鍵最大的忌諱就是修改主鍵,這可能會導致非常嚴重的不可估計的后果。比如學生編號平時以為永遠不會修改但修改的可能還是會存在。

還有一種表面上是唯一的但實際上應該是允許重復的。舉個例子,訂單編號應該是唯一吧。邏輯上是的,可是會存在這樣的情況一張原來的訂單是因為某個原因要求訂單作廢。那好給訂單的狀態標識為\"cancel\"。然后允許再次錄入同樣編號的訂單。因此。對于這樣的情況下在雖然有效的訂單編號只有一個但在數據庫角度會允許編號重復。所以不管如何還是建議大家為表都建一個沒有任何意義的主鍵如ID。

2.4 是否要采用GUID作為主鍵

很多項目是多級建庫的,經常需要數據導入、導出、合并很需要一套產生全局唯一主鍵的機制。一種方法是自己設計一套編碼規范(類似于身份證、信用卡)最好有一個統一編碼服務器;第二種方法也是自己產生主鍵為每一個獨立的數據庫分配一個NameSpace產生主鍵時前面加上這個NameSpace;最后一種方法就是UUID我想重點討論一下后者。

UUID(Universally Unique Identifier)是通用惟一標識符,是128位比特的數字,用來惟一地標識因特網上的某些對象或者實體。UUID是是由開放軟件基金會(OSF)作為分布式計算環境(DCE)的一部分而制定的標準。UUIDs的目的就是使分布式系統可以不需要重要的中央調合系統而能唯一地標識信息。這樣,任何人能創造一個UUID和使用它來標識一些東西,而且,你有足夠的信心來確定這個標識是永遠不會被任何人無意地使用在任何東西上。因此,信息加上了UUID標簽就能合并到單個數據庫中而不用去解決命名沖突的問題。這個標準的廣泛應用在微軟的全球唯一標識符(GUIDs)上,GUID實現了這個標準。

用GUID作主鍵有它的優勢與不足。優勢是GUID具有唯一性,在任何情況下,可以產生全球唯一的值。這是GUID最大的優勢,也方便數據導入,比如要求從另一個系統中把數據導入進來,那么不用擔心導入時,會導致主鍵沖突。不足是GUID值太復雜、不易記憶,因為有時難免我們會用記錄的方式來進行記錄判斷。而且數據太長,影響數據庫效率。GUID的產生不是以一定的次序產生,對于按主鍵物理排序的數據庫來說,如果在記錄的前部插入一條記錄,可能會導致后面N次方的數據條數后移。這將導致數據插入效率。而且這個值是隨機、無順序的。GUID的值有16個字節,與其它那些諸如4字節的整數相比要相對大一些。這意味著如果在數據庫中使用unique identifier鍵,可能會帶來兩方面的消極影響,一是存儲空間增大,二是索引時間較慢。因此GUID的采用應該要慎重。

3 結束語

數據庫主鍵在數據庫中具有重要的地位。主鍵的設計直接影響到數據庫系統的應用和效能。數據庫主鍵的設計并沒有定論,因此,我們在設計主鍵時,因根據具體應用的需要,綜合考慮各方面的因素,考慮數據庫的規模,以及插入、刪除、檢索等操作的頻繁來選擇合適而快捷的數據庫主鍵設計方法,從而達到優化數據庫主鍵的目的。

參考文獻:

[1] 張云濤.商業智能的設計部署與實現[M].北京:電子工業出版社,2004.

[2] Lou Agosta.The Essential Guide to Data Warehouse [M].北京:人民郵電出版社,2000.11.

[3] 龔小勇.關系數據庫[M].北京:機械工業出版社,2004.

[4] 薩師煊,王珊.數據庫系統概述[M].北京:高等教育出版社,2002.

主站蜘蛛池模板: 色悠久久综合| 无码视频国产精品一区二区 | 98精品全国免费观看视频| 色婷婷亚洲综合五月| 女人天堂av免费| 欧美日韩成人| 成人一级免费视频| 蝌蚪国产精品视频第一页| 污污网站在线观看| 久久精品波多野结衣| 国产精品无码在线看| 婷婷激情五月网| 99久久成人国产精品免费| 一区二区三区四区精品视频| 亚洲天堂免费在线视频| 精品国产三级在线观看| 青青草原国产| 亚洲va欧美ⅴa国产va影院| 成人国产一区二区三区| 精品午夜国产福利观看| 免费看av在线网站网址| 国产精品播放| 欧美性猛交xxxx乱大交极品| 欧美一级高清片久久99| a国产精品| 刘亦菲一区二区在线观看| 免费无码AV片在线观看国产| 国产91高清视频| 国产午夜精品鲁丝片| 伊人久久久大香线蕉综合直播| 亚洲欧美h| 亚洲天堂成人在线观看| 欧美日韩专区| 91激情视频| 色综合中文字幕| 亚洲色中色| 97人妻精品专区久久久久| 免费aa毛片| 国产精品无码AV中文| 色综合天天操| 内射人妻无套中出无码| 亚洲人成色77777在线观看| 国产网站免费| 一级毛片免费播放视频| 国产va视频| 中文天堂在线视频| 午夜限制老子影院888| 亚洲美女AV免费一区| 国产成人在线无码免费视频| 午夜一区二区三区| 国产91成人| 91美女视频在线观看| yjizz视频最新网站在线| 国产日韩丝袜一二三区| 国产精品视频导航| 18禁影院亚洲专区| 国产一级片网址| 在线免费不卡视频| 欧美yw精品日本国产精品| 啊嗯不日本网站| 亚洲精品无码久久毛片波多野吉| 免费一级成人毛片| 黄色成年视频| 午夜日b视频| 国产亚洲欧美日韩在线一区| 久久综合激情网| 久久这里只精品国产99热8| 99视频精品全国免费品| 日本一区二区不卡视频| 不卡色老大久久综合网| 欧美高清日韩| 欧美精品一区二区三区中文字幕| 亚欧美国产综合| 久久黄色影院| 精品偷拍一区二区| 国产精品网址你懂的| 国产精品久线在线观看| 欧美精品高清| 真实国产乱子伦视频| 亚洲香蕉伊综合在人在线| 亚洲欧洲综合| 国产十八禁在线观看免费|