之所以稱之為再學習,是因為此前曾學習過這些知識,只不過當時沒有總結。現在再次遇到它,詳細再學習一下,加深印象。
什麼是外鍵?
如果公用關鍵字(表中相同的屬性)是一個關係中的主關鍵字(primary key),那麼這個公用關鍵字被稱為另一個關係的外鍵。
相關概念解析:
公用關鍵字:多個表中的相同的屬性或屬性群組。
主關鍵字:即主鍵。
關係:即一張表。
主表與從表
表A中有a、b兩個欄位,a欄位是主鍵。表B有a、c兩個欄位。a欄位可以設定外鍵。此時,表A為主表,表B為從表。
外鍵的作用:
1、資料完整性的(資料庫基礎理論書中所說的“參照完整性”的資料庫實現方式。)
2、保持資料一致性,
3、控制儲存在外鍵表中的資料
簡而言之:當你對一個表的資料進行操作時和他有關聯的一個或更多表的資料能夠同時發生改變,這就是外鍵的作用。
外鍵約束的主要目的是控制儲存在外鍵表中的資料,但它還可以控制對主鍵表中資料的修改。例如,如果在 publishers表中刪除一個出版商,而這個出版商的 ID
在 titles表中記錄書的資訊時使用了,則這兩個表之間關聯的完整性將被破壞,titles
表中該出版商的書籍因為與 publishers 表中的資料沒有連結而變得孤立了。
外鍵約束防止這種情況的發生。如果主鍵表中資料的更改使之與外鍵表中資料的連結失效,則這種更改是不能實現的,從而確保了參考完整性。如果試圖刪除主鍵表中的行或更改主索引值,而該主索引值與另一個表的外鍵約束值相關,則該操作不可實現。若要成功更改或刪除外鍵約束的行,可以先在外鍵表中刪除外鍵資料或更改外鍵資料,然後將外鍵連結到不同的主鍵資料上去。
例如:
a b兩個表
a表中存有客戶號,客戶名稱
b表中存有每個客戶的訂單
有了外鍵後,你只能在確信b表中沒有客戶x的訂單後,才可以在a表中刪除客戶x,否則b表中的資料就變得孤立了,即完整性缺失。
建立外鍵的原則:
1、為關聯欄位建立外鍵。
2、所有的鍵都必須唯一。
3、避免使用複合鍵。
4、外鍵總是關聯唯一的鍵欄位。
如何建立外鍵:
一、使用T-SQL語句:
指定主鍵關鍵字:foreign key(列名)
引用外鍵關鍵字:references <外鍵表名>(外鍵列名)
事件觸發限制: ondelete和on update ,可設參數cascade(跟隨外鍵改動),
restrict(限制外表中的外鍵改動),set Null(設空值),set Default(設預設值),[預設]no action
例如:
outTable表主鍵 id類型 int
建立含有外鍵的表:
create table temp(
id int,
name char(20),
foreign key(id) references outTable(id) on delete cascade on updatecascade);
說明:把id列設為外鍵,參照外表outTable的id列,當外鍵的值刪除,本表中對應的列刪除(on
delete的作用),當外鍵的值改變,本表中對應的列值改變(on update的作用)。
二、使用DBMS關係圖建立外鍵:
1、建表(見圖,設定主鍵。)
2、建立關係圖
3、選擇添加表:
4、建立外鍵,將要建立外鍵關係表中主鍵欄位拖向外鍵欄位。
5、點擊確定即可完成外鍵的建立。
使用外鍵的注意事項:
1、使兩張表形成關聯,外鍵只能引用外表中的列的值。
2、外建表達的是參照完整性:這是資料固有的,與程式無關。因此,應該交給DBMS來做。
3、使用外建,簡單直觀,可以直接在資料模型中體現,無論是設計、維護等回有很大的好處,特別是對於分析現有的資料庫的好處非常明顯
4、相對於觸發器或程式完成的這個工作(指參照完整性條件約束),外鍵更方便。
5、阻止非法資料。實際上,前景程式應該對這種提交失敗做出處理。資料是企業的而非程式的,儲程式要盡量與資料分離,反之亦然。
6、建立外鍵的前提:本表的列必須與外鍵類型相同(外鍵必須是外表主鍵)。