新聞中心
在數(shù)據(jù)庫(kù)設(shè)計(jì)中,外鍵是一項(xiàng)非常重要的概念,它可以幫助保證數(shù)據(jù)庫(kù)的完整性和可靠性。雖然外鍵并不是必需的,但是在大多數(shù)情況下使用外鍵可以提高數(shù)據(jù)庫(kù)的性能和可維護(hù)性。本篇文章將詳細(xì)講解外鍵在數(shù)據(jù)庫(kù)中的目的和作用。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)從事做網(wǎng)站、網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司。作為專業(yè)的建站公司,成都創(chuàng)新互聯(lián)公司依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、成都營(yíng)銷網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!
一、外鍵的定義
外鍵(Foreign Key)指的是在一個(gè)表中,一個(gè)或多個(gè)字段的值是另一個(gè)表中某個(gè)字段的值,用于實(shí)現(xiàn)表之間的聯(lián)系。例如,在數(shù)據(jù)庫(kù)中有員工表和部門(mén)表,員工表中有一個(gè)字段是所屬部門(mén)的編號(hào),那么這個(gè)字段就可以作為員工表中的外鍵字段,在部門(mén)表中的部門(mén)編號(hào)字段作為主鍵,從而將兩個(gè)表關(guān)聯(lián)起來(lái)。
二、外鍵的作用
1. 保證數(shù)據(jù)的完整性
在使用外鍵時(shí),可以通過(guò)設(shè)置主鍵和外鍵的關(guān)系來(lái)保證數(shù)據(jù)的完整性。當(dāng)外鍵引用的主鍵值在目標(biāo)表中不存在時(shí),可通過(guò)外鍵約束來(lái)防止此操作,實(shí)現(xiàn)數(shù)據(jù)的完整性約束。
例如,在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),假設(shè)有一個(gè)表是訂單表,里面包含了商品的 ID,由于商品 ID 是與商品名稱一一對(duì)應(yīng)的,因此可以將商品 ID 設(shè)置為外鍵,同時(shí)將商品表中商品 ID 設(shè)置為主鍵,這樣就能夠避免在訂單表中添加不存在的商品 ID 而導(dǎo)致數(shù)據(jù)的不完整。
2. 增加數(shù)據(jù)查詢效率
在使用外鍵時(shí),可以通過(guò)索引對(duì)數(shù)據(jù)進(jìn)行優(yōu)化。對(duì)外鍵屬性建立索引,可以加快表之間查詢的效率,提高數(shù)據(jù)查詢的速度。在查詢時(shí),如果使用了外鍵屬性,數(shù)據(jù)庫(kù)管理系統(tǒng)就會(huì)使用主鍵的索引進(jìn)行查詢,從而提高了查詢的效率。
例如,在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),還是以訂單表和商品表舉例,如果在訂單表中使用了外鍵,那么在進(jìn)行商品信息查詢時(shí),就不必掃描整個(gè)訂單表,而是可以根據(jù)外鍵關(guān)系直接從商品表中進(jìn)行查詢,這樣可以節(jié)省系統(tǒng)開(kāi)銷,提高數(shù)據(jù)查詢效率。
3. 更好的可維護(hù)性
在使用外鍵時(shí),可以實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)更新和刪除操作,因此可以方便地維護(hù)數(shù)據(jù)的完整性。當(dāng)主表(或主鍵表)的數(shù)據(jù)發(fā)生變化時(shí),外鍵約束可以自動(dòng)更新或刪除相應(yīng)的外鍵數(shù)據(jù),從而避免了數(shù)據(jù)的不一致性。
例如,在上述的例子中,如果更改了商品表中某個(gè)商品的名稱,那么與其關(guān)聯(lián)的訂單表中的商品名稱也會(huì)隨之更新,從而達(dá)到了數(shù)據(jù)的一致性。
三、外鍵的實(shí)現(xiàn)
在實(shí)現(xiàn)外鍵時(shí),需要對(duì)建立外鍵的屬性進(jìn)行設(shè)置。在數(shù)據(jù)庫(kù)中,主鍵關(guān)系和外鍵關(guān)系至關(guān)重要。建立外鍵關(guān)系之前,必須先建立主鍵關(guān)系。在建立好主鍵關(guān)系后,在表的基礎(chǔ)上設(shè)置外鍵屬性,將外鍵關(guān)系與主鍵關(guān)系相互對(duì)應(yīng)即可。
四、外鍵的使用注意事項(xiàng)
雖然外鍵的使用可以帶來(lái)諸多優(yōu)點(diǎn),但是在使用外鍵時(shí),也需要注意以下幾點(diǎn):
1. 外鍵關(guān)系的建立需要考慮到數(shù)據(jù)庫(kù)的性能,在建立關(guān)系時(shí)應(yīng)該避免嵌套過(guò)多的關(guān)系。
2. 當(dāng)刪除一個(gè)表中的數(shù)據(jù)時(shí),必須先刪除該表中的所有外鍵引用,否則會(huì)因?yàn)橥怄I限制而無(wú)法刪除。
3. 外鍵關(guān)系的使用需要謹(jǐn)慎,在進(jìn)行數(shù)據(jù)操作時(shí)應(yīng)該避免修改或刪除大量數(shù)據(jù),否則會(huì)降低數(shù)據(jù)庫(kù)的性能。
外鍵在數(shù)據(jù)庫(kù)中是一項(xiàng)非常重要的功能,它能夠保證數(shù)據(jù)庫(kù)的完整性和可靠性,提高數(shù)據(jù)查詢效率,同時(shí)也給數(shù)據(jù)庫(kù)的維護(hù)帶來(lái)諸多便利。因此,在數(shù)據(jù)庫(kù)設(shè)計(jì)中,應(yīng)該充分考慮外鍵的使用。
相關(guān)問(wèn)題拓展閱讀:
- 外鍵是什么
- VB的數(shù)據(jù)庫(kù)中,什么叫外鍵
- 外鍵的作用
外鍵是什么
科洞大普中納旦豎國(guó)·科學(xué)百科 外鍵遲冊(cè)
外鍵是該表是另一個(gè)表之間聯(lián)接的字段(外鍵必須為另一個(gè)表中的主鍵)
外鍵的用途是確保數(shù)據(jù)的完整性。它通常包括以下衡渣幾種:
實(shí)體完整性,確保每個(gè)實(shí)體是唯一的(通過(guò)主鍵來(lái)實(shí)施)
域完整性,確保屬性值只從一套特定可選的里選擇
關(guān)聯(lián)完整性,確保每個(gè)外鍵或是NULL(如果允許的話)或含有與相關(guān)主鍵值相配的值
如果你悔爛在沒(méi)有定義數(shù)據(jù)庫(kù)的實(shí)際外鍵的情況,試圖強(qiáng)制執(zhí)行關(guān)聯(lián)完整性,那你就會(huì)遇到數(shù)據(jù)庫(kù)“斷列鏈接”或“孤單記錄”的風(fēng)險(xiǎn)。換句話說(shuō),數(shù)據(jù)的完整性會(huì)被破壞,你的數(shù)據(jù)庫(kù)會(huì)含有不良數(shù)據(jù),你的用戶會(huì)很生氣(或更糟)。
你從來(lái)不能肯定你的前臺(tái)程序是更改數(shù)據(jù)庫(kù)數(shù)據(jù)的唯一手段。那是太危險(xiǎn)了。此外,你在已經(jīng)建好的數(shù)據(jù)庫(kù)上花費(fèi)不必要及大量的時(shí)間和精力來(lái)生成邏輯。你在沒(méi)有合理理由的情況下再發(fā)明輪子。
從來(lái)不存在“太多的”外鍵。 或者是業(yè)務(wù)需求需要的, 或者不需要。如果需要(例如,確保每個(gè)定單歸屬于一個(gè)已知的客戶),那你必須實(shí)施它們。咐前悄性能不是問(wèn)題。不進(jìn)行外鍵檢查,你的查尋可能會(huì)快幾微微秒,但如果數(shù)據(jù)庫(kù)包含不良數(shù)據(jù),你的用戶會(huì)容忍這樣的情況持續(xù)多久呢?
比如在員工信息表中有部門(mén)的編號(hào),部門(mén)的信息在另外一個(gè)表中,在部門(mén)信息表中這個(gè)部門(mén)編號(hào)必須是存在的或者為空,而不能是一個(gè)不存在的部門(mén)編號(hào)。
這個(gè)就可以使用外鍵來(lái)限制員工信息表的部門(mén)編號(hào)的外鍵為部門(mén)信息表的部門(mén)編號(hào),這樣Oralce就可以自動(dòng)完成員工信息表中的部門(mén)編號(hào)必須存在了。
外鍵的用途是確保數(shù)據(jù)的完整性。它通常包括以下幾種:
實(shí)體完整性,確保每個(gè)實(shí)體是唯一的(通過(guò)主鍵來(lái)實(shí)施)
域完整性,確保屬燃滲性值只從一套特定可選的里選擇
關(guān)聯(lián)完整臘隱性,確保每個(gè)外鍵或是NULL(如果允許的話)或含有與相關(guān)主鍵值相配的值
如果你在沒(méi)有定義數(shù)據(jù)庫(kù)的實(shí)際外鍵的情況,試圖強(qiáng)制執(zhí)行關(guān)聯(lián)完整性,那你就會(huì)遇到數(shù)據(jù)庫(kù)“斷列鏈接”或“孤單記錄”輪段廳的風(fēng)險(xiǎn)。換句話說(shuō),數(shù)據(jù)的完整性會(huì)被破壞,你的數(shù)據(jù)庫(kù)會(huì)含有不良數(shù)據(jù),你的用戶會(huì)很生氣(或更糟)。
你從來(lái)不能肯定你的前臺(tái)程序是更改數(shù)據(jù)庫(kù)數(shù)據(jù)的唯一手段。那是太危險(xiǎn)了。此外,你在已經(jīng)建好的數(shù)據(jù)庫(kù)上花費(fèi)不必要及大量的時(shí)間和精力來(lái)生成邏輯。你在沒(méi)有合理理由的情況下再發(fā)明輪子。
從來(lái)不存在“太多的”外鍵。 或者是業(yè)務(wù)需求需要的, 或者不需要。如果需要(例如,確保每個(gè)定單歸屬于一個(gè)已知的客戶),那你必須實(shí)施它們。性能不是問(wèn)題。不進(jìn)行外鍵檢查,你的查尋可能會(huì)快幾微微秒,但如果數(shù)據(jù)庫(kù)包含不良數(shù)據(jù),你的用戶會(huì)容忍這樣的情況持續(xù)多久呢?
外鍵(Foreign Key)換而言之,如果關(guān)系模式R中的某屬性集不是R的主鍵,而是另一個(gè)關(guān)系R1的主鍵則逗粗燃該屬性集是關(guān)系模式R的外鍵,通常在數(shù)據(jù)庫(kù)設(shè)計(jì)中縮寫(xiě)為FK。
使用原則
1、 為關(guān)聯(lián)字段創(chuàng)建外凳穗鍵。
2、 所有的鍵都必須唯一。山虛
3、避免使用復(fù)合鍵。
4、外鍵總是關(guān)聯(lián)唯一的鍵字段。
使用方法
主鍵表和外建表:
使用設(shè)計(jì)界面創(chuàng)建外鍵時(shí),出現(xiàn)主鍵表和外建表問(wèn)題,上述使個(gè)人理解有誤:
CREATE TABLE TABLE1
(
INT IDENTITY(1,1) PRIMARY KEY
)
GO
CREATE TABLE TABLE2
(
INT NOT NULL,
FOREIGN KEY () REFERENCES ()
)
GO
TABLE2 中引用了TABLE1,在此TABLE1為主鍵表,而TABLE2 為外鍵表。
VB的數(shù)據(jù)庫(kù)中,什么叫外鍵
鍵:唯一標(biāo)識(shí)表中的所有行的一個(gè)列或一組列。
主鍵不允許空值。不能存在具有相同的主鍵值的兩個(gè)行,因此主鍵值敏旅總是唯一標(biāo)識(shí)單個(gè)行。
表中可以有不止一個(gè)鍵唯一標(biāo)識(shí)行,每個(gè)鍵都稱作候選鍵。只有一個(gè)候選鍵可以選作表的主鍵,所有其它候選鍵稱作備用鍵。盡管表不要求具有主鍵,但定義主鍵是很好的做法。
外鍵(FK):
是用于建立和加強(qiáng)兩個(gè)表數(shù)據(jù)之間的鏈接的一列或多列。通過(guò)祥拿知將保存表中主鍵值的一列或多列添加到另一個(gè)表中,可創(chuàng)建兩個(gè)表之間的鏈接。這個(gè)列就成為第二個(gè)表的外鍵。
例如:成績(jī)表中的學(xué)號(hào)不能做成績(jī)表的主鍵(因?yàn)橐恢?jǐn)消個(gè)學(xué)生可以有多行成績(jī)數(shù)據(jù)),但每行的學(xué)號(hào)和學(xué)生表中的學(xué)號(hào)相對(duì)應(yīng),并且學(xué)生表中的學(xué)號(hào)是學(xué)生表的主鍵,則稱成績(jī)表中的學(xué)號(hào)是學(xué)生表的外鍵
。(典型的一對(duì)多關(guān)系)
外鍵的作用
數(shù)據(jù)庫(kù)中
外鍵
的作用。多多了解這方面的內(nèi)容,對(duì)建立數(shù)據(jù)庫(kù)影響還是相當(dāng)大的,我們應(yīng)該好好的學(xué)習(xí)他了解他才能更好的掌握的。
外鍵 (FK) 是用于建立和加強(qiáng)兩個(gè)表數(shù)據(jù)之間的鏈接的一列或多列。通過(guò)將保存表中
主鍵
值的一列或多列添加到另一個(gè)表中,可創(chuàng)建兩個(gè)表之間的鏈接。這個(gè)列就成為第二個(gè)表的外鍵。
FOREIGN KEY 約束的主要目的是控制存儲(chǔ)在外鍵表中的數(shù)據(jù),但它還可以控制對(duì)主鍵表中數(shù)據(jù)的修改。例如,如果在 publishers 表中刪除一個(gè)出版商,而這個(gè)出版商的 ID 在 titles 表中記錄書(shū)的信息時(shí)使用了,則這兩個(gè)表之間關(guān)聯(lián)的完整性將被破壞,titles 表中該出版商的書(shū)籍因?yàn)榕c publishers 表中的數(shù)據(jù)沒(méi)有鏈接而變得孤立了。FOREIGN KEY 約束防止這種情況的發(fā)生。如果主鍵表中數(shù)據(jù)的更改使之與外鍵表中數(shù)據(jù)的鏈接失效,則這種更改是不能實(shí)現(xiàn)的,從而確保了引用完整性。如果試圖刪除主鍵表中的行或更改主鍵值,而該主鍵值與另一個(gè)表的 FOREIGN KEY 約束值相關(guān),則該操作不可實(shí)現(xiàn)。若要成功更改或刪除 FOREIGN KEY 約束的行,可以先在外鍵表中刪除外鍵數(shù)據(jù)或更改外鍵數(shù)據(jù),然后將外鍵鏈接到不同的主鍵數(shù)據(jù)上去。
外鍵只能引用外表中的列的值!
外鍵的作用:
保持?jǐn)?shù)據(jù)一致性,完整性,主要目的是控制存儲(chǔ)在外鍵表中的數(shù)據(jù)。 使兩張表形成關(guān)聯(lián),就是當(dāng)你對(duì)一個(gè)表的數(shù)據(jù)進(jìn)行操作,和他有關(guān)聯(lián)的一個(gè)或更多表的數(shù)據(jù)能夠同時(shí)發(fā)生改變。
例如一:
a b 兩個(gè)表
a表中存有客戶號(hào),客戶名稱
b表中存有每個(gè)客戶的訂單
有了外鍵后
你只能在確信b 表中沒(méi)有客戶x的訂單后,才可以在a表中刪除客戶x。
例如二:
例如有兩個(gè)表
A(a,b) :a為主鍵,b為外鍵(來(lái)自于B.b)
B(b,c,d) :b為主鍵
如果我把字段b的外鍵屬性去掉,對(duì)編程沒(méi)什么影響。
如上面,A中的b要么為空,要么是在B的b中存在的值,有外鍵的時(shí)候,數(shù)據(jù)庫(kù)會(huì)自動(dòng)幫你檢查A的b是否在B的b中存在。
1、外建表達(dá)的是參照完整性:這是數(shù)據(jù)固有的,與程序無(wú)關(guān)。因此,應(yīng)該交給DBMS來(lái)做。
2、使用外建,簡(jiǎn)單直觀,可以直接在
數(shù)據(jù)模型
中體現(xiàn),無(wú)論是設(shè)計(jì)、維護(hù)等回有很大的好處,特別是對(duì)于分析現(xiàn)有的團(tuán)唯數(shù)據(jù)庫(kù)的好處時(shí)非常明顯的–前不久我分析了一個(gè)企業(yè)現(xiàn)有的數(shù)據(jù)庫(kù),里面的參照完整性約束有的是外鍵描述,有的是用
觸發(fā)器
實(shí)現(xiàn),感覺(jué)很明兄或毀顯。當(dāng)然,文檔里可能有,但是也可能不全,但是外鍵就非常明顯和直觀。
3、既然我們可以用觸發(fā)器或程序完成的這個(gè)工作(指參照完整性約束),DBMS已經(jīng)提供了手段,為什么我們要自己去做?而且我們做的應(yīng)該說(shuō)沒(méi)有RDBMS做得好。實(shí)際上,早期的RDBMS并沒(méi)有外鍵,現(xiàn)在都有了,我認(rèn)為數(shù)據(jù)庫(kù)廠商增加這個(gè)功能是有道理的。從這個(gè)角度來(lái)說(shuō),外鍵更方便。
4、關(guān)于方便,根據(jù)我?guī)ы?xiàng)目的情況來(lái)看,程序員確實(shí)有反映,主要是在調(diào)試時(shí)
輸入數(shù)據(jù)
麻煩:如果數(shù)據(jù)可以違反參照完整性,那么就是說(shuō)參照完整性本身就不對(duì)名譽(yù)業(yè)務(wù)沖突,此時(shí)也不應(yīng)該用觸發(fā)期貨程序?qū)崿F(xiàn);否則,說(shuō)明數(shù)據(jù)是錯(cuò)誤的,根本就不應(yīng)該進(jìn)入數(shù)據(jù)庫(kù)!而且,這也應(yīng)該羨備是測(cè)試系統(tǒng)的一個(gè)內(nèi)容:阻止非法數(shù)據(jù)。實(shí)際上,前臺(tái)程序應(yīng)該對(duì)這種提交失敗做出處理。數(shù)據(jù)是企業(yè)的而非程序的,儲(chǔ)程序要盡量與數(shù)據(jù)分離,反之亦然。
數(shù)據(jù)庫(kù) 鍵fk的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù) 鍵fk,數(shù)據(jù)庫(kù)中使用外鍵(fk)的目的及作用,外鍵是什么,VB的數(shù)據(jù)庫(kù)中,什么叫外鍵,外鍵的作用的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開(kāi)發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)——四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,高電服務(wù)器托管,算力服務(wù)器租用,可選線路電信、移動(dòng)、聯(lián)通機(jī)房等。
當(dāng)前名稱:數(shù)據(jù)庫(kù)中使用外鍵(fk)的目的及作用(數(shù)據(jù)庫(kù)鍵fk)
標(biāo)題網(wǎng)址:http://m.fisionsoft.com.cn/article/copdphj.html


咨詢
建站咨詢
