所以,筆者的第三個戒條就是,不要利用商務規則在前臺實現數據的完整性。只要有可能,就要盡量在數據庫系統層面實現數據的完整性。在數據庫層面實現數據完整性的同時,需要注意用戶的友好性。
一是要把違反約束信息盡可能詳細的回饋給用戶。如銷售訂單號,在數據庫系統中設置了唯一性約束。則當用戶在建立銷售訂單的時候,銷售訂單號重復時,就需要把這個約束的詳細信息反饋給前臺用戶。若只顯示不能夠保存這個錯誤信息往往是不夠的。這會讓用戶摸不著頭腦。
二是在必要的時候,可以利用觸發器來實現數據的完整性。雖然在功能設計上,我們不建議在Oracle數據庫中采用觸發器來實現。如要把某個小寫金額轉換為大小金額。我們是建議通過前臺應用程序實現。因為應用程序的執行效率要比數據庫的觸發器高。但是,在數據庫數據完整性上,在必要的時候,若靠數據庫約束無法實現完整性,我們仍然建議采用觸發器,而不是前臺應用程序來實現。在任何情況下,不要依賴于應用程序來實現數據完整性。否則的話,很難保證數據庫約束與商務層約束的一致性。
四戒:在可能的情況下,不要讓前臺應用程序直接訪問數據表
其實,在數據庫基礎表與前臺應用程序之間,還有一個很好的“中間人”,那就是視圖。試圖是數據庫基礎表的一個抽象。他除了可以保障數據的質量外,還可以有效的訪問前臺應用程序對于數據的非法訪問。所以,一些安全性級別比較高的數據庫系統,在數據庫設計的焙潁嵩謔菘夂頹疤ㄓτ貿絳虼脛涮峁笆油肌閉飧鮒屑淙,葠炰作为基础表的“袛仛W⒀勻恕薄H绱,前台应淤Q絳蛟諉揮斜匾那榭魷攏梢圓恢苯臃夢適荼,而是通过视图来秵T硎迪旨浣擁姆夢省?/P>
如在進行數據導入程序設計的時候,通過視圖來實現則是一個很理想的方法。如用戶現在要導入產品信息,包括產品基本信息、供應商信息、價格信息等等。這些信息在數據庫中往往包含在三種表中,分別為產品基本信息表、供應商信息表、產品價格信息表。若前臺應用程序直接訪問基礎表的話,就需要分別訪問這三張基礎表。這不但效率比較低,而且也不容易實現數據的完整性。此時,我們就可以利用視圖,把一些必須要填入的字段組合在一張可更新視圖中。如此,前臺應用程序只需要訪問一個數據庫對象即可。
再者,在數據庫報表設計上,更是要通過視圖來實現。而不要通過傳遞一段SQL代碼來查詢基礎表。這對于數據的安全性會帶來比較大的威脅。
所以,第四個戒條就是,在可能的情況下,不要讓前臺應用程序直接訪問數據表。
五戒:不要一直讓用戶輸入數據
有些字段其實不一定要讓用戶輸入,只需要用戶選擇即可。如在人事管理系統中,企業員工所屬的民族、職位、省份等等就沒有必要讓用戶手工輸入。而可以通過列表的形式讓員工來進行選擇。這種手段,是提高數據完整性的最佳方式之一。若能夠給用戶提供一個詳細的列表供其選擇,這樣將減少鍵入代碼的錯誤,同時提高數據庫的一致性;也可以提高用戶界面的友好性。
所以,在數據庫設計的時候,盡量使用列表字段來供用戶選擇。若連省份等等字段都要用戶手工輸入的話,則我們在數據庫完整性所花費的時間,就要很多。如在數據保存的時候,都要去判斷用戶輸入的數據是否合乎完整性的規則。這顯然工作量要比設計一個列表字段多得多。
故數據庫設計的第五個戒條就是不要老是讓用戶手工輸入數據。提供列表讓用戶進行選擇,用戶不僅可以提高效率,我們也可以省事,同時,也能夠保障數據的準確率。
文章來源于領測軟件測試網 http://www.kjueaiud.com/