按照一定的规范进行数据库设计,至少有下面几点好处
1) 便于项目组的成员快速了解数据结构
2) 减少应用开发中错误
3) 便于开发一些自动工具,生成可读性较高的代码
4) 便于和其他系统整合
5) 便于后期的维护,升级,扩展
下面是我多年来数据库设计经验的总结,供大家参考。
1. 表命名
1) 表名采用大写
2) 使用多段式单词,单词之间用下划线分割;长度不超过30;
3) 相同性质的表,定义模块前缀进行分组。
如组织数据表以ORG_开头,ORG_EMPLOYEE, ORG_DEPARTMENT
参考数据表以REFER_开头,REFER_CATEGORY, REFER_CATEGORY_ITEMS 等;
4) 大的系统表名使用 [系统名]_模块名_ 作为前缀,便于系统间的整合;
5) 系统常用的固定表名:
SYSTEM_CONFIG, SYSTEM_LOG, SYSTEM_RESOURCE, SYSTEM_DICTIONARY等;
2. 栏位命名
1) 栏位名采用大写
2) 不使用数据库关键字作为栏位名称,如ID, LEVEL 等;
3) 对于常用字段或者系统术语,保持命名一致性;
如人员分机号, 可统一命名EXT_NO, 而不是某些栏位命名为EXTENSION_NO, 某些栏位又叫做TELPHONE_NO;
4) 相同数据性质的栏位,保持命名一致性
² 如存储大段文本的栏位,统一用 _DESC, _NOTE, _REMARK等结尾
² 时间栏位,使用 _ON结尾, 如CREATED_ON, CHANGED_ON
² 开关值,统一以 IS_开头,或者 _FLAG结尾
5) 预留栏位命名 SEGMENT1, SEGMENT2, SEGMENT3…
3. 数据类型
1) 使用基本的数据类型;
字符串: NVARCHAR
开关值: NVARCHAR(1)
整数: INT
浮点数: DECIMAL
日期类型: DATETIME
长文本: NTEXT (2005 NVARCHAR(MAX))
2) 保存字符类型的栏位使用NVARCHAR, NTEXT, 以支持多国语言存储;
3) 不使用自增类型栏位, 如果需要获取系统唯一ID做标识列,可以使用GUID或者自行控制的ID序列;
4) 开关值统一使用NVARCHAR(1);
4. 栏位长度
1) 保持相同用途栏位的长度一致性;
2) 如果最初无法确定栏位长度:
对于字符串栏位:
² 一般栏位使用默认长度 NVARCHAR(50)
² 稍长栏位使用NVARCHAR(150)
² 长文本使用 NVARCHAR(1500)
对于浮点数:
使用默认定义 DECIMAL(18, 2)
5. 值设置
1) 开关值, 使用 0/1 而不是Y/N
2) 全部/特定, 全部使用 * 表示,而不是ALL /NONE 等
--上面的值的特征是非大小写敏感
3) 系统初始化数据,默认值等,在整个系统范围内,统一大写或者小写
6. 其他
1) 使用SQL SERVER DIAGRAM 工具设计表,将相互关联的作为一组,便于项目组理解表之间的关系
2) 每个表必须有主键,不要使用具体的业务数据作为主键
3) 大表在设计的时候就应该注意设置合适索引
4) 实例数据表,维护数据表加上四个追踪栏位
CREATED_BY NVARCHAR (50) NOT NULL
CREATED_ON DATETIME NOT NULL
CHANGED_BY NVARCHAR (50) NULL
CHANGED_ON DATETIME NULL
5) 为可能变化的表预留 3~5个扩展栏位,SEGMENT 1 ~ SEGMENT 5 NVARCHAR(50)
6) 对于静态数据,合并小表到单表,使用视图开放给使用者
7) 不允许为空的栏位,设计的时候就要设定该栏位不允许为空。而不是在应用程序控制
8) 重要栏位添加必要的约束条件
9) 将栏位的描述信息保存在数据库中
10) 如果系统支持国际化运行,数据库的时间栏位全部全用utc 日期保存