在討論如何設計一個好的關系模式之前,我們先來了解一下設計不好的關系模式會出現什么問題。
假定有如下關系SCD:
SCD(Sno,Sname,Ssex,Sdept,Sdean,Cno,Cname,Grade)
其中,SCD表示學生關系,對應的各屬性依次為學號、姓名、性別、院系、系主任、課程號、課程名稱和成績。關系的主碼為(Sno,Cno)。
這個關系模式存在如下問題。
1.數據冗余
當一個學生選修多門課程就會出現數據冗余。假如某個學生(“2010050101”,“丁天波”,“男”,“管理學院”,“張勝”)共選了20門課程,則該學生的學號、姓名、性別、院系、系主任信息要重復存儲20次,如果全校有一萬名學生都要選修多門課程,則這樣的冗余就會造成大量的空間上的浪費。同時,同一門課程如果有多名學生選修,課程名稱要重復存儲多次,這樣進一步增加了存儲空間的開銷。
2.更新異常
由于存在大量的數據冗余,當更新數據庫中的數據時,系統要付出很大的代價來維護數據庫的完整性。否則會面臨數據不一致性的危險。例如,某院系要換系主任,或某門課程要修改名字,必須要修改每一個相關的元組,如果一部分修改了,而另外一部分未修改,則造成了數據的不一致性。
3.插入異常
如果剛開出一門課程,但是這樣的課程還沒有學生選修,則無法把課程信息插入到該數據庫中;如果一個學生剛剛入學,還沒有選修任何課程,則這樣的學生無法插入到該數據庫中;如果一個院系剛剛成立,還沒有招收任何學生,則這個院系信息也無法添加到數據庫中。
4.刪除異常
如果選修某門課程的學生都畢業了,在刪除學生信息時,則相關的課程信息業會跟著被刪除。
鑒于以上種種問題,可以得出結論:設計的該關系模式SCD并不是一個好的關系模式。一個好的關系模式應該不會發生插入異常、刪除異常和更新異常,數據冗余也會降到最小。
一個關系模式之所以會產生上述問題,是由于關系模式中存在著不良的依賴關系引起的。
新聞熱點
疑難解答