阿毛 撰寫於文章 <77n7vr$ggr@netnews.hinet.net>...
>在撰寫資料庫的程式時欄位的值該如何取捨??
>指在Microsoft Access中欄位定義時
>允許Null值、必須有值等設定該如何取捨??
Null 值之所以必須避開,是因為它會造成運算失效,也就是任何型態的欄位和變數與
Null 做運算,結果都會是 Null,也因此跟著它出來的 Query 和 Recordset 該欄位都
會是 Null。如果你只是單純的顯示它,那結果是一個空白,當然沒關係,但如果你做
一些欄位結合運算,那含 Null 值計算結果會完全不同於不含 Null 值的計算結果。如
果你容許一個欄位有 Null 值,那最後結果將是非你所預期的。所以在我們剛學習
Access 時,或許大家都不在乎欄位有 Null 值,但隨著資料表增多,彼此關係日益複
雜,欄位綜合運算愈來愈多,一個允許 Null 值的欄位設定,將成為一顆埋藏的地雷,
它會讓你程式充滿不確定性而無絲毫警告,甚至最後必須該資料表及所有相關的
Query、Form、Report 都要重做,這也就是 Access 這麼雞婆,在你欄位為 Null 值
時要一再提醒你的原因。
>
>再者,在撰寫資料庫程式時,使用者所輸入的資料
>存到資料庫中後,發現必須有值的欄位;使用者未輸入
>任何值,此時Access會發生錯誤,對於這樣的一個問題
>不知道是該在程式中加入檢查必須有值的欄位是否已輸入的
>判斷?還是單靠以資料庫發生錯誤後再去做捕捉資料庫的錯誤
>的訊息之後再反應給使用者??
你不應該把這訊息告知使用者,因為他沒法理解(也沒責任理解) Null 值對資料庫穩定
運作的傷害,他只是想『我先集中輸入此資料庫的這部份欄位,待會我再輸入那一部份
欄位。』當你限制他這項自由時,你認為他會怎樣評價你設計的程式?至於事先在程式
中加入檢查,好一點,但還不是很好,因為你還是限制了他的使用自由。所以我認為最
好的方式是利用 Field.DefauldValue 的設定,或是在 Append 動作時,如果使用者未
輸入則放些初始值進入必須有值的欄位裏,讓使用者享有雖然缺了些欄位資料,但仍可
有新增記錄的權利,至於 DefaultVale 是要幾個空白字元或其他值,就看你日後打算
怎麼再利用這些欄位了。
其實最後這個問題會回到程式設計師良心這麼個基本的人性問題上,的確,何必把欄位
設成必須有值這麼辛苦?乾脆通通允許 Null 值,你設計的輕鬆,使用者用的自由,反
正只要我提供的功能沒問題,誰又管得了以後這些資料再利用性如何,甚至將來再利用
搞得焦頭爛額,那也是下個接案的倒霉鬼的事,大家甚至還會懷念你,說你設計時都沒
問題,換個人就問題一堆。但如果你還有一些專業的不安與不忍,那你免不了要為了將
來的發展而限制現在使用者的自由,又要為怎樣減少這些限制帶來的不便而挖空心思,
多寫一堆程式碼。縱使你如此苦心竭慮,卻未必能得老版或業主的認同,因為你開發的
時間比人長,你寫的程式比人家囉嗦。所以,看你自己吧,老怪看的懂程式,卻未必看
懂人生,該做個怎樣的程式設計師,只有你自己能決定了。