Mysql外鍵和表關係

外鍵foreign key

什麼是外鍵?

外鍵就是用來鏈接別的庫,讓兩種表有代碼層面上正真的關聯mysql

外鍵的約束:

在建立表的時候必須先建立被關聯的表。git

插入數據的時候 也必須先插入被關聯表的數據github

 

  


  

關係

在數據庫中,將實體與實體的關係反應到表的設計上來,能夠細分爲 3 種,分別爲:一對一(1:1),一對多(1:N)(或多對一(N:1))和多對多(N:N)sql

在此,全部的關係都是指表與表之間的關係。數據庫

一對一

一對一,即一張表的一條記錄只能與另一張表的一條記錄相對應,反之亦然。spa

例如,我們設計一張「我的信息表」,其字段包含:姓名、性別、年齡、身高、體重、籍貫和居住地等。設計

0

如上表所示,基本知足我們的要求,其中姓名、性別和年齡屬於經常使用數據,可是身高、體重、籍貫和居住地爲不經常使用數據。若是每次查詢都要查詢全部數據的話,那麼不經常使用數據就會影響效率,並且又不經常使用。所以,我們能夠將經常使用的數據和不經常使用的數據分離存儲,即分爲兩張表,例如:code

表 1:經常使用數據blog

1

表 2:不經常使用數據get

2

如上面表1表2所示,經過字段ID表1中的一條記錄只能匹配表2中的一條記錄,反之亦然,這就是一對一的關係。

 

一對多

一對多,即一張表中的記錄能夠對應另一張表中的多條記錄,可是反過來,另一張表中的一條記錄只能對應第一張表中的一條記錄。

例如,我們設計「國家城市表」,其包含兩個實體,即國家和城市。

表 3:國家表

3

表 4:城市表

4

如上面表3表4所示,經過字段國家表3中的一條記錄能夠匹配表4中的多條記錄,但反過來,表4中的一條記錄只能匹配表3中的一條記錄,這就是典型的一對多的關係。

 

多對多

多對多,即一張表中的記錄能夠對應另一張表中的多條記錄,反過來,另一張表中的一條記錄也能夠對應第一張表中的多條記錄。

例如,我們設計「教師學生表」,其包含兩個實體,即教師和學生。

表 5:教師表

5

表 6:學生表

6

觀察上面的表5表6,我們會發現:表5表6的設計知足了實體的屬性,但沒有維護實體之間的關係,即一個老師教過多個學生,一個學生也被多個老師教過。可是不管我們在表5中仍是在表6中增長字段,都會出現一個問題,那就是:該字段要保存多個數據,而且仍是與其餘表有關係的字段,不符合設計規範。所以,我們能夠再設計一張「中間表」,專門用來維護表5表6的關係。

表 7:中間表

7

觀察上面的表5表6表7,我們會發現增長表7以後,我們維護表5表6的關係更加方便了!不管是想從表5經過表7查到表6,仍是想從表6經過表7查到表5,都很是容易啦!這就是典型的多對多的關係。

相關文章
相關標籤/搜索