溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何設計數(shù)據(jù)庫

發(fā)布時間:2021-11-30 09:50:59 來源:億速云 閱讀:134 作者:小新 欄目:云計算

這篇文章主要介紹了如何設計數(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):屬性不可拆分


如何設計數(shù)據(jù)庫

         圖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ù))

         (姓名,課程)>>(教材)

         由于“姓名”和“課程”這兩個字段能確定剩下的字段,我們就稱這樣的字段組合為“碼”,而碼中的每個字段我們稱之為“主屬性”。非碼的字段我們稱之為“次屬性”。

         我們注意到,在(姓名,課程)>>(教材)的這個關系中,存在(課程)>>(教材)。就是課程可以單獨確定教材,那么“老師”這個字段,對“姓名”和“課程”鍵的依賴就叫做部分依賴(因為它部分依賴與組合鍵中的“課程”字段)。而“教室”、“時間”則完全依賴于“姓名”和“課程”的組合鍵。

通過拆分表,我們消除“部分依賴”。


如何設計數(shù)據(jù)庫

上述三個問題是不是都解決了?在以后的學習中我們會學習到如何把兩個表關聯(lián)起來。

2.3第三范式(3NF):符合2NF,并且消除“傳遞依賴”


如何設計數(shù)據(jù)庫

         每學期學校都會購書,而每年的書的價格都不一樣,比如今年“數(shù)學書”漲價賣“11”塊,我們就要把所有的含有數(shù)學書的記錄的價格都更改一遍,還是存在異常?

         在這里,“課程”>>“教材”>>“價格”,那么“價格”對“課程”就是“傳遞依賴”。這個時候我們需要把“課程”表再次拆分,消除“傳遞依賴”。


如何設計數(shù)據(jù)庫

         最終我們得到了滿足三個范式的表格。即圖2.3.1(拆分1)、圖2.3.3(拆分3)、圖2.3.4(拆分4)所組成的表格。


如何設計數(shù)據(jù)庫

         對比一下我們最初的表,是否很整潔呢?

如何設計數(shù)據(jù)庫


感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何設計數(shù)據(jù)庫”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI