標題裡雖然是將Database Design的best practice, 但下面內容並不僅限於design階段的良好習慣。
1. Should binary files (such as word, pdf, image, video) be
stored in database?
(1) performance. 根據[2], blob
column並不是儲存在datarow中,datarow中只是包含了一個指向真正資料的指標,因此,效能並不會收到影響。
(2) full text search. 如果把word,
pdf等檔案存放在檔案系統中,有許多工具支援對這些文檔進行全文檢索搜尋,但是如果放在資料庫中,這種支援可能就沒這麼多了(利用PDF
IFilter可以對資料庫裡的pdf進行FTS)。
(3) 從原則上講,資料庫裡面存放的應該是“資料”。而word,pdf則混雜了資料和格式。
(4) 如果把binary files存放在檔案系統上,而在資料庫中維護這些檔案的路徑,那麼程式中就要維護資料庫中檔案路徑和檔案系統上檔案的一致性。
2. insert語句中應該要寫清楚要插入的column的名字,否則當這張表的column發生變化時,這個語句就會不成立。
3. 資料庫設計的目標
(1) 最少的資料冗餘。normalization這個過程就是用來實現這個目標的,但要注意過度normalization的問題(在這種情況下,有時候執行一個比較簡單的查詢就要join好幾張表,sql語句比較複雜,這樣就得不償失了)因此有時候為了使資料庫關係簡單,應該允許redundancy的存在。這裡必須達成一個compromise。
(2) 佔用較小的空間。
(3) 預防錯誤發生的措施(foreign key, unique key等)。
Reference
[1]Best Practices in Database Design
http://www.interaktonline.com/Support/Articles/Details/Design+Your+Database-Best+Practices+in+Database+Design.html?id_art=24&id_asc=220
[2] http://www.aspcode.net/blogs/archive/2006/09/04/2.aspx