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