第一次做數據庫設計的開發人員,難免會碰到一些問題,根據自己的經驗簡單的總結一下這些問題在沒有更好的解決方法前的一種可能的備選方案。
Ø 從技術上對表進行分組
我們在做業務數據庫設計的時候,個人認為首先要從技術上對表進行分組,下面是個人的標準:
1) 流程和交易相關的表:它的特點是記錄數保持最小,以便快速響應交易需求,并且相關交易主題對象的生命周期比較短;比如納稅申報表。或者可以稱為操作數據庫。
2) 歸檔后的查詢表:它的特點就是記錄數很大,有足夠多的索引,關鍵保持查詢速度;它的特點就是查的多,改的少;比如車輛檔案表。或者可以稱為查詢數據庫。
3) 提供給分析使用的匯總表:它的特點就是表中存儲了很多計算后的數據并且是冗余數據。如果使用BI,這一部分就不用了;如果自己設計為了出報表方便還是需要的;比如納稅情況歸集表。或者可以稱為查詢分析表
4) 支持類的表:這一類是對業務的支持,包括代碼表、配置表、規則表等。
特別是1和2在設計時最好分別進行處理,不要將交易數據和查詢數據混在一塊;如果后續要分別部署交易服務器和查詢服務器就麻煩了。
Ø 主鍵策略
個人建議在客戶沒有要求的情況下全部使用替代健而不是自然鍵,自然鍵是指業務本身的唯一區別,比如員工工號等。而替代健建議使用GUID,這樣在有離線業務處理時也能應付。
Ø 替代健中的冗余問題
在使用替代健后,有一個問題就是需要頻繁的查找自然健,個人建議增加冗余字段將自然健也加入關聯表中。
Ø 代碼管理策略
在客戶沒有特別要求的情況下,使用整數來表達代碼。并確定代碼表的建表策略,是建一個表統一管理還是分別建表管理?個人建議使用一個表管就行了。具體表設計后續可以和大家分享。
Ø 字符串字典管理策略
我們經常碰到一個問題,內部一些狀態和它的名稱的管理;比如審批流程中的審核、批準等等,建議使用字符串字典表統一管理。具體表設計后續可以和大家分享。
Ø 大字段管理策略
當碰到大字段時,建議盡量集中管理,并建在一個表空間(Oracle)或文件組(Sqlserver)上。后續和大家分享一下關于附件管理的表設計。
Ø 使用視圖
個人很少使用視圖,原因就是Powerdesign對視圖設計支持不好,但是有幾個方面給大家建議,所有的Select查詢最好從視圖檢索,視圖中將相應需要的中文信息統一帶出來(比如:代碼相對的名稱或一個流程的狀態名稱等);這樣統一處理前臺需要的顯示問題;在業務層構建對象模型時增加狀態名稱的屬性以保持它;這樣做的另一個好處就是減少和物理表的耦合性,畢竟一般系統中查詢遠比修改要多。
Ø 使用標量函數
我們有時有這樣的需求,要查今天的收入,要查最近7天的收入;這時我們可以使用標量函數來完成這個工作,并能保證時間以數據庫服務器一致;當然還有很多其他用途,大家去發現。
下面是一個標量函數的聲明來去給定日期當月的第一天:
Create function [dbo].[fn_BeginOfMonth](
@DayUTC datetime
)
returns datetime
Ø 使用模版表
用戶需要做相似又有微小差別的錄入或配置,可以使用模版表來增強用戶體驗。
Ø 和業務相關的表都包含下列字段
CreatedBy 創建人
CreatedOn 創建時間
ModifiedBy 最后修改人
ModifiedOn 最后修改時間
VersionNumber版本號
特別是VersionNumber作為開放式鎖的必要字段;在修改記錄時可以通過它來判斷用戶提交數據時,是否其他人做過改動,以便后續處理。
暫寫這么多,希望大家補充。
聲明:此文章并非本人原創,轉自公司的內部論壇,是公司一的位同事也是我的領導所寫,覺得不錯轉出來與大家共勉。