(十)选择数据类型(MS SQL 2008)
MS SQL的常用类型:
精确数字 |
不会发生精度损失 |
bit tinyint smallint int bigint decimal |
近似数字 |
对于极值可能发生精度损失 |
float(N) real |
日期和时间 |
|
date time smalldatetime datetime datetime2 datetimeoffset |
二进制数据 |
|
bingary(N) varbinary(N) varbinary(max) |
字符(串)数据 |
|
char(N) varchar(N) varchar(max) nchar(N) nvarchar(N) nvarchar(max) |
存储任意数据 |
|
sql_variant |
时间戳 |
|
timestamp |
GUID |
|
uniqueidentifier |
XML |
不要试图使用该类型规避1NF |
xml |
空间数据 |
|
geometry geography |
层次数据 |
|
heirarchyid |
MS SQL中不在支持的或糟糕的类型选择
● image:被varbinary(max)取代。
● text和ntext:被varchar(max)和nvarchar(max)取代。
● money和smallmoney:开发过程中不好用,建议使用decimal。
常用类型选择:
类型选择的最基本规则是选择满足需要的最轻的类型,因为这样查询更快。
bool |
建议使用bit而非char(1),因为开发语言对其支持觉好,可以直接映射为bool或bool?。 |
大值数据 |
使用所有备选类型中最小的那种,类型越大,查询越慢,当字节大于8000时,应使用max。 |
主键 |
自增主键根据预期范围选择int或bigint,GUID使用uniqueidentifier而非varchar(N)。 |
(十一)优化并行
设计DB时就应该考虑到对并行进行优化,比如,MS SQL中的timestamp类型就是极好的选择。
四、命名规则
表——“模块名_表名”。表名最好不要用复数,原因是在使用ORM框架开发时,代码生成器根据DB生成类定义,表生成了某个实例的类型定义,而不是实例集合。表名不要太长。
● 原因之一,某些软件对表名最大长度有限制;原因之二,使用代码生成器往往会根据表名生产类型名称,之后懒人会直接使用这一名称,如果将太长的名称跨网络边界显然不是明智之举。
● 字段——bool类型用“Is”、“Can”、“Has”等表示;日期类型命名必须包含“Date”;时间类型必须包含“Time”。
● 存储过程——使用“proc_”前缀。
● 视图——使用“view_”前缀。
● 触发器——使用“trig_”前缀。