數據庫主鍵和外鍵

1 什麼是主鍵 外鍵數據庫

 學生表(學號,姓名,性別,班級)     學號是一個主鍵函數

 課程表(課程號,課程名,學分)    課程號是一個主鍵設計

 成績表(學號,課程號,成績)     學號和課程號的屬性組構成一個主鍵索引

 成績表中的學號不是成績表的主鍵,不過是學生表的主鍵,成績表的外鍵,同理課程號也是成績表的外鍵事務

 定義:若是公共關鍵字在一個關係中是主關鍵字,那麼這個公共關鍵字被稱爲另外一個關係的外鍵it

 以一個關係的外鍵做主關鍵字的表被稱爲主表,具備此外鍵的表被稱爲主表的從表效率

2 外鍵的做用書籍

 外鍵用於保持數據一致性,完整性數據類型

 主要目的是控制存儲在外鍵表中的數據時間戳

3 主鍵的設計原則

 1)主鍵應當是對用戶沒有意義的

 2)主鍵應該是單列的,以提升鏈接和篩選操做的效率

   複合鍵的使用一般出於兩點考慮:

    a)主鍵應當具備意義-----這爲認爲的破壞數據庫提供了方便

    b)在描述多對多關係的鏈接表中可使用兩個外部鍵做爲主鍵------該表可能成爲其餘從表的主表,併成爲從表的主鍵的一部分,使得以後的從表包含更多的列

 3)永遠不要更新主鍵

 4)主鍵不該該包含動態變化的數據(時間戳等)

 5)主鍵應當由計算機自動生成

4 數據庫主鍵選取策略

 創建數據庫的時候,須要爲每張表指定一個主鍵(一個表只能有一個主鍵,可是能夠有多個候選索引)

 常見的主鍵選取方式有:

 1)自動增加型字段

  自動增加型主鍵會省略不少繁瑣的工做,但在數據緩衝模式下,不能預先填寫主鍵與外鍵的值

  Order(OrderID,OrderDate)   //主鍵OrderID是自動增加型字段

  OrderDetail(OrderID,LineNum,ProductID,Price)

  若是要在Order表中插入一條記錄,在OrderDetail表中插入若干條記錄,爲了能在OrderDetail表中插入正確的OrderID字段,必須先更新Order表以得到系統系統分配的OrderID,可是爲了確保數據一致性,Order表和OrderDetail表必須在事務保護下同時進行更新,這顯然是矛盾的

  除此以外,當須要在多個數據庫之間進行數據複製時,自動增加型字段可能形成主鍵衝突

 2)手動增加型字段

 3)使用UniqueIdentifier SQL Server提供一個UniqueIdentifier數據類型(16字節),並提供一個生成函數NEWID(),生成一個惟一的UniqueIdentifier

 4)使用COMB類型

  保留UniqueIdentifier的前10字節,後6字節表示生成時間

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

 

1 外鍵

 外鍵(FK)是用於創建或增強兩個表數據之間的連接的一列或多列。

 經過將表中主鍵值的一列或多列添加到另外一個表中,可建立兩個表之間的鏈接,這個列就成爲第二個表的外鍵

 FK約束的目的是控制存儲在外表中的數據,同時能夠控制對主鍵表中數據的修改

 例如:publishers表中記錄出版商的信息,titles表中記錄書的信息,若是在publishers的表中刪除一個出版商,而這個出版商的ID在titles表中記錄書的信息時被使用了,則這兩個表之間關聯的完整性將被破壞,即titles表中該出版商的書籍由於與publisher表中的數據沒有連接而變的孤立。

 FK約束能夠防止這種狀況的發生,若是主鍵表中數據的更改使得與外鍵表中數據的連接失效,則這種更改是不能實現的;若是試圖刪除主鍵表中的行或試圖修改主鍵值,而該主鍵值與另外一個表的FK約束值相關,則該操做不可實現。若要成功的更改或刪除FK約束的行,能夠如今外鍵表中刪除外鍵數據或更改外鍵數據,而後將外鍵鏈接到不一樣的主鍵數據上去

 外鍵主要是用來控制數據庫中的數據完整性的,當對一個表的數據進行操做時,和他有關聯的一個表或多個表的數據可以同時發生改變 

 例子:

 A(a,b) :a爲主鍵,b爲外鍵(來自於B.b)

 B(b,c,d) :b爲主鍵

 A中的b字段要麼爲空,要麼爲B表中存在的b值

相關文章
相關標籤/搜索