mysql表设计讲解_MySQL中数据库的设计归纳讲解
談到MySQL中數據庫的設計,相信大家都知道這是實現實際業務的重要一步,因此對于Java學習者來說,深入了解和學習數據庫的設計是十分有必要的。本文為大家準備了一份MySQL中數據庫的設計歸納講解,內容包括了多表之間的關系,像是分類、實現以及案例分析,還有數據庫設計的范式概念和分類等等。有學習興趣的朋友現在趕緊接著看下去吧!
一、多表之間的關系
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)
);
二、數據庫設計的范式
1、概念:設計數據庫時,需要遵循的一些規范。要遵循后邊的范式要求,必須先遵循前邊的所有范式要求。設計關系數據庫時,遵從不同的規范要求,設計出合理的關系型數據庫,這些不同的規范要求被稱為不同的范式,各種范式呈遞次規范,越高的范式數據庫冗余越小。目前關系數據庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。
2、分類:
(1)第一范式(1NF):每一列都是不可分割的原子數據項
(2)第二范式(2NF):在1NF的基礎上,非碼屬性必須完全依賴于碼(在1NF基礎上消除非主屬性對主碼的部分函數依賴)
(3)第三范式(3NF):在2NF基礎上,任何非主屬性不依賴于其它非主屬性(在2NF基礎上消除傳遞依賴)
3、幾個概念:
(1)函數依賴:A-->B,如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值。則稱B依賴于A。例如:學號-->姓名。(學號,課程名稱)-->分數
(2)完全函數依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定需要依賴于A屬性組中所有的屬性值。例如:(學號,課程名稱)-->分數
(3)部分函數依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定只需要依賴于A屬性組中某一些值即可。例如:(學號,課程名稱)-- >姓名
(4)傳遞函數依賴:A-->B, B -- >C .如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值,在通過B屬性(屬性組)的值可以確定唯一C屬性的值,則稱C傳遞函數依賴于A。例如:學號-->系名,系名-->系主任
(5)碼:如果在一張表中,一個屬性或屬性組,被其他所有屬性所完全依賴,則稱這個屬性(屬性組)為該表的碼。例如:該表中碼為:(學號,課程名稱)*主屬性:碼屬性組中的所有屬性;*非主屬性:除過碼屬性組的屬性。
以上就是MySQL中數據庫的設計歸納講解的全部內容了,大家都能理解嗎?如果對任何地方有疑問,可以上博學谷官網學習相關配套課程,上面有更加詳細的學習資源,還有在線老師為學員進行耐心的講解。
總結
以上是生活随笔為你收集整理的mysql表设计讲解_MySQL中数据库的设计归纳讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果手机返厂维修对手机有影响吗(苹果官网
- 下一篇: Canalys:预计 2023 年中国云