共計 1912 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要介紹了如何設計數據庫,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
1. 相關概念
(1)實體(entity):我們用數據庫要描述的對象,可以是具體的,也可以是抽象的。比如“一個學生”、“一本書”、“一門課”等等;當然也可以是“學生與老師的關系”。
(2)字段(fields):就是我們看到的列(column),代表了我們要描述實體的屬性。
(3)記錄(record):就是我們平常所說的行(row),代表了我們要描述不同的具體實體。
(4)碼(key):表中可以唯一確定一個元組的某個屬性(或者屬性組),我們在數據表中叫做鍵。
(5)主鍵(primary key):用于唯一標識一個表中的一條記錄的鍵。
(6)外鍵(foreign keys):對連接父表和子表的相關記錄的主鍵字段的復制。
(7)完全函數依賴(full functional dependency):次屬性完全依賴一個主屬性,或者一個主屬性組
(8)部分函數依賴(partial functional dependency):次屬性依賴于主屬性組中的某一個屬性
(9)依賴表(dependent table):也稱為弱實體(weak entity)是需要用父表標識的子表。
(10)關聯表(associative table):是多對多關系中兩個父表的子表。
2. 數據設計參考范式
2.1 第一范式(1NF):屬性不可拆分
圖 2.1.1“郵箱”屬性的值被分為兩列,不符合第一范式。而圖 2.2.2“郵箱”的屬性被分割,也不符合第一范式。更改后的圖 2.1.3 則符合了第一范式,屬性不可拆分。
2.2 第二范式(2NF):去除部分依賴,保留完全依賴
姓名
課程
分數
教材
價格
小王
英語
91
英語書
10
小魏
數學
85
數學書
9
小王
數學
96
數學書
9
小魏
語文
100
語文書
8
圖 2.2.1:符合第一范式,但不符合第二范式
現在我們有一張符合第一范式的表,但他仍然會給我們帶來很多麻煩。
如果想要增加一門課程,如何操作?
姓名
課程
分數
教材
價格
小王
英語
91
英語書
10
小魏
數學
85
數學書
9
小王
數學
96
數學書
9
小魏
語文
100
語文書
8
物理
物理書
物理
物理書
物理
物理書
圖 2.2.2:插入異常
每次插入“物理”都要插入一次“物理書”。而且,主要的“姓名”字段為空,這個叫插入異常。
姓名
課程
分數
教材
價格
小王
英語
91
英語書
10
小魏
數學
85
數學書
9
小王
數學
96
數學書
9
圖 2.2.3:刪除異常
由于高年級不再需要“語文課”,那么我們先把含有“語文”的記錄都刪除掉,這個時候我們同樣把“課程”和“教材”關系也刪除了,我們就不知道“語文”這門課要用什么“教材”了。這個叫刪除異常。
姓名
課程
分數
教材
價格
小王
英語
91
英語書
10
小魏
數學
85
數學書
9
小王
數學
96
數學書
9
小魏
語文
100
語文書
8
圖 2.2.4:更改異常
我們要把“數學書”這個教材換成“高級數學書”,那么所有的先關記錄都要更改一遍,是不是很麻煩?這個叫更改異常。
為了解決上述三個問題,我們就引入了第二范式(2NF)
(姓名,課程)(分數)
(姓名,課程)(教材)
由于“姓名”和“課程”這兩個字段能確定剩下的字段,我們就稱這樣的字段組合為“碼”,而碼中的每個字段我們稱之為“主屬性”。非碼的字段我們稱之為“次屬性”。
我們注意到,在(姓名,課程)(教材)的這個關系中,存在(課程)(教材)。就是課程可以單獨確定教材,那么“老師”這個字段,對“姓名”和“課程”鍵的依賴就叫做部分依賴(因為它部分依賴與組合鍵中的“課程”字段)。而“教室”、“時間”則完全依賴于“姓名”和“課程”的組合鍵。
通過拆分表,我們消除“部分依賴”。
上述三個問題是不是都解決了?在以后的學習中我們會學習到如何把兩個表關聯起來。
2.3 第三范式(3NF):符合 2NF,并且消除“傳遞依賴”
每學期學校都會購書,而每年的書的價格都不一樣,比如今年“數學書”漲價賣“11”塊,我們就要把所有的含有數學書的記錄的價格都更改一遍,還是存在異常?
在這里,“課程”“教材”“價格”,那么“價格”對“課程”就是“傳遞依賴”。這個時候我們需要把“課程”表再次拆分,消除“傳遞依賴”。
最終我們得到了滿足三個范式的表格。即圖 2.3.1(拆分 1)、圖 2.3.3(拆分 3)、圖 2.3.4(拆分 4)所組成的表格。
對比一下我們最初的表,是否很整潔呢?
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“如何設計數據庫”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!