外鍵如何使用
外鍵如何使用
外鍵表示了兩個關系之間的相關聯(lián)系。以另一個關系的外鍵作主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。以下是由學習啦小編整理關于什么是外鍵的內(nèi)容,希望大家喜歡!
外鍵的定義
設F是基本關系R的一個或一組屬性,但不是關系的鍵,Ks是基本關系S的主鍵。如果F與Ks相對應,則稱F是R的外鍵,并稱基本關系R為參照關系,基本關系S為被參照關系或目標關系。
換而言之,如果關系模式R中的某屬性集不是R的主鍵,而是另一個關系R1的主鍵則該屬性集是關系模式R的外鍵,通常在數(shù)據(jù)庫設計中縮寫為FK。
在實際操作中,將一個表的值放入第二個表來表示關聯(lián),所使用的值是第一個表的主鍵值(在必要時可包括復合主鍵值)。此時,第二個表中保存這些值的屬性稱為外鍵(foreign key)。
注意
顯然目標關系的主碼和參照關系的外碼必須定義在一個或同一組的域上。
關系R和S不一定是不同的關系,即外鍵不一定要與相應的主鍵同名。如在學生(學號,姓名,性別,專業(yè)號,年齡,班長)關系中,“學號”是主鍵,“班長”屬性表示該學生所在編輯的班長的學號,它引用了本關系中“學號”屬性,因此“班長”是外鍵,這里學生關系既是參照關系也是被參照關系。不過在實際應用中為了便于識別,當主鍵與相應的外鍵屬于不同關系時,往往取相同的名字。
作用
保持數(shù)據(jù)一致性,完整性,主要目的是控制存儲在外鍵表中的數(shù)據(jù)。 使兩張表形成關聯(lián),外鍵只能引用外表中的列的值或使用空值。
如果不使用外鍵,表2的學號字段插了一個值(比如20140999999),但是這個值在表1中并沒有,這個時候,數(shù)據(jù)庫允許插入,并不會對插入的數(shù)據(jù)做關系檢查。然而在設置外鍵的情況下,你插入表2學號字段的值必須要求在表1的學號字段能找到。 同時,如果你要刪除表1的某個學號字段,必須保證表2中沒有引用該字段值的列,否則就沒法刪除。這就是所謂的保持數(shù)據(jù)的一致性和完整性。如右圖,如果表2還引用表1的某個學號,你卻把表1中的這個學號刪了,表2就不知道這個學號對應的學生是哪個學生。
外鍵的使用方法
主鍵表和外建表:
使用設計界面創(chuàng)建外鍵時,出現(xiàn)主鍵表和外建表問題,上述使個人理解有誤:
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 為外鍵表。
總結:主鍵表是被引用的表,外鍵表是引用其他表的表。
外鍵的有效性
有很多時候,程序員會發(fā)現(xiàn)字段缺少、多余問題或者是創(chuàng)建外鍵以后就不能添加沒有受約束的行[特殊情況下是有必要的],這個時候不想對表結構進行操作,就可以使用約束失效。
以 Northwind 為例:想給產(chǎn)品表【Products表】添加一條不受種類表【Categories表】限制的數(shù)據(jù)??梢允巩a(chǎn)品表中的 Categories 約束失效。
寫法:ALTER TABLE dbo.Products NOCHECKCONSTRAINT FK_Products_Categories
添加完成后再使其有效:
ALTER TABLE dbo.Products CHECK CONSTRAINT FK_Products_Categories
這樣就完成不受某表約束的數(shù)據(jù)添加了。
還有一個好處是:如上述例子。修改 Categories 表時 添加字段時 要把所有引用 Categories 表的外鍵給失效。等給 Categories 表添加字段完成后再使所有應用 Categories 表的外鍵恢復有效性即可。
看過“外鍵如何使用”的人還看了: