SQL Server 数据库设计经验总结

 

 

       平时大大小小的数据库,面向产品的,面向项目的,数据库设计了不少。总结了一些个人经验如下,供大家探讨。

 

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开头

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值