SQL SERVER 数据库设计经验总结
2011-01-28 09:22
288 查看
按照一定的规范进行数据库设计,至少有下面几点好处
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
日期保存
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
日期保存
相关文章推荐
- SQL Server 数据库设计经验总结
- SQL Server 2005 一千万条以上记录分页数据库优化经验总结(转载)
- SQL SERVER 2008 数据库设计经验谈
- 数据库设计经验总结------SQL Server + .NET篇
- SQL Server 数据库优化经验总结
- 数据库设计经验总结
- SQL Server 数据库经验总结
- SQL Server 2005 一千万条以上记录分页数据库优化经验总结
- 大量的数据库分析与设计实践中总结出的经验
- SQL Server 数据库优化经验总结
- 我用百度、阿里的产品经验,总结成了这9个产品设计方法
- 使用MySQL Workbench进行数据库设计——MySQL Workbench使用方法总结
- WEB前台架构部分经验总结------第一章、浅谈页面设计
- 数据库设计经验谈
- verilog设计经验总结(转载)
- 数据库课程设计--“茶咖啡”销售管理系统总结
- 数据库设计总结学习
- 数据库设计总结
- [转载]总结:数据库设计多对多关系的几种形态(7种)
- SQL Server 数据库设计