日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

主键,外键认识理论

發(fā)布時(shí)間:2023/12/18 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主键,外键认识理论 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、什么是主鍵、外鍵:

關(guān)系型數(shù)據(jù)庫中的一條記錄中有若干個(gè)屬性,若其中某一個(gè)屬性組(注意是組)能唯一標(biāo)識一條記錄,該屬性組就可以成為一個(gè)主鍵?
比如??
學(xué)生表(學(xué)號,姓名,性別,班級)?
其中每個(gè)學(xué)生的學(xué)號是唯一的,學(xué)號就是一個(gè)主鍵?
課程表(課程編號,課程名,學(xué)分)?
其中課程編號是唯一的,課程編號就是一個(gè)主鍵?
成績表(學(xué)號,課程號,成績)?
成績表中單一一個(gè)屬性無法唯一標(biāo)識一條記錄,學(xué)號和課程號的組合才可以唯一標(biāo)識一條記錄,所以?學(xué)號和課程號的屬性組是一個(gè)主鍵?
??
成績表中的學(xué)號不是成績表的主鍵,但它和學(xué)生表中的學(xué)號相對應(yīng),并且學(xué)生表中的學(xué)號是學(xué)生表的主鍵,則稱成績表中的學(xué)號是學(xué)生表的外鍵?
??
同理?成績表中的課程號是課程表的外鍵?
??
定義主鍵和外鍵主要是為了維護(hù)關(guān)系數(shù)據(jù)庫的完整性,總結(jié)一下:
1.主鍵是能確定一條記錄的唯一標(biāo)識,比如,一條記錄包括身份正號,姓名,年齡。

身份證號是唯一能確定你這個(gè)人的,其他都可能有重復(fù),所以,身份證號是主鍵。?
2.外鍵用于與另一張表的關(guān)聯(lián)。是能確定另一張表記錄的字段,用于保持?jǐn)?shù)據(jù)的一致性。

比如,A表中的一個(gè)字段,是B表的主鍵,那他就可以是A表的外鍵。

?

?

二、??主鍵、外鍵和索引的區(qū)別?

主鍵、外鍵和索引的區(qū)別?

?

主鍵

外鍵

索引

定義:

唯一標(biāo)識一條記錄,不能有重復(fù)的,不允許為空

表的外鍵是另一表的主鍵,?外鍵可以有重復(fù)的,?可以是空值

該字段沒有重復(fù)值,但可以有一個(gè)空值

作用:

用來保證數(shù)據(jù)完整性

用來和其他表建立聯(lián)系用的

是提高查詢排序的速度

個(gè)數(shù):

主鍵只能有一個(gè)

一個(gè)表可以有多個(gè)外鍵

一個(gè)表可以有多個(gè)惟一索引

?

聚集索引和非聚集索引的區(qū)別?

聚集索引一定是唯一索引。但唯一索引不一定是聚集索引。??

聚集索引,在索引頁里直接存放數(shù)據(jù),而非聚集索引在索引頁里存放的是索引,這些索引指向?qū)iT的數(shù)據(jù)頁的數(shù)據(jù)。

?

?

?

?

三、數(shù)據(jù)庫中主鍵和外鍵的設(shè)計(jì)原則

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

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

主鍵:

??關(guān)系數(shù)據(jù)庫依賴于主鍵---它是數(shù)據(jù)庫物理模式的基石。

??主鍵在物理層面上只有兩個(gè)用途:

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

????????2.?作為一個(gè)可以被外鍵有效引用的對象。

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

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

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

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

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

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

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

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

?

四、數(shù)據(jù)庫主鍵選取策略

我們在建立數(shù)據(jù)庫的時(shí)候,需要為每張表指定一個(gè)主鍵,所謂主鍵就是能夠唯一標(biāo)識表中某一行的屬性或?qū)傩越M,一個(gè)表只能有一個(gè)主鍵,但可以有多個(gè)候選索引。因?yàn)橹麈I可以唯一標(biāo)識某一行記錄,所以可以確保執(zhí)行數(shù)據(jù)更新、刪除的時(shí)候不會出現(xiàn)張冠李戴的錯(cuò)誤。當(dāng)然,其它字段可以輔助我們在執(zhí)行這些操作時(shí)消除共享沖突,不過就不在這里討論了。主鍵除了上述作用外,常常與外鍵構(gòu)成參照完整性約束,防止出現(xiàn)數(shù)據(jù)不一致。所以數(shù)據(jù)庫在設(shè)計(jì)時(shí),主鍵起到了很重要的作用。

常見的數(shù)據(jù)庫主鍵選取方式有:

·?自動增長字段

·?手動增長字段

·?UniqueIdentifier

·?“COMB(Combine)”類型

1自動增長型字段

很多數(shù)據(jù)庫設(shè)計(jì)者喜歡使用自動增長型字段,因?yàn)樗褂煤唵巍W詣釉鲩L型字段允許我們在向數(shù)據(jù)庫添加數(shù)據(jù)時(shí),不考慮主鍵的取值,記錄插入后,數(shù)據(jù)庫系統(tǒng)會自動為其分配一個(gè)值,確保絕對不會出現(xiàn)重復(fù)。如果使用SQL?Server數(shù)據(jù)庫的話,我們還可以在記錄插入后使用@@IDENTITY全局變量獲取系統(tǒng)分配的主鍵鍵值

轉(zhuǎn)載于:https://www.cnblogs.com/shangping/p/10889448.html

總結(jié)

以上是生活随笔為你收集整理的主键,外键认识理论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。