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