資料庫(六) 多表關係

2022-05-17 02:18:42 字數 3074 閱讀 8306

*****

多表問題其實可以把它變成兩個表之間的關係

就像上一節我們提到的外來鍵,就是兩個表之間的關係

所以對於多表之間的關係,我們可以化繁為簡討論兩個表之間的關係

表與表之間的關係就好像數學函式的y和x的關係,也分為三種:

一對一,多對一,多對多~

怎麼說呢?其實上一節我們做的那個外來鍵表就是乙個多對一模式

怎麼叫做多對一呢?有個十分簡單的的方法來解決這個問題

還是拿上乙個舉例子~ staff員工表和department職位表

盤腿坐下思考兩個問題:

小張能不能既屬於技術部,又屬於財務部?不能!

技術部可不可以有小劉和小李兩個人?能!

這樣一面行,另一面不行,就是多對一

能的 就是被關聯的表,所以 部門就是被關聯的!

再來個例子:出版社 書

盤腿坐下思考兩個問題:

書能不能被多個出版社出版?不能!

出版社能不能有多本書?能!

那知道了吧,這就是多對一

所以 書 就應該用 forgen... ...,出版社就是被關聯的表~

(自己試著把這個敲一遍)

多對多就更好玩了,書 作者

我們繼續盤腿思考:

書能不能有多個作者?能!

乙個作者能不能寫多本書?能!

這就相當於什麼?兩邊都是多對一,雙向的多對一,所以就是多對多

但是怎麼建呢???按照這個邏輯,這兩個表彼此應該都有外來鍵

而前面學習到的是有外來鍵要先建被關聯的表,a的外來鍵是b,b的外來鍵是a,好傢伙~死迴圈了

那針對這個問題聰明的人想出了一種解決辦法:

這麼僵持指定是沒有解決辦法,於是想到,我們可以把這種外來鍵的關聯資訊,存到另乙個表裡

這樣,這兩個表在建立的時候,就不會因為沒有外來鍵而建不出來了

author:

idauthor

1tom

2alex

3jerry

4john

5boss

6alise

book:

idbook

1red_ball

2sun_raise

3green_tree

author2book:

author_id

book_id11

2332

4153

61

mysql> select * from book;

+----+------------+

| id | name |

+----+------------+

| 1 | red_ball |

| 2 | sun_raise |

| 3 | green_tree |

+----+------------+

3 rows in set (0.00 sec)

mysql> select * from author;

+----+-------+

| id | name |

+----+-------+

| 1 | tom |

| 2 | alex |

| 3 | jerry |

| 4 | john |

| 5 | boss |

| 6 | alise |

+----+-------+

6 rows in set (0.00 sec)

然後就開始建第三個表:

mysql> create table author2book(

->

-> id int not null unique auto_increment,

-> author_id int not null,

-> book_id int not null,

->

-> foreign key(author_id) references author(id)

-> on delete cascade

-> on update cascade,

->

-> foreign key(book_id) references book(id)

-> on delete cascade

-> on update cascade,

->

-> primary key(author_id,book_id)

-> );

query ok, 0 rows affected (1.64 sec)

mysql> select * from author2book;

+----+-----------+---------+

| id | author_id | book_id |

+----+-----------+---------+

| 1 | 1 | 1 |

| 2 | 2 | 3 |

| 3 | 3 | 2 |

| 4 | 4 | 1 |

| 5 | 5 | 3 |

| 6 | 6 | 1 |

+----+-----------+---------+

6 rows in set (0.00 sec)

這就算是建好了聯絡

男女之間總是要結婚的,那此時就會出現一對一的情況

乙個名單是男,乙個名單是女,那這兩個一定是一一對應的才是合理的,那這就是,一對一的情況

外來鍵通過前面的你也發現了,forgen這個創造外來鍵的方式創造的是多對一的方式

那如何才能讓他一對一呢?其實問題就在於,新增的鍵有重複才會讓其變成多對一的情況

那變成一對一就是讓資料部從夫,資料不重複用的是什麼約束?unique!

我們只需要在建立外來鍵的時候,將外來鍵的屬性約束成唯一就行了

(這個一對一,建議你自己操作,師傅領進門,修行在個人!)

*****

*****

資料庫多表關係

在生活中,物體有多種多樣的關聯關係,這也體現在資料表中。在資料表的設計中,不同表代表的實體和其他表都有以下三種關係 一對一 一對多 多對一 多對多。表與表的關係的合理程度,直接影響了專案的完成度和執行效能。1 一對一關係 例如 乙個人只有一張身份證 一張身份證只能對應乙個人。2 一對多 多對一關係 ...

MySQL資料庫 多表關係

多個表之間是有關係的,那麼關係靠誰來維護?1.1 一對多關係 乙個表中的一天資料對應另乙個表中的多條資料,比如 客戶和訂單 乙個客戶可以有多張訂單 分類和商品 乙個種類對應多種商品 部門和員工 乙個部門裡有多名員工 建表原則 在 多 的一方 客戶 商品 員工 建立乙個字段,字段作為外來鍵指向 一 的...

mysql資料庫學習筆記(六) 多表查詢

建表 use dt4 create table dept id bigint 20 not null auto increment primary keycomment 部門編號 deptname varchar 20 comment 部門表 create table emp id bigint 2...