不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 百科知識(shí) > 外鍵如何使用

外鍵如何使用

時(shí)間: 謝君787 分享

外鍵如何使用

  外鍵表示了兩個(gè)關(guān)系之間的相關(guān)聯(lián)系。以另一個(gè)關(guān)系的外鍵作主關(guān)鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。以下是由學(xué)習(xí)啦小編整理關(guān)于什么是外鍵的內(nèi)容,希望大家喜歡!

  外鍵的定義

  設(shè)F是基本關(guān)系R的一個(gè)或一組屬性,但不是關(guān)系的鍵,Ks是基本關(guān)系S的主鍵。如果F與Ks相對(duì)應(yīng),則稱F是R的外鍵,并稱基本關(guān)系R為參照關(guān)系,基本關(guān)系S為被參照關(guān)系或目標(biāo)關(guān)系。

  換而言之,如果關(guān)系模式R中的某屬性集不是R的主鍵,而是另一個(gè)關(guān)系R1的主鍵則該屬性集是關(guān)系模式R的外鍵,通常在數(shù)據(jù)庫設(shè)計(jì)中縮寫為FK。

  在實(shí)際操作中,將一個(gè)表的值放入第二個(gè)表來表示關(guān)聯(lián),所使用的值是第一個(gè)表的主鍵值(在必要時(shí)可包括復(fù)合主鍵值)。此時(shí),第二個(gè)表中保存這些值的屬性稱為外鍵(foreign key)。

  注意

  顯然目標(biāo)關(guān)系的主碼和參照關(guān)系的外碼必須定義在一個(gè)或同一組的域上。

  關(guān)系R和S不一定是不同的關(guān)系,即外鍵不一定要與相應(yīng)的主鍵同名。如在學(xué)生(學(xué)號(hào),姓名,性別,專業(yè)號(hào),年齡,班長(zhǎng))關(guān)系中,“學(xué)號(hào)”是主鍵,“班長(zhǎng)”屬性表示該學(xué)生所在編輯的班長(zhǎng)的學(xué)號(hào),它引用了本關(guān)系中“學(xué)號(hào)”屬性,因此“班長(zhǎng)”是外鍵,這里學(xué)生關(guān)系既是參照關(guān)系也是被參照關(guān)系。不過在實(shí)際應(yīng)用中為了便于識(shí)別,當(dāng)主鍵與相應(yīng)的外鍵屬于不同關(guān)系時(shí),往往取相同的名字。

  作用

  保持?jǐn)?shù)據(jù)一致性,完整性,主要目的是控制存儲(chǔ)在外鍵表中的數(shù)據(jù)。 使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值或使用空值。

  如果不使用外鍵,表2的學(xué)號(hào)字段插了一個(gè)值(比如20140999999),但是這個(gè)值在表1中并沒有,這個(gè)時(shí)候,數(shù)據(jù)庫允許插入,并不會(huì)對(duì)插入的數(shù)據(jù)做關(guān)系檢查。然而在設(shè)置外鍵的情況下,你插入表2學(xué)號(hào)字段的值必須要求在表1的學(xué)號(hào)字段能找到。 同時(shí),如果你要?jiǎng)h除表1的某個(gè)學(xué)號(hào)字段,必須保證表2中沒有引用該字段值的列,否則就沒法刪除。這就是所謂的保持?jǐn)?shù)據(jù)的一致性和完整性。如右圖,如果表2還引用表1的某個(gè)學(xué)號(hào),你卻把表1中的這個(gè)學(xué)號(hào)刪了,表2就不知道這個(gè)學(xué)號(hào)對(duì)應(yīng)的學(xué)生是哪個(gè)學(xué)生。

  外鍵的使用方法

  主鍵表和外建表:

  使用設(shè)計(jì)界面創(chuàng)建外鍵時(shí),出現(xiàn)主鍵表和外建表問題,上述使個(gè)人理解有誤:

  CREATE TABLE TABLE1

  (

  [ID] INT IDENTITY(1,1) PRIMARY KEY

  )

  GO

  CREATE TABLE TABLE2

  (

  [ID] INT NOT NULL,

  FOREIGN KEY ([ID]) REFERENCES [TABLE1]([ID])

  )

  GO

  TABLE2 中引用了TABLE1,在此TABLE1為主鍵表,而TABLE2 為外鍵表。

  總結(jié):主鍵表是被引用的表,外鍵表是引用其他表的表。

  外鍵的有效性

  有很多時(shí)候,程序員會(huì)發(fā)現(xiàn)字段缺少、多余問題或者是創(chuàng)建外鍵以后就不能添加沒有受約束的行[特殊情況下是有必要的],這個(gè)時(shí)候不想對(duì)表結(jié)構(gòu)進(jìn)行操作,就可以使用約束失效。

  以 Northwind 為例:想給產(chǎn)品表【Products表】添加一條不受種類表【Categories表】限制的數(shù)據(jù)。可以使產(chǎn)品表中的 Categories 約束失效。

  寫法:ALTER TABLE dbo.Products NOCHECKCONSTRAINT FK_Products_Categories

  添加完成后再使其有效:

  ALTER TABLE dbo.Products CHECK CONSTRAINT FK_Products_Categories

  這樣就完成不受某表約束的數(shù)據(jù)添加了。

  還有一個(gè)好處是:如上述例子。修改 Categories 表時(shí) 添加字段時(shí) 要把所有引用 Categories 表的外鍵給失效。等給 Categories 表添加字段完成后再使所有應(yīng)用 Categories 表的外鍵恢復(fù)有效性即可。
看過“外鍵如何使用”的人還看了:

1.數(shù)據(jù)庫中外鍵的用法

2.信息管理信息系統(tǒng)專業(yè)論文

3.CCNA專業(yè)語匯中英對(duì)照

4.餐飲管理系統(tǒng)設(shè)計(jì)論文

5.c語言string的用法

2119402