时间:2021-07-01 10:21:17 帮助过:2人阅读
下图不满足第一范式:
下图的用户信息表将“地址” 这个属性拆分成“省份”、“城市”、“详细地址”,这样
就满足了第一范式,同时基于对“城市”的查询性能也相应提升。
下图的订单信息表中即存在商品信息,又有订单信息,因此存在数据冗余,不符合2NF
下图是拆分成符合2NF后的表结构:
下图这两个表所示的设计就是一个满足第三范式的数据库表,这样在查询订单信息的时候,就 可以使用客户编号来引用客户信息表中的记录,从而不必在订单信息表中多次输入客户信息的内 容,减少了数据冗余。
凡是需要命名的对象其标识符均控制在30个字符以内,表名、字段名、函数名、存储过程、触发器、视图等名字长度要尽量不超过30个字符长度。
遵循 Pascal 命名规范, 即每个单词的首字母都大写, 其它字母小写, 比如: 产品名称命名为 ProductName ,单价命名为 UnitPrice 。
名称必须以字母开头,但严禁以系统关键字开头, 名称只能含有字母、 数字以及下划线“_”三类字符, “_”用于间隔名称中的各语义字段;不要使用系统保留字作表名。 比如: 产品表命名为 Product , 订单表命名为 Order ,产品和订单是多对多关系, 关系表命名为 Order_Product 。
统一命名为 Id ,除临时表、日志表之外, 其它表都要建立主键, 主键最好设计成单一主键,尽量不要用复合主键,尽量使用没有业务语义的字段作为主键,如采用按顺序自增的数值型字段为主键。
统一命名为主键表表名 + Id 的形式, 如果数据表有多个外键的主键表是相同的, 则采用逻辑词 + 主键表明 + Id 的形式, 数据类型必须和主键表的主键一致, 如下图所示:
上图中 ProductSubcategoryId 是外键, 对应的主键表为 ProductSubCategory , SizeUnitMeasureId 和 WeightUnitMeasureId 也是外键, 对应的主键表为 UnitMeasure 。
使用名词, 采用有意义的字段名,使描述尽可能清楚, 不要缩写。
要根据实际应用选择合适的类型,如字段的数据为小于255的整形数字,那么就要选择TINYINT;如字段数据小于32767的整形数字,那么就要选择SMALLINT,如字段文本长度固定为8位,那么就要用CHAR(8);如文本长度最大为100,并且大小是非定长的,那么就要设VARCHAR(100),并且以上文本若为汉字,那么就要设为NVARCHAR和NCHAR。
每个表,每个字段都要有注释,说明其含义,对于冗余字段还要特别说明其维护方法,外键字段要说明参照于那个表,另外对于存储过程、视图、触发器、函数等代码均要增加注释,以保持代码的可读性以及后续的可维护性。
每个表必须有下面几个必备字段:
上图中 ProductSubcategoryId 是外键, 对应的主键表为 ProductSubCategory , SizeUnitMeasureId 和 WeightUnitMeasureId 也是外键, 对应的主键表为 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 | 否 | 数据记录版本 |
如果一个业务涉及的表超过三个, 请在数据库中添加关系图, 说明这些表之间的关系, 如下图所示:
数据库规范
标签: