外鍵foreign key
什麼是外鍵?
外鍵就是用來鏈接別的庫,讓兩種表有代碼層面上正真的關聯mysql
外鍵的約束:
在建立表的時候必須先建立被關聯的表。git
插入數據的時候 也必須先插入被關聯表的數據github
關係
在數據庫中,將實體與實體的關係反應到表的設計上來,能夠細分爲 3 種,分別爲:一對一(1:1)
,一對多(1:N)
(或多對一(N:1)
)和多對多(N:N)
。sql
在此,全部的關係都是指表與表之間的關係。數據庫
一對一
一對一,即一張表的一條記錄只能與另一張表的一條記錄相對應,反之亦然。spa
例如,我們設計一張「我的信息表」,其字段包含:姓名、性別、年齡、身高、體重、籍貫和居住地等。設計
如上表所示,基本知足我們的要求,其中姓名、性別和年齡屬於經常使用數據,可是身高、體重、籍貫和居住地爲不經常使用數據。若是每次查詢都要查詢全部數據的話,那麼不經常使用數據就會影響效率,並且又不經常使用。所以,我們能夠將經常使用的數據和不經常使用的數據分離存儲,即分爲兩張表,例如:code
表 1:經常使用數據blog
表 2:不經常使用數據get
如上面表1
和表2
所示,經過字段ID
,表1
中的一條記錄只能匹配表2
中的一條記錄,反之亦然,這就是一對一
的關係。
一對多
一對多,即一張表中的記錄能夠對應另一張表中的多條記錄,可是反過來,另一張表中的一條記錄只能對應第一張表中的一條記錄。
例如,我們設計「國家城市表」,其包含兩個實體,即國家和城市。
表 3:國家表
表 4:城市表
如上面表3
和表4
所示,經過字段國家
,表3
中的一條記錄能夠匹配表4
中的多條記錄,但反過來,表4
中的一條記錄只能匹配表3
中的一條記錄,這就是典型的一對多
的關係。
多對多
多對多,即一張表中的記錄能夠對應另一張表中的多條記錄,反過來,另一張表中的一條記錄也能夠對應第一張表中的多條記錄。
例如,我們設計「教師學生表」,其包含兩個實體,即教師和學生。
表 5:教師表
表 6:學生表
觀察上面的表5
和表6
,我們會發現:表5
和表6
的設計知足了實體的屬性,但沒有維護實體之間的關係,即一個老師教過多個學生,一個學生也被多個老師教過。可是不管我們在表5
中仍是在表6
中增長字段,都會出現一個問題,那就是:該字段要保存多個數據,而且仍是與其餘表有關係的字段,不符合設計規範。所以,我們能夠再設計一張「中間表」,專門用來維護表5
和表6
的關係。
表 7:中間表
觀察上面的表5
、表6
和表7
,我們會發現增長表7
以後,我們維護表5
和表6
的關係更加方便了!不管是想從表5
經過表7
查到表6
,仍是想從表6
經過表7
查到表5
,都很是容易啦!這就是典型的多對多
的關係。