1. 数据库设计规范简介 (Database Design Introduction)****
1.1 约定****
是指对数据库、数据库对象如表、字段、索引、序列、存储过程等的命名约定
命名使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,以每个单词前缀大写作为分隔
避免使用数据库系统的保留字如LEVEL、关键词如TYPE(见各数据库系统保留字与关键词)
各表之间相关列名尽量同名
除数据库名称长度为1-8个字符,其余为1-30个字符,Database link名称也不要超过30个字
命名只能使用英文字母,数字和底线
文字字段不允许Null,可设定默认值为空字符串
1.2 数据表****
规则如下:
命名规则为XXX_YYY_TableName。XXX表示子模块的名称,由三个大写字母构成;YYY表示子系统中的子模块的名称(选用);TableName为表含义
TableName规则如下:
使用英文单词或词组作为表名
用名词和名词短语作表名
不使用复数
正确的命名,例如:
TB_SYS_User
TB_BIZ_Order
1.3 存储过程****
规则如下:
命名规则为SP_XXX_YYY_StoredProcedureName。XXX表示子系统的名称,由三个大写字母构成;YYY表示子系统中的子模块的名称(选用);StoredProcedureName为预存程序含义
StoredProcedureName规则如下:
用动词或动词短语来命名,并带有宾语
尽量谨慎地使用缩写
尽量不要和关键词重合
StoredProcedureName内不使用底线
预存程序正确的命名,例如:
SP_SYS_InsertUser
SP_SYS_SearchUserByUserID
SP_SYS_DeleteUserByUserID
1.4 视图****
规则如下:
检视的命名采用VW_XXX_YYY_ViewName_v。XXX表示子系统的名称,由三个大写字母构成;YYY表示子系统中的子模块的名称(选用);ViewName部分表示检视的含义。
ViewName规则如下:
用名词和名词短语,
不使用复数
尽量谨慎地使用缩写
尽量不要和关键词重合
ViewName中使用底线
检视正确的命名,例如:
VW_SYS_UserView
VW_BIZ_UserOrderView
1.5 索引 (Index)****
l 规则如下:
IX_TableName_ColumnName
多单词组成的Column Name,取前几个单词首字母,加末单词组成Column Name
例如:
TST_Sample表MemberId上的索引: IX_TST_Sample_MemberId
TB_SYS_News表Title上的索引: IX_TB_SYS_News_Titile
1.6 序列 (Sequence)****
规则如下:
SEQ_TableName
如:
TST_Sample表的序列: SEQ_TST_Sample
1.7 主键 (Primary Key)****
主键命名:PK_TableName
如:
TST_Sample表的主键: PK_TST_Sample
1.8 外键 (Foreign Key)****
外键命名:FK_TableName_ColumnName
多单词组成的Column Name,取前几个单词首字母,加末单词组成Column Name
如:
TST_Sample表UserId字段的外键: FK_TST_Sample_UserId
TST_Sample表TypeId字段的外键: FK_TST_Sample_TypeId
2. 设计规范 (Design Guideline)****
2.1 规范约定****
- 遵守数据的设计规范3NF 规定
表内的每一个值都只能出现一次。
表内的每一行都应该被唯一的值。
- 每个数据表(Table)都必须包含五个必要字段:标识符(ID)、建檔人员(Creater)、建檔时间(CreateTime)、最后修改人员(Modifier)、最后修改时间(ModifyTime)及删除标志(IsDelete)其含义如下:
标识符是系统内每笔数据的唯一标识符
建文件人员是是指数据库记录建文件人识别文字
建文件时间是指数据库记录建文件时间,依不同数据库系统预设可能为SYSDATE、GetDate()
最后修改人员是是指数据库最后记录修改人员
最后修改时间是指数据库记录最后修改时间
删除标志是本条记录是否已删除的标志(0:未删除;1:已删除),数据中的数据不做真正删除,只设置这个标志
这五个字段的命名规则如下
实体Table+域名,如UserId、Creater、CreateTime、Modifier、ModifyTime、IsDelete
这五个字段的类型和长度规则如下:
标识符:数值型态,依预期数据量决定长整数、整数、短整数等类型
建檔人员:文字型态,存入可用于识别建文件人员之信息。如:员工编号、姓名
建檔时间:日期时间型态
最后修改人员:文字型态,存入可用于识别最后修改人员之信息。如:员工编号、姓名
最后修改时间:日期时间型态
删除标志:最小数值型态,如:bit、NUMBER(1)
2.2 字段规范****
一行记录必须表内唯一,表必须有主键(PK)。
列举类型使用 NUMBER,且需要说明列举类型的各个不同取值的含义,或将各列笔类型对应含义定义于Code Table
ID结尾的字段为仅由数字组成,Code结尾的字段为仅由字母或数字组成
用Bit或NUMBER(1)表示布尔值:「是」,「否」
不固定长度的文字字段应尽量使用VARCHAR2或VARCHAR代替CHAR类型
可能存入Unicode文字的字段应使用NVARCHAR或NCHAR等支持Unicode的类型
文字字段一般最多4000字符;特殊需求需与DBA讨论后决议
DATETIME精确到毫秒
使用NUMBER或DECIMAL数值类型时请给定长度,例如:NUMBER(5,2)表示整数部分最大3位,小数部分为2位
非上述常用数据型态需与DBA讨论后决议
3 使用规范( Usage S pecification)****
3.1 综合****
如果开发过程中需要建立索引,需要提交书面的更改请求,说明所需索引的定义(名称、字段列表、顺序、索引类型)以及建立的理由。DBA统一维护索引并将提交的请求更改
数据库各表的初始数数据(包含各Code Table、Config Table)需要提交给数据库管理员
尽量不要使用触发程序
涉及到数据库多表数据的更改(Insert/Delete/Update)必须使用数据库事务进行控制,并且必须有完整事务开始和commit/rollback机制
尽量避免Union操作的使用,需要使用时,请向数据库管理员咨询使用Union操作的影响
3.2 查询****
在表查询中,一律不要使用* 作为查询的字段列表,需要哪些字段必须显式写明
在表查询中,必须有Where条件,除非此表为非增长表
在表查询中,一次最多回传的记录笔数仅量不要超过1000条或记录内容不要大于1MB
在表查询中,作Order By排序时,优先使用主键列,索引列
多表关联查询时,优先使用Where条件,再作表关联,并且需要保证被关联的字段需要有索引
异动性不高的数据表查询时应加入不锁定指令,如NoLock
避免在WHERE字句中对列施以函数
错误:
Select ServiceId, ServiceName
From TST_ServicePromotion(NoLock)
Where Convert(Char(10), OrderDate, 112) = ‘2001-09-01’;
正确:
Select ServiceId, ServiceName
From TST_ServicePromotion(NoLock)
Where OrderDate = Convert(DateTime, ‘2001-09-01’);
避免使用数据库的类型自动转换功能:
错误:
Select CategoryId, CategoryName
From TST_Category(NoLock)
Where CategoryId = ‘123’; -- id’s type is number
正确:
Select CategoryId, CategoryName
From TST_Category(NoLock)
Where CategoryId = 123; -- id’s type is number
3.3 删除****
删除记录时,必须有Where唯一条件
当有主从表时,要先删除从表记录,在删除主表记录
3.4 修改****
修改记录时,必须有Where唯一条件