那什麼是外鍵 外鍵有什麼作用呢

從上面的這個圖可以看到在設計的時候,就給表1添加一個外鍵,這個外鍵就是表2中的學號字段,那麼這樣表1就是主表,表2就是子表。所以結合2張表就能保持數據的一致性、完整性(估計就是還原成原來的那張大表)。
藉着這個例子再談談外鍵的一些事項:
1、表1可以有一個或者多個外鍵,也可以沒有。(如果表1有多個外鍵可不可以是這樣的情況,表2中的多個字段是表1的外鍵;或者說表1的多個外鍵是在多個表中)

2、這個外鍵可以不是表1的主鍵,但必須是子表的主鍵。(簡單的說就是,如果一個字段是某個表的外鍵時,那麼該字段必須是主鍵)


外鍵作用

爲了一張表記錄的數據不要太過冗餘。這和軟件project的模塊化思想差點兒相同類似,僅僅只是在數據庫中是對錶關係進行解耦,儘量讓表 記錄的數據單一化。就如你貼的圖片中,把成績和學生信息放在一張表中就太冗餘了,成績全然能夠以學生的id作爲區分標識。

爲什麼說外鍵能保持數據的一致性和完整性呢?

你想想,你的圖中的第一章表切割成了表1和表2,表2的學號引用了表1的學號字段作爲外鍵,假設不建立外鍵。僅僅是和表1一樣單純性 地設立一個學號字段。那麼和建立外鍵有什麼差別呢?

比方表1中張三的學號爲20140900001,那麼我在表2中插數據的時候在學號字段插20140900001來記錄張三的成績不也是做到了表 的解耦了嗎?

這裏存在的問題是。在不設置外鍵的情況下。表2的學號字段和表1的學號字段是沒有關聯的。僅僅是你自己覺得他們有關係而已。數據庫並 不覺得它倆有關係。也就是說,你在表2的學號字段插了一個值(比方20140999999),可是這個值在表1中並沒有,這個時候,數據庫還是允 許你插入的,它並不會對插入的數據做關係檢查。然而在設置外鍵的情況下。你插入表2學號字段的值必需要求在表1的學號字段能找到。 同一時候。假設你要刪除表1的某個學號字段。必須保證表2中沒有引用該字段值的列,否則就沒法刪除。

這就是所謂的保持數據的一致性和完整性。你想。如 果表2還引用表1的某個學號,你卻把表1中的這個學號刪了,表2就不知道這個學號相應的學生是哪個學生。

數據的一致性還包含數據類型的一致性(這 個見以下就知道了)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章