冗餘的必要性 給初學者

2021-05-18 02:11:45 字數 1886 閱讀 8178

冗餘有時候顯得非常有必要,而且是不得不。2010-01-06

關於資料庫的第三正規化的定義這裡就不進行描述了。總之這些基礎概念大家還是要有大概的理解的,至少要記得住這個概念的名字。實在話,一切源自實踐,親身體會出真知。但作為知識的使用者——實踐參考理論。

恩師曾經囑咐我們,資料庫設計至少要遵循第三正規化。當時把老師的話奉若神明,在一些課程設計中用著還挺合適。豈不知外面是乙個豐富多彩的世界,在這個豐富多彩的世界中充斥著變幻莫測的資料。按照第三正規化能完成任務嗎?能完成「上帝」給我們的要求嗎?

當然是不能的……

通過手頭上一丁點的專案經驗,我總結出來如下的資料形式的存在。

1.現實世界中發生的資料必須一直保持著原來持有的資料意義,它發生後就和整個世界隔離了,它只屬於那一刻。

2.現實世界中發生的資料必須受著外界的影響,它溶於世界。(這個很好處理,遵守第三正規化的資料庫設計即等於實現)

說明上面兩種資料形式的存在和處理方法,下面舉例說明(舉例子,我都舉大家都比較熟悉的業務示例,大家都從學校裡面走出來的)

學生成績管理系統:

年級表gid

gradename

1一年級

2二年級

3三年級

班級表

cidgid

classname11

一班21二班

32一班4

2二班學生表

cidstuid

stuname11

李一12李二

32張大2

5張小14

錢偲22爾耳

23錢五

下面來設計成績表吧:

如何設計呢,按照第三正規化,我們應該這樣設計。分別有stuid做外來鍵關聯學生,courseid做外來鍵關聯具體的課程,exam對應某次具體的考試。

其中文表述方就是:某個學生某次考試某門課程的成績

學生成績表(設計一)

stuid

courseid

score

exam

看上去合情合理,像那麼回事,也深得第三正規化的認可。但是在實際應用中並非如此,可以這樣說這樣設計的資料庫表只能在系統的某個階段適用,過了這個階段隨著大環境的改變,這張表將存在嚴重的問題,其後果是統計結果錯誤。

假想,乙個學年過去了,該公升級的公升級,該留級的留級,該換班的換班。去年一年級一班的李一進了二年級一班了,教務處也將學生資訊調整好了,即將李一的cid改為3,其他學生同理(不管是系統自動改,還是手工改,反正總之有這麼乙個步驟)。

有這麼乙個閒的無聊的老師,想把原來一年級一班的學生成績列印出來看看。還打的出來嗎????打不出來了,麻煩了,因為以前的學生成績跟著學生來到了二年級了!糟糕啊!還沒考試就有成績了!也怪這個老師無聊,把這個bug發現了。呵呵,玩笑話,該來的總是要來,這個時候只能坦然面對。

分析下,原來這個學生成績表中的資料就屬於以第一種形式存在的資料——

1.現實世界中發生的資料必須一直保持著原來持有的資料意義,它發生後就和整個世界隔離了,它只屬於那一刻,即保證成績表能記錄下成績資料發生時它是某個年級某個班級某個學生某次考試某門課程的成績,說白了這個資料要記錄下它發生時的整個世界的狀態(理論上是這樣,但是沒必要),它擁有回顧歷史,具有文物般的價值 ,那麼這麼設計吧(至少在一般的系統的能適用)

學生成績表

gidcid

stuid

courseid

score

exam

如果實際當中這樣設計還不能回到過去(例如:班級名和年級名都有可能會改變,這樣的設計還是不行,那你就得把班級名和年級名記錄下來 ),那就得慢慢考究了,呵呵~!

2010-01-06 22:22:16

給 XML 初學者

簡 介 差不多每天都有人問 什麼是 xml xml 能做什麼 xml 能不能替我做這個 xml 會取代什麼 等等諸如此類的問題。由於最近一段時間稍微對 xml 使用了一下,我來談談自己的感覺。這些經驗都很淺顯,任何乙個用過 xml 的人都有,並且見仁見智,只不過我算剛剛走過這段路,對自己一開始的困惑...

給初學者的建議

一名初學者,首先要找一本好的入門書籍 平台裡有推薦 把程式結構 資料型別,陣列 函式和結構體 這幾個部分了解 了之後,就可以 寫 程式了。千萬不要把書看的太細緻,那樣的話會覺得程式設計太繁瑣,不要背參考書式的學習。就像乙個小孩要學說話,他需要模仿和試錯,不斷的矯正,最終會很好的表達,如果一開始讓他把...

給初學者的建議

在網上看到一篇很好的文章。對於一些初學者,我覺得它很有幫助。現在把它 過來。希望大家都能從中體會到什麼。如果作者看到,原諒我把它 過來,因為它很經典。2.初學者請不要看太多太多的書那會誤人子弟的,先找本系統的學,很多人用了很久都是只對部分功能熟悉而已,不系統還是不夠的。3.看幫助,不要因為很難而自己...