-
多表之間的關系
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) 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) );- 資料庫設計的范式
-
概念:設計資料庫時,需要遵循的一些規范,要遵循后邊的范式要求,必須先遵循前邊的所有范式要求
設計關系資料庫時,遵從不同的規范要求,設計出合理的關系型資料庫,這些不同的規范要求被稱為不同的范式,各種范式呈遞次規范,越高的范式資料庫冗余越小,
目前關系資料庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式), -
分類:
-
第一范式(1NF):每一列都是不可分割的原子資料項
-
第二范式(2NF):在1NF的基礎上,非碼屬性必須完全依賴于碼(在1NF基礎上消除非主屬性對主碼的部分函式依賴)
- 幾個概念:
- 函式依賴:A-->B,如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值,則稱B依賴于A
例如:學號-->姓名, (學號,課程名稱) --> 分數 - 完全函式依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定需要依賴于A屬性組中所有的屬性值,
例如:(學號,課程名稱) --> 分數 - 部分函式依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定只需要依賴于A屬性組中某一些值即可,
例如:(學號,課程名稱) -- > 姓名 - 傳遞函式依賴:A-->B, B -- >C . 如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值,在通過B屬性(屬性組)的值可以確定唯一C屬性的值,則稱 C 傳遞函式依賴于A
例如:學號-->系名,系名-->系主任 - 碼:如果在一張表中,一個屬性或屬性組,被其他所有屬性所完全依賴,則稱這個屬性(屬性組)為該表的碼
例如:該表中碼為:(學號,課程名稱)- 主屬性:碼屬性組中的所有屬性
- 非主屬性:除過碼屬性組的屬性
- 函式依賴:A-->B,如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值,則稱B依賴于A
- 幾個概念:
-
第三范式(3NF):在2NF基礎上,任何非主屬性不依賴于其它非主屬性(在2NF基礎上消除傳遞依賴)
-
-
- 資料庫設計的范式
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/4577.html
標籤:MySQL
上一篇:MySql的回顧三:流程控制函式/統計函式/分組查詢
下一篇:MySQL資料庫
