表设计规范:遵守三个范式

第一范式: 数据表中的所有字段都不可再分;

下图不满足第一范式:

 

下图的用户信息表将“地址” 这个属性拆分成“省份”、“城市”、“详细地址”,这样
就满足了第一范式,同时基于对“城市”的查询性能也相应提升。

第二范式:一个表中只能保存一种数据,不可以把多种数据保存在一张表中

下图的订单信息表中即存在商品信息,又有订单信息,因此存在数据冗余,不符合2NF

下图是拆分成符合2NF后的表结构:

第三范式:需要确保表中的每一列数据都和主键直接相关,而不能间接相关

下图这两个表所示的设计就是一个满足第三范式的数据库表,这样在查询订单信息的时候,就 可以使用客户编号来引用客户信息表中的记录,从而不必在订单信息表中多次输入客户信息的内 容,减少了数据冗余。

命名规范

长度规范

凡是需要命名的对象其标识符均控制在30个字符以内,表名、字段名、函数名、存储过程、触发器、视图等名字长度要尽量不超过30个字符长度。

大小写规范

遵循 Pascal 命名规范, 即每个单词的首字母都大写, 其它字母小写, 比如: 产品名称命名为 ProductName ,单价命名为 UnitPrice

构成规范

名称必须以字母开头,但严禁以系统关键字开头, 名称只能含有字母、 数字以及下划线“_”三类字符, “_”用于间隔名称中的各语义字段;不要使用系统保留字作表名。 比如: 产品表命名为 Product , 订单表命名为 Order ,产品和订单是多对多关系, 关系表命名为 Order_Product

主键

统一命名为 Id ,除临时表、日志表之外, 其它表都要建立主键, 主键最好设计成单一主键,尽量不要用复合主键,尽量使用没有业务语义的字段作为主键,如采用按顺序自增的数值型字段为主键。

外键

统一命名为主键表表名 + Id 的形式, 如果数据表有多个外键的主键表是相同的, 则采用逻辑词 + 主键表明 + Id 的形式, 数据类型必须和主键表的主键一致, 如下图所示:

上图中 ProductSubcategoryId 是外键, 对应的主键表为 ProductSubCategorySizeUnitMeasureIdWeightUnitMeasureId 也是外键, 对应的主键表为 UnitMeasure

列名规范

使用名词, 采用有意义的字段名,使描述尽可能清楚, 不要缩写。

数据类型

要根据实际应用选择合适的类型,如字段的数据为小于255的整形数字,那么就要选择TINYINT;如字段数据小于32767的整形数字,那么就要选择SMALLINT,如字段文本长度固定为8位,那么就要用CHAR(8);如文本长度最大为100,并且大小是非定长的,那么就要设VARCHAR(100),并且以上文本若为汉字,那么就要设为NVARCHAR和NCHAR。

注释规范

每个表,每个字段都要有注释,说明其含义,对于冗余字段还要特别说明其维护方法,外键字段要说明参照于那个表,另外对于存储过程、视图、触发器、函数等代码均要增加注释,以保持代码的可读性以及后续的可维护性。

必备字段

每个表必须有下面几个必备字段:

上图中 ProductSubcategoryId 是外键, 对应的主键表为 ProductSubCategorySizeUnitMeasureIdWeightUnitMeasureId 也是外键, 对应的主键表为 UnitMeasure

列名规范

使用名词, 采用有意义的字段名,使描述尽可能清楚, 不要缩写。

数据类型

要根据实际应用选择合适的类型,如字段的数据为小于255的整形数字,那么就要选择TINYINT;如字段数据小于32767的整形数字,那么就要选择SMALLINT,如字段文本长度固定为8位,那么就要用CHAR(8);如文本长度最大为100,并且大小是非定长的,那么就要设VARCHAR(100),并且以上文本若为汉字,那么就要设为NVARCHAR和NCHAR。

注释规范

每个表,每个字段都要有注释,说明其含义,对于冗余字段还要特别说明其维护方法,外键字段要说明参照于那个表,另外对于存储过程、视图、触发器、函数等代码均要增加注释,以保持代码的可读性以及后续的可维护性。

必备字段

每个表必须有下面几个必备字段:

名称类型是否可空默认值描述
IsEnabled bit 0 是否启用
CreateUserId nvarchar(50)   创建用户Id
CreateTime datetime2(3)   创建时间
ModifyUserId nvarchar(50)   修改用户Id
ModifyTime datetime2(3)   修改时间
RowGuid uniqueidentifier (newsequentialid()) 数据记录Guid
RowVersion rowversion   数据记录版本

关系图

如果一个业务涉及的表超过三个, 请在数据库中添加关系图, 说明这些表之间的关系, 如下图所示:

 

posted on 2015-09-30 13:12  zgyijg  阅读(231)  评论(0编辑  收藏  举报