天天看點

教務系統--資料庫設計

做完教務系統的需求分析,接下來就是對資料庫的設計.資料庫設計是web開發中特别重要的一個環節,好的資料庫設計不僅能讓我們實作軟體時得心應手.對後期的維護,更新也是至關重要的.

記得牛腩在新聞釋出系統中這樣說過,資料庫設計完成了,那麼這個軟體也就完成了70%的工作.可見其重要性.

對資料庫的設計,主要是依賴界面設計來做的.界面反映了使用者的直接需求.把這些需求轉換成資料庫中的表.再為這些表添加主鍵,外鍵等限制.以確定資料關系的合理性.然後再根據業務的流程去梳理資料庫資料的流向是否得當.

在這裡我解釋一下自己做資料庫設計的一些思路和體會.

對資料庫字段的确定,主要是依賴界面中需要添加那些資訊,需要處理那些資訊,将對應資訊分類到相應的表中.這裡不說如何确定和提取字段了,因為自己感覺也說不清楚,當你見得資料庫多了,你就會自然而然的把他們分出來.

這裡主要說一下對資料庫三範式的了解和應用.

第一範式:資料庫表中的字段都是單一屬性的,不可再分

對于第一範式,還是比較好了解的,說白了就是說一個列不能有多個值,每一個字段都是不可拆分的.比如資料庫有這樣一個字段:父母.顯然這是不行的.因為父母屬于兩個獨立的個體,完全可以拆分.如果把他們設定為一個字段.結果就是對于這個字段來說,我們是不友善應用的.因為父母可能有原因隻有一個或者其他情況,這樣對于資料庫來說,一個字段就是不完整的.對于資料的查詢,顯示都是有問題.

第一範式比較容易了解,一般人不會犯這樣的錯誤.

第二範式:

資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的情況),也即所有非關鍵字段都完全依賴于任意一組候選關鍵字。

首先對關鍵字是做一些說明:

超關鍵字 :

二維表中,能夠惟一确定記錄的一個字段或幾個字段的組合被稱為“超關鍵字”。“超關鍵字”雖然能唯一确定記錄,但是它所包含的字段可能是有多餘的。

候選關鍵字:

如果一個超關鍵字去掉其中任何一個字段後不再能唯一地确定記錄,則稱它為“候選關鍵字”(Candidate Key)。候選關鍵字既能唯一地确定記錄,它包含的字段有是最精煉的。也就是說候選關鍵字是最簡單的超關鍵字。

比如:在一個學生選課表中

學号 姓名 性别 課程名稱 成績 學分

這裡的關鍵字為組合關鍵字,(學号 課程名稱)

出現的問題就是有:

1:姓名 性别 依賴于學号這個候選關鍵字

2:學分 依賴于課程名稱這個候選關鍵字

顯然是不符合第二範式的.

那麼不符合第二範式會産生什麼結果呢? 一般說來,不符合資料庫三範式會引起插入異常,更新異常,删除異常.

1:插入異常:比如要新開一門課程,如果沒有人選的話,這麼課程就插入不到資料庫,因為它沒有學号,姓名,性别這些資訊.

2:更新異常:如果要修改一門課程的學分,那麼所有的學分字段都要修改,否則出現同一課程不同學分的情況

3:删除異常:如果某門課程取消了,要删除課程的時候,這個學生的資訊也會被删除.

當然,不合理的資料庫設計會造成大量的資料允餘:

比如某個學生選擇了n門課程,學生的姓名 性别就會重複n次.

如果把這個表拆分成三個:

學号 姓名 性别

課程 學分

學号 課程 成績

這樣就不違反第二範式,也就是說,也肯定不會違反第二範式,因為他們沒有組合關鍵字,可以看出,有組合關鍵字的可能違反第二範式.

第二範式也可以了解為:主鍵确定一條唯一記錄,也就是說關鍵字在資料庫表中唯一出現一次.

第三範式:在第二範式的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴則符合第三範式。所謂傳遞函數依賴,指的是如果存在"A → B → C"的決定關系.

比如:

學号 姓名 所在學院 學院名稱

這裡的學院名稱完全依賴于學院,和關鍵字學号沒有關系.這樣就是傳遞依賴

違反第三範式也會産生資料庫異常和允餘.這裡就不再分析.

在基礎資訊的資料庫設計中,第一次設計很多違反了第三範式,這些主要是對界面的過分依賴造成的.也就是說,你看到的界面資訊,很可能是來自不同的資料庫,如果你把他們放到一個資料庫,就會違反資料庫三範式.

資料庫設計是非常重要的.也是對自己的數學邏輯了解的考驗.關系型資料庫的設計,最後就是一個對數學函數的模拟.