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值