建站學院文檔 平時大大小小的數據庫,面向產品的,面向項目的,數據庫設計了不少??偨Y了一些個人經驗如下,供大家探討。
1. 表命名
1) 使用多段式單詞,單詞之間用下劃線分割;
2) 相同性質的表,適用分組前綴。能從命名上看出哪些表屬于一組
如實例數據表以instance_開頭,instance_form_header, instance_form_approve, 參考數據表以refer_開頭,refer_category, refer_category_items 等;
3) 大的系統表名使用 [系統名]_模塊名_ 前綴,便于系統間的整合;
4) 系統常用的固定表名:
system_config, system_log, system_objects, system_glossary, system_dictionary等;
2. 欄位命名
1) 不使用數據庫關鍵字作為欄位名稱,如id, level 等;
2) 對于系統術語,保持命名一致性;
如人員分機號, 可統一命名ext_no, 而不是某些欄位命名為extension_no, 某些欄位又叫做telphone_no;
3) 相同數據性質的欄位, 保持命名一致性
² 如存儲大段文本的欄位,統一用 _desc, _note, _remark等結尾
² 時間欄位,使用 _on結尾, 如issue_on, approved_on
² 與特殊階段或者角色相關的欄位,使用合適前綴, 如 dcc_xxx(dcc為角色)
app_xxx(app為階段名稱)
² 開關值,統一以 is_開頭,或者 _flag結尾
4) 預留欄位命名 segment1, segment2, segment3…
3. 數據類型
1) 使用基本的數據類型;
字符串: nvarchar
開關值: nvarchar(1)
整數: int
浮點數: decimal
日期類型: datetime
長文本: ntext (2005 nvarchar(max)
2) 保存字符類型的欄位使用nvarchar, ntext, 以支持多國語言存儲;
3) 盡量不使用自增類型欄位,使用表來管理各個系統對象的自增;
4) 開關值統一使用nvarchar(1) , 而不是(tiny)int;
4. 欄位長度
1) 保持相同用途欄位的長度一致性;
2) 如果最初無法確定欄位長度:
對于字符串欄位:
² 一般欄位使用默認長度 nvarchar(50)
² 稍長欄位使用nvarchar(150)
² 長文本使用 nvarchar(500)
對于浮點數:
使用默認定義 decimal(18, 2)
5. 值范圍設置
1) 開關值, 使用 0/1 而不是Y/N
2) 全部/特定, 全部使用 * 表示,而不是ALL /none 等
--上面的值的特征是非大小寫敏感
6. 其他
1) 使用SQL Server diagram 工具設計表,將相互關聯的作為一組,便于項目組成員理解表之間的關系
2) 每個表盡量加上主鍵
3) 大表在設計的時候就應該注意加上合適索引
4) 實例數據表,維護數據表加上四個追蹤欄位
created_by nvarchar(50) not null
created_on datetime not null 可設置默認值為 getdate()
changed_by nvarchar(50) null
changed_on datetime null
5) 為可能變化的表預留 3~5個擴展欄位nvarchar(50)
6) 對于靜態數據,合并小表到單表,使用視圖開放給使用者
7) 不允許為空的欄位,設計的時候就要設定該欄位不允許為空
8) 重要欄位添加必要的約束條件
9) 將欄位的描述信息保存在數據庫中
10) 適量采取冗余欄位設計
11) 復雜的業務邏輯寫成SP封裝,SP,自定義函數分別使用usp, udf開頭