數據庫(六):多表關系


進擊のpython

*****

數據庫——多表關系


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

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

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

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

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


多對一

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

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

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

盤腿坐下思考兩個問題:

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

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

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

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

再來個例子:出版社 書

盤腿坐下思考兩個問題:

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

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

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

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

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


多對多

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

我們繼續盤腿思考:

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

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

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

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

而前面學習到的是有外鍵要先建被關聯的表,A的外鍵是B,B的外鍵是A,好家伙~死循環了

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

這么僵持指定是沒有解決辦法,於是想到,我們可以把這種外鍵的關聯信息,存到另一個表里

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

author:

id author
1 tom
2 alex
3 jerry
4 john
5 boss
6 alise

book:

id book
1 Red_Ball
2 Sun_raise
3 Green_tree

author2book:

author_id book_id
1 1
2 3
3 2
4 1
5 3
6 1
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!

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

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


*****
*****


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM