SQL--數據庫的設計(多表之間的關系)
博客說明
文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗匯總,如有什么地方侵權,請聯系本人刪除,謝謝!
分類
-
一對一(了解)
- 如:人和身份證
- 分析:一個人只有一個身份證,一個身份證只能對應一個人
-
一對多(多對一)
- 如:部門和員工
- 分析:一個部門有多個員工,一個員工只能對應一個部門
-
多對多:
- 如:學生和課程
- 分析:一個學生可以選擇很多門課程,一個課程也可以被很多學生選擇
實現關系
- 一對多(多對一):
- 如:部門和員工
- 實現方式:在多的一方建立外鍵,指向一的一方的主鍵。
- 多對多:
- 如:學生和課程
- 實現方式:多對多關系實現需要借助第三張中間表。中間表至少包含兩個字段,這兩個字段作為第三張表的外鍵,分別指向兩張表的主鍵
- 一對一(了解):
- 如:人和身份證
- 實現方式:一對一關系實現,可以在任意一方添加唯一外鍵指向另一方的主鍵。
案例
-- 創建旅游線路分類表 tab_category
-- cid 旅游線路分類主鍵,自動增長
-- cname 旅游線路分類名稱非空,唯一,字符串 100
CREATE TABLE tab_category (
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(100) NOT NULL UNIQUE
);
-- 創建旅游線路表 tab_route
/*
rid 旅游線路主鍵,自動增長
rname 旅游線路名稱非空,唯一,字符串 100
price 價格
rdate 上架時間,日期類型
cid 外鍵,所屬分類
*/
CREATE TABLE tab_route(
rid INT PRIMARY KEY AUTO_INCREMENT,
rname VARCHAR(100) NOT NULL UNIQUE,
price DOUBLE,
rdate DATE,
cid INT,
FOREIGN KEY (cid) REFERENCES tab_category(cid)
);
/*創建用戶表 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, -- 線路id
DATE DATETIME,
uid INT, -- 用戶id
-- 創建復合主鍵
PRIMARY KEY(rid,uid), -- 聯合主鍵
FOREIGN KEY (rid) REFERENCES tab_route(rid),
FOREIGN KEY(uid) REFERENCES tab_user(uid)
);
感謝
黑馬程序員
以及勤勞的自己
關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計划