引言:
- 前幾天學習項目的時候發現了關於SQL里的一點基礎見解。
- 關於SQL里的主鍵,外鍵。
主鍵:
- 主鍵有2種主鍵的存在。一種是業務主鍵,一種是邏輯主鍵。
- 業務主鍵通常是表里有的數據作為主鍵使用。一般常見的就是不容易重復的數據,例如:身份證號等
- 邏輯主鍵就是本來一條數據沒有這個字段,但是我們擔心會出現重復數據,我們自己生成一個讓此條數據成為唯一的重要字段,在一張表里很明顯的主鍵建立方式是一個 int字段標明他 並且讓他自增長(一般稱為標識列)
- 一般主鍵的作用用術語說就是“實體完整性”
- 實體:表中的記錄,一個實體就是指表中的一條記錄。
- 實體完整性:在表中不能存在完全相同的記錄,且每條記錄都要具有一個非空且不重復的主鍵值。
- 使用邏輯主鍵另外一個優勢就是他的物理性能比較好。在sql的物理存儲中他是一並往下添加,和數據的排列是一致的,這樣做任何操作都會比較方便、快捷。
- GUID,GUID算法是一種可以產生唯一表示的高效算法,它使用網卡MAC、地址、納秒級時間、芯片ID碼等算出來的,這樣保證每次生成的GUID永遠不會重復,無論是同一計算機還是不同計算機。在公元3400年前產生的GUID與任何其他產生過的GUID都不相同。通常我們使用邏輯主鍵比較合理。
- GUID如果當主鍵我們通常要注意,他不會像int字段那樣自增長,他是隨機的,所以使用GUID也會造成數據存儲的物理性變差,使一張表會出現很多變動,當然事無絕對,也有方法能讓GUID的排序和數據的排序一致。
- Sql中的方法:newid();
外鍵:
- 外鍵我們通常不能單獨解釋,我的理解是當有2個互相關聯的表要組合在一起便於做各種操作的時候,外鍵就起到了很大的作用,也就是用術語說是“參照完整性”
- 當更新、刪除、插入一個表中的數據時,通過參照引用相互關聯的另一個表中的數據,來檢查對表的數據操作是否正確。參照的完整性要求關系中不允許引用不存在的實體。參照完整性與實體完整性是關系模型必須滿足的完整性約束條件。
- 簡單的說就是表間主鍵外鍵的關系。
- 參照完整性則是相關聯的兩個表之間的約束,具體的說,就是從表中每條記錄外鍵的值必須是主表中存在的,因此,如果在兩個表之間建立了關聯關系,則對一個關系進行的操作要影響到另一個表中的記錄。
現在有兩張表,Users表有一個字段是“userId”和一個字段“carId”,"username",Cars表有一個字段“carId”和“carName” ,他們之間添加了外鍵關聯。所以如果我們想知道其中一個user的car name我們就可以使用這樣的sql來查詢
select u.username,c.carName from u as Users inner join c as Cars on u.carId=c.carId where u.userId=@UserId
請注意這里的 u.carId=c.carId 這樣就將兩張表聯系上了。我們也查詢到了我們想要的2張表的結果。
定義主鍵和外鍵主要是為了維護關系數據庫的完整性,總結一下:
一、主鍵是能確定一條記錄的唯一標識,比如,一條記錄包括身份正號,姓名,年齡。身份證號是唯一能確定你這個人的,其他都可能有重復,所以,身份證號是主鍵。
外鍵用於與另一張表的關聯。是能確定另一張表記錄的字段,用於保持數據的一致性。比如,A表中的一個字段,是B表的主鍵,那他就可以是A表的外鍵。
二、主鍵、外鍵的區別
- 定義:
- 主鍵--唯一標識一條記錄,不能有重復的,不允許為空
- 外鍵--表的外鍵是另一表的主鍵, 外鍵可以有重復的, 可以是空值
- 作用:
- 主鍵--用來保證數據完整性
- 外鍵--用來和其他表建立聯系用的
- 個數:
- 主鍵--主鍵只能有一個
- 外鍵--一個表可以有多個外鍵