最新文章專題視頻專題問答1問答10問答100問答1000問答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
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

主鍵和外鍵的作用

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 07:47:13
文檔

主鍵和外鍵的作用

主鍵和外鍵的作用:主鍵和外鍵是把多個表組織為一個有效的關(guān)系數(shù)據(jù)庫的粘合劑。主鍵和外鍵的設(shè)計對物理數(shù)據(jù)庫的性能和可用性都有著決定性的影響。 必須將數(shù)據(jù)庫模式從理論上的邏輯設(shè)計轉(zhuǎn)換為實際的物理設(shè)計。而主鍵和外鍵的結(jié)構(gòu)是這個設(shè)計過程的癥結(jié)所在。一旦將所設(shè)計的數(shù)據(jù)庫
推薦度:
導(dǎo)讀主鍵和外鍵的作用:主鍵和外鍵是把多個表組織為一個有效的關(guān)系數(shù)據(jù)庫的粘合劑。主鍵和外鍵的設(shè)計對物理數(shù)據(jù)庫的性能和可用性都有著決定性的影響。 必須將數(shù)據(jù)庫模式從理論上的邏輯設(shè)計轉(zhuǎn)換為實際的物理設(shè)計。而主鍵和外鍵的結(jié)構(gòu)是這個設(shè)計過程的癥結(jié)所在。一旦將所設(shè)計的數(shù)據(jù)庫

主鍵和外鍵是把多個表組織為一個有效的關(guān)系數(shù)據(jù)庫的粘合劑。主鍵和外鍵的設(shè)計對物理數(shù)據(jù)庫的性能和可用性都有著決定性的影響。 必須將數(shù)據(jù)庫模式從理論上的邏輯設(shè)計轉(zhuǎn)換為實際的物理設(shè)計。而主鍵和外鍵的結(jié)構(gòu)是這個設(shè)計過程的癥結(jié)所在。一旦將所設(shè)計的數(shù)據(jù)庫

主鍵和外鍵是把多個表組織為一個有效的關(guān)系數(shù)據(jù)庫的粘合劑。主鍵和外鍵的設(shè)計對物理數(shù)據(jù)庫的性能和可用性都有著決定性的影響。

必須將數(shù)據(jù)庫模式從理論上的邏輯設(shè)計轉(zhuǎn)換為實際的物理設(shè)計。而主鍵和外鍵的結(jié)構(gòu)是這個設(shè)計過程的癥結(jié)所在。一旦將所設(shè)計的數(shù)據(jù)庫用于了生產(chǎn)環(huán)境,就很難對這些鍵進行修改,所以在開發(fā)階段就設(shè)計好主鍵和外鍵就是非常必要和值得的。

主鍵:

關(guān)系數(shù)據(jù)庫依賴于主鍵---它是數(shù)據(jù)庫物理模式的基石。主鍵在物理層面上只有兩個用途:

1. 惟一地標(biāo)識一行。

2. 作為一個可以被外鍵有效引用的對象。

基于以上這兩個用途,下面給出了我在設(shè)計物理層面的主鍵時所遵循的一些原則:

1. 主鍵應(yīng)當(dāng)是對用戶沒有意義的。如果用戶看到了一個表示多對多關(guān)系的連接表中的數(shù)據(jù),并抱怨它沒有什么用處,那就證明它的主鍵設(shè)計地很好。

2. 主鍵應(yīng)該是單列的,以便提高連接和篩選操作的效率。

注:使用復(fù)合鍵的人通常有兩個理由為自己開脫,而這兩個理由都是錯誤的。其一是主鍵應(yīng)當(dāng)具有實際意義,然而,讓主鍵具有意義只不過是給人為地破壞數(shù)據(jù)庫提供了方便。其二是利用這種方法可以在描述多對多關(guān)系的連接表中使用兩個外部鍵來作為主鍵,我也反對這種做法,理由是:復(fù)合主鍵常常導(dǎo)致不良的外鍵,即當(dāng)連接表成為另一個從表的主表,而依據(jù)上面的第二種方法成為這個表主鍵的一部分,然,這個表又有可能再成為其它從表的主表,其主鍵又有可能成了其它從表主鍵的一部分,如此傳遞下去,越靠后的從表,其主鍵將會包含越多的列了。

3. 永遠也不要更新主鍵。實際上,因為主鍵除了惟一地標(biāo)識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應(yīng)對用戶無意義的原則被違反了。

注:這項原則對于那些經(jīng)常需要在數(shù)據(jù)轉(zhuǎn)換或多數(shù)據(jù)庫合并時進行數(shù)據(jù)整理的數(shù)據(jù)并不適用。

4. 主鍵不應(yīng)包含動態(tài)變化的數(shù)據(jù),如時間戳、創(chuàng)建時間列、修改時間列等。

5. 主鍵應(yīng)當(dāng)有計算機自動生成。如果由人來對主鍵的創(chuàng)建進行干預(yù),就會使它帶有除了惟一標(biāo)識一行以外的意義。一旦越過這個界限,就可能產(chǎn)生認為修改主鍵的動機,這樣,這種系統(tǒng)用來鏈接記錄行、管理記錄行的關(guān)鍵手段就會落入不了解數(shù)據(jù)庫設(shè)計的人的手中。

數(shù)據(jù)庫外鍵的使用

外鍵的作用我認為主要有兩個:一個是讓數(shù)據(jù)庫自己通過外鍵來保證數(shù)據(jù)的完整性和一致性,一個就是能夠增加ER圖的可讀性。我覺得第二點的重要性甚至比第一點還高。

有些人認為外鍵的建立會給開發(fā)時操作數(shù)據(jù)庫帶來很大的麻煩,因為數(shù)據(jù)庫有時候會由于沒有通過外鍵的檢測而使得開發(fā)人員刪除,插入操作失敗,他們覺得這樣很麻煩,其實這正式外鍵在強制你保證數(shù)據(jù)的完整性和一致性,這是好事兒。

應(yīng)該說如果系統(tǒng)比較小,外鍵的作用可能不會很明顯,如果你的系統(tǒng)后臺有幾百個表的話,沒有外鍵的數(shù)據(jù)庫設(shè)計是我無法想象的,有一個基礎(chǔ)數(shù)據(jù)的表:商品,其他表都保存商品ID ,查詢時需要連表來查詢商品的名稱,單據(jù)1的商品表中有商品ID字段,單據(jù)2的商品表中也有商品ID字段,如果不拉出外鍵的話,當(dāng)單據(jù)1,2都使用商品ID為3的商品后,刪除此商品后,再查看單據(jù)1,2的時候就會查不到商品的名稱

當(dāng)表很少的時候,有人認為可以在程序?qū)崿F(xiàn)的時候來通過寫腳本來保證數(shù)據(jù)的完整性和一致性,也就是在刪除商品的操作的時候去檢測單據(jù)1,2中是否已經(jīng)使用了商品ID為3的商品,但是當(dāng)你寫完腳本之后系統(tǒng)有增加了一個單據(jù)3
他也保存商品ID找個字段,如果不拉出外鍵,你還是會出現(xiàn)查不到商品名稱的情況,你總不能每增加一個使用商品ID的字段的單據(jù)時就回去修改你檢測商品是否被使用的腳本吧

第二點就是增加ER圖的可讀性。這也同樣是在后臺數(shù)據(jù)庫表非常多的時候能夠體現(xiàn)出來的,外鍵能夠明確的兩個表之間的關(guān)系,例如一個單據(jù)的主表和單據(jù)的品的子表,如果兩個表沒有拉出外鍵表明關(guān)系,且兩個表的位置在ER圖中很遠,對于一個對這個系統(tǒng)不是非常了解的人來說,讓他去理出兩個表之間的關(guān)系是很麻煩的,如果你拉出外鍵就算兩個表離的很遠,他也能隨著外鍵找出他們之間的關(guān)系來,ER圖的可讀性對于一個剛剛接觸大型系統(tǒng)的新手來說是極為重要的。

當(dāng)然,外鍵的個數(shù)也不是沒有個尺度,因為外鍵拉的過多會使ER圖極為混亂(到處都是線) ,所以應(yīng)該掌握合適的尺度才行,必要的外鍵必須要拉出來。如果實在不想因為外鍵過多而造成ER圖的混亂,可以對基礎(chǔ)數(shù)據(jù)的刪除用假刪除的辦法,以避免在沒有外鍵約束和檢查的情況下造成數(shù)據(jù)的不一致性。

uniqueidentifier數(shù)據(jù)類型

uniqueidentifier數(shù)據(jù)類型可存儲16字節(jié)的二進制值,其作用與全局唯一標(biāo)記符(GUID)一樣。GUID是唯一的二進制數(shù):世界上的任何兩臺計算機都不會生成重復(fù)的GUID值。GUID主要用于在用于多個節(jié)點,多臺計算機的網(wǎng)絡(luò)中,分配必須具有唯一性的標(biāo)識符。 在SQL中 ROWGUIDCOL表示新列是行的全局唯一標(biāo)識列。對于每個表只能指派一個uniqueidentifier 列作為ROWGUIDCO列。ROWGUIDCOL屬性只能指派給uniqueidentifier列
一 什么是uniqueidentifier?
Uniqqueidentifier 是全局唯一的標(biāo)識

p d [3~)F F C E0二 UniqueIdentifier 數(shù)據(jù)類型的列如何賦值?
1 使用 NewID()函數(shù) 來實現(xiàn)
2 直接將字符串的常量轉(zhuǎn)化成這樣的格式 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
舉例:6F9619FF-8B86-D011-B42D-00C04FC964FF 為有效的UniqueIdentifier數(shù)據(jù)
3 直接賦于32位的十六位數(shù)據(jù)
舉例 0xffffffff00000000ffffffff00000000
三 UniqueIdentifier 數(shù)據(jù)類型 數(shù)據(jù)實際是怎么在數(shù)據(jù)庫中保存的?
UniqueIdentifier 數(shù)據(jù)類型存儲實際的數(shù)據(jù)是16個字節(jié)的二進制值,
UniQueIdentifier 可以轉(zhuǎn)化成實際的字符串型和二進制數(shù)據(jù)類型

四 NewID()函數(shù)是如何生成唯一的UniqueIdentifier 值的呢?
NewID()函數(shù)是從他們的網(wǎng)卡上的標(biāo)識數(shù)字和CPU時鐘的唯一的數(shù)字生成新的UniqueIdentifier數(shù)據(jù) ,這個數(shù)據(jù)和GUID是一樣的每臺計算機能生成全球唯一的值
這樣在多臺計算機和多網(wǎng)絡(luò)之間生成具有唯一性的標(biāo)識符

五 使用 Uniqueidentifier數(shù)據(jù)類型的主要的優(yōu)點
Uniqueidentifier 數(shù)據(jù)類型主要的優(yōu)點是在使用newid函數(shù)生成值的時候是可以保證值的全球唯一性
可以唯一的標(biāo)識單行的記錄 對于多庫(尤其是多機器,多網(wǎng)段的數(shù)據(jù)庫的復(fù)制)來將比IDEntity來的更有效
其次在使用Identity的情況下,我們對自動生成的值是不能修改的,而Uniqueidentifier數(shù)據(jù)類型是可以隨時修改的

六 使用Uniqueidentifier的數(shù)據(jù)類型的缺點
1 對于生成的Uniqueidentifier 類型的值來講 ,是無序
在正常顯示相關(guān)的數(shù)據(jù)信息的時候,返回的信息是無序的ITPUB個人空間 p e%A _0`2I l(G!v t0]
對于 Identity 為標(biāo)識的數(shù)據(jù)顯示的時候,默認的情況下是根據(jù)添加記錄的順序來顯示的。這樣,對于uniqueidentifier為主鍵的信息集 ,還是需要一個默認標(biāo)識排序的字段。

2 對于Uniqueidentifier 字段來將數(shù)據(jù)的實際的信息為16個字節(jié),相對來將比Identity來講 大的多,相對來將 存儲空間和查詢的效率會降低很多的。

七 在系統(tǒng)數(shù)據(jù)庫的設(shè)計中我們?nèi)绾螌niqueidentifier,Identity ,和可標(biāo)識的記錄屬性(有實際的含義的信息)作為主鍵 ,這三種方式 進行取舍

以屬性為主鍵的系統(tǒng)設(shè)計情況
在系統(tǒng)設(shè)計的過程中
單條信息中包含可以表示唯一性的屬性(一般不能太多3個以內(nèi))而且這樣的屬性是必填字段。在記錄生存周期內(nèi)一般是不進行改動的,表一般多于50個這樣級別的系統(tǒng)
以屬性為主鍵 ,這樣的方式還是最佳的

舉例: 關(guān)于學(xué)生的管理信息系統(tǒng) 以學(xué)生的學(xué)號為主鍵

以Uniqueidentifier 列為主鍵的情況
在需要多個數(shù)據(jù)庫之間,多個網(wǎng)段之間需要進行數(shù)據(jù)庫的復(fù)制時,我們就需要在每一個唯一的標(biāo)識來區(qū)別每一個單條記錄,在沒有合適的屬性來做主鍵的情況下可以用Uniqueidentifier列來生成主鍵

以 Identity為主鍵的情況
不需要數(shù)據(jù)庫的復(fù)制,和系統(tǒng)比較小的情況下(50表以內(nèi))可以用 Identity列來生成主鍵,適合于快速開發(fā)

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

文檔

主鍵和外鍵的作用

主鍵和外鍵的作用:主鍵和外鍵是把多個表組織為一個有效的關(guān)系數(shù)據(jù)庫的粘合劑。主鍵和外鍵的設(shè)計對物理數(shù)據(jù)庫的性能和可用性都有著決定性的影響。 必須將數(shù)據(jù)庫模式從理論上的邏輯設(shè)計轉(zhuǎn)換為實際的物理設(shè)計。而主鍵和外鍵的結(jié)構(gòu)是這個設(shè)計過程的癥結(jié)所在。一旦將所設(shè)計的數(shù)據(jù)庫
推薦度:
標(biāo)簽: 一個 作用 用處
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top