关闭

写给开发者看的关系型数据库设计

发表于:2013-4-01 09:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:MeteorSeed    来源:51Testing软件测试网采编

  (十)选择数据类型(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_”前缀。

66/6<123456
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号