MySQL學習:多表關係(帶實例)

1、數據庫設計,多表之間的關係
1、分類
1、一對一:
*如:人和身份證
*分析:一個人只有一個身份證,一個身份證只能對應一個人
2、一對多(多對一):
*如:部門和員工
*分析:一個部門有多個員工,一個員工只能對應一個部門
3、多對多:
*如:學生和課程
*分析:一個學生可以選擇很多們課程,一門課程可以被很多名學生選擇
2、實現關係:
1、一對多(多對一):
*如:部門和員工
*實現方式:在多的一方建立外鍵,指向另一方的主鍵
2、多對多:
*如:學生和課程
*實現方式:多對多關係實現需要藉助第三張中間表,中間表至少包含兩個字段,
這兩個字段作爲第三張表的外鍵,分別指向兩張表的主鍵
3、一對一(瞭解):
*如:人和身份證
*實現方式:一對一關係實現,可以在任意一方添加唯一外鍵指向另一方的主鍵
*一般情況下,直接合成一張表就好了。
3、案例:旅遊線路選擇
– 創建旅遊線路分類表 tab_category
– cid 旅遊線路分類主鍵,自動增長
– cname 旅遊線路分類名稱非空,唯一,字符串 100
CREATE TABLE tab_category(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(100)
);

– 創建旅遊線路表 tab_route
/*
rid 旅遊線路主鍵,自動增長
rname 旅遊線路名稱非空,唯一,字符串100
price 價格
rdate 上架時間,日期類型
cid 外鍵,所屬分類
*/
CREATE TABLE tab_route(
rid INT PRIMARY KEY AUTO_INCREMENT,
rname VARCHAR(100),
price DOUBLE,
rdate DATE,
cid INT,
FOREIGN KEY (cid) REFERENCES tab_category(cid)
– 簡略模式
– constraint
);

/*
創建用戶表 tab_user
uid 用戶主鍵,自增長
username 用戶名長度 100,唯一非空
password 密碼長度 30,非空
name 真實姓名長度 100
birthday 生日
sex 性別,定長字符串 1
telephone 手機號,字符串 11
email 郵箱,字符串長度100
*/
CREATE TABLE tab_user(
uid INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) UNIQUE NOT NULL,
PASSWORD VARCHAR(30) NOT NULL,
NAME VARCHAR(100),
birthday DATE,
sex CHAR(1) DEFAULT ‘男’,
telephone VARCHAR(11),
email VARCHAR(100)
);

/*
創建一張收藏表tab_favorite
rid 旅遊線路 id,外鍵
date 收藏時間
uid 用戶id 外鍵
rid 和 uid不能重複,設置複合主鍵,同一個用戶不能收藏同一個線路兩次
*/

CREATE TABLE tab_favorite(
rid INT,-- 線路
DATE DATETIME,
uid INT,-- 用戶id
– 創建複合主鍵
PRIMARY KEY(rid,uid),-- 聯合主鍵
FOREIGN KEY(rid) REFERENCES tab_route(rid),
FOREIGN KEY(uid) REFERENCES tab_user(uid)
);

創建四個表:
在這裏插入圖片描述
表之間的關係爲:
在這裏插入圖片描述
類別與線路爲一對多的關係
線路與用戶爲多對多的關係,在用戶表與線路表之間建立一箇中間表——收藏表。

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