MSSQL SERVER数据库开发规范

所需积分/C币:22 2018-05-02 16:52:53 430KB PDF

8年DBA经验积累,应用到企业实际开发,适用构建统一的数据库代码规范
第-部分命名规范 1命名规范 命名规范适用于数据库名,对象名,字段名 如下: (1)命名约定介绍 Pasca大小写 将标识符的首字母和后面连接的每个单词的首字母都大写,如:c 常用单词缩写三个字母以下字母都大写,如:SP、PK 常用单词缩写三个字母以上第一个字母大写,如:User。 大写 标识符中的所有字母都大写。例如: 前缀:如MC,SF (2)单词不使用复数 Count,User-正确 Counts, Users-错误 (3)不使用数据库保留关键字字给数据库对象命名 A4: Select, Update, Insert Join, Where, From 如需查看 SQL Server的保留关键字,请参看附表 保留关键字 (4)命名使用英文单词或英文单词缩写,名称中禁止使用空格和中文以及中文拼音。 如: MIC UserInfo-正确 YonghuXinxi-错误:使用了中文拼音 用户信息 错误:使用了中文 User Info-错误:使用了空格 11数据库命名 数据库名使用大写。 12对象命名 对象名前缀: 对于原有的对象,不改变规则, 对 自建的对象,要求加前缀M|c 表(1) 对象名称前缀备注 表 见表(2) 视图 V表名,如 V UserInfo 主键 PK PK表名:主键约束:如: PK UserInfo 约束 FK表名列名:外键约束:如: FK UserInfo DeptNo UK表名字段名:唯—键约束:如: UK UserInfo useriD DF表名字段名:默认约束:如: DE USerInfo sex CK表名字段:检查约束:如 CK UserInfo_ Salary 索引 X表名字段:如: UserInfo userName 存储过程sPSP过程名称:如 SP GetUserInfo 函数 FNFN函数名称如 FNC GetUserName 触发器 禁止使用 同义词 SYN SYN对象名如 SYN USerInfo 跨服务器访问DB时,可在本地创建同义词访问。 数据库链接DLDL数据库名,如 DL DBNAME,用于跨服务器的数据库访问。 类型 TYTY表名称,如 TY UserInfo,用于 (1)基于数据类型的别名 (2)用户定义类型 (3)用户定义表类型 其他对象 采用与表名相同的命名法 13表 表(2) 属性 设置 命名 Mc为表的前缀:大写 Name为数据库表的名称: Pasca命名法 数据表:M| C Name 例如 MIC BOMInfo 历史表: MIC NamelIsT 例如: MIC BOMInfoHIST 临时表:# TMP Name 例如 #TMP UserInfo 备份表:M| C NameBAK日期 例如 MIC UserInfoBAK20170410 表名称长度一般<40,长度越少越好视具体情况币定) 表注释 一定要有注释,且清晰简洁。 主键 1.每个表都设计主键,如果没有,加主键。 2.主键采用不要有更新的列 表别名 AS关键字指定,简短,使用大写 表分区 对于大数据量的表,选用合适字段进行分区。 (如按日期,国家,省份. 14字段(列) 属性 设置 字段名称 字段命名统一使用 Pasca标志法,单词中间不用下划线 UserID 用户|D UserName用户名称 Person Code人员编号 Remark 备注 字段名称长度长度<40越少越好。 数据类型 选用合适的数据类型数据类型可参照附表(2) (1)数据类型 整数:bit,其值只能是0、1或空值 字符串值TRUE可转换为1, FALSE可转换为0 转换为bit会将任何非零值升为1 tinyint,0~255,占1个字节。 smallint,-2^15(-32768)~2^15(32767),占2个字节 int,-2^31(-2147483648)~2^31(2147483647),占4个字节 bigint,-2^63~2^63,占8个字节 浮点: decimal(ps) p:表示精度,范围1~38,默认18 s:表示小数位数范围:1~p,默认0, 使用最大精度时有效值范围:-10^38+1到10~38-1 float(n),n为用于存储 float数值尾数的位数 n在1~24,精度为7位数,占4字节,此时相当于rea类型 n在25~53,精度15位数,占8字节 日期:date,默认格式YYYY-MM-DD,默认值1900-01-01 日期范围0001-01-01到9999-12-31 占3字节。 time(n),默认值00:00:00 范围00:00:0.0000000到23:59:599999999 n是精度:默认7,范围为0到999999 n=0,1,2,占3字节 n=34,占4字 n=567,占5字节 smalldatetime,默认值1900-01-0100:00:00 日期范围1900-01-01到2079-06-06 时间范围:00:00:0到23:59:59 2017-04-0923:59:59将舍入为2017-04-1000:00:00 占4字节 datetime,默认值:190001-0100:00:00。 日期范围:1753年1月1日到9999年12月31日 时间范围:0000:00到23:59:59.997 存储大小:8字节 datetime2(n)默认值:1900-01-0100:00:00 日期范围:0001年1月1日到9999年12月31日。 时间范围:00:00:00到23:59:59.9999999 n为精度,范围0~7,默认为7。 假设n=7,则格式为YYYY-MM-DDhh:mm:ss.0000001 n<3,存储6个字节。 n=3n=4,存储7个字节 n>=5,存储8个字节。 datetime,默认值:1900-01-0100:00:00。 日期范围:1753年1月1日到9999年12月31日 时间范围:00:00.00到23:59:59997。 存储大小:8字节。 字符:char(m),定长, n定义字符串长度,为1到8000。 存储大小为n字节, 涉及到多语言的内容则不使用 varchar(nmax),可变长度 n定义字符串长度,为1到8,000, max指示最大存储2^31-1(2GB字节, 存储大小为所输入数据的实际长度+2个字节字节 涉及到多语言的内容则不使用 nchar,定长的 Unicode字符串数据。 n定义字符串长度,为1到4,000 存储大小为n字节的两倍。 涉及到多语言的内容使用。 nvarchar(nmax),可变长度的 Unicode字符串数据 n定义字符串长度,为1到4,000之间的值。 max指示最大存储大小是2^31-1个字节(2GB) 存储大小是所输入数据实际长度的两倍+2个字节 涉及到多语言的内容使用。 大数据字段使用 varchar(max)或 nvarchar(max) 涉及到多语言的内容使用 nvarchar(max)。 (2)禁止使用二进制字段类型text, ntext, Image (3)使用 datetime2(3)替代 datetime (4)在 sql server2012以后的版本会删除text, ntext,分别用 varchar(max), nvarchar(max)改写 字段注释所有宇段做好注释,清晰筒洁为原则 15脚本文件命名 日期( )业务描述 如 20170417基础排班优化.sq 第二部分数据库开发设计规范 2数据库开发设计规范 2.1基本管理规范 规范 适用人 定期对数据库所有脚本备份逻辑结构备) DBA,软件工程师 维护数据字典 DBA,软件工程师 定义好数据库角色或用户的权限 DBA,软件工程师 对象的变更需要保存历史记录和备份 软件工程师 所有对象的结构和代码的变更需要做好相应备注 软件工程师 对象的 DDL(ALTER, DROP,TRUNCATE谨慎执行软件工程师,DBA 先测试后上线的原则 所有人员 文件的编码必须为 unicode类型 软件工程师,DBA 2,2SQLT-SQL的规范 (1)环境要求:适用于软件工程师,DBA 部署不同的数据量的测试环境,能模拟不同压力下的代码效率。 2)测试要求:适用于测试工程师。 sq代码需在不同环境进行性能测试。 (3)代码要求:适用于软件工程师 (1)代码尽量简短,避免编写太复杂的代码。 (2)代码逻辑清晰,注释简洁,容易理解 3)禁止使用GOTO语句。 (4)重复性执行要求:适用于软件工程师,DBA (1)表 IF NOT EXISTS(SELECT 1 FROM sys. objects WHERE name='TableName' and type='U') CREATE TABLE TableName( (2)存储过程,函数,视图的创建 IF EXISTS (SELECT 1 FROM sys. objects WHERE name='ProcedureName' and type='P') type列解释:P为存储过程,HN为函数,V为试图 DROP PROCEDURE ProcedureName CREATE PROCEDURE ProcedureName BEGIN END 3)字段增删改 IF NOT EXISTS(SELECT 1 FROM sys. columns WHERE object name (object id)=TableName and name=’ ColName’) ALTER TABLE Tablename add colname 4)索引修改 IF NOT EXISTS (SELECT FROM sysindexes WHERE id-objecl id( TableName') ndexname CREATE NONCLUSTERED TNDEX IndexName on [dbo] [TableName(lCol Name]) (5)type类 要先于存储过程创建,后于存储过程删除。 (5)可读性要求 适用于所有需要写sq代码的人 为增强代码可读性,断句和缩进按规定格式编写,如下俩 SELECT T1CO,T2.c0 2 SELECT放一块 FROM TableNamel as tnt FROM另起一行 LEFT JOIN TableName2 as tn2 JO|N表另起一行 ON TNLID= TN2D ON另起一行 WHERE EXISTS WHERE子句另起一行 SELECT 1 FROM TableName3 as tn3 子查询单独一行 WHERE TN3 D=TNLID AND TN1COL2=′COL2′ AND条件另起一行 (6)注释 适用于软件工程师 程序中的sq代码开头带注释,便于 troubleshooting,举例 如:如下C#代码 string sql str=”/*2017-04-2010:19:00 By Tom Cat简要说明作用*/ sql str sql str +"SELECT col1, col2 FROM Table 1 WHERE coll=abc cmd.commandtexT=sqlstr cmd ExecuteNonQuery o 23存储过程的编写 适用于所有人员 示例 USE [TESTI GO 存储过程说明 用途:根据用户|D查询统计 -项目名称 --说明:这里对存储过程进行详细说明 时间:2017-04-28 编写者 修改记录 --编号修改时间 修改人 修改原因 修改标注 0012017-04-28 Name 这里说明修改原因 001 测试语句 EXEC SP GetList Location status=2 CREATE PROCEDURE [dbo][SP GetList] @ TestString VARCHAR(MAX=NULL-(1)变量采用 Pascal风格 @ StatUs Int=0-(2)注释意义:0-全部;1-已标注;2-未标注 AS BEGN-(3)存储过程保持这种缩进风格,增强美观性和可读性 SET NOCOUNT ON -(4)存储过程中关闭统计 (5)介绍每个代码块的功能,增强代码可读性 IF ISNULL(OTestString,)<> BEGIN EXEC SP XML Prepare Document @Handle OUTPUT, Teststring (6) SELECT ID INTO#empD修改前的代码段注释保留* NSERT|NTO# TempD-001这里标注相应修改的位置 SELECT ID FROM OPENXML(@ Handle, N'c: /temp)WITH (ID int) EXEC SP XML Remove Document @ Handle END SET NOCOUNT OFF (7)每个存储过程中打开统计 END

...展开详情
试读 11P MSSQL SERVER数据库开发规范
img
basunio

关注 私信 TA的资源

上传资源赚积分,得勋章
    最新推荐
    MSSQL SERVER数据库开发规范 22积分/C币 立即下载
    1/11
    MSSQL SERVER数据库开发规范第1页
    MSSQL SERVER数据库开发规范第2页
    MSSQL SERVER数据库开发规范第3页
    MSSQL SERVER数据库开发规范第4页

    试读已结束,剩余7页未读...

    22积分/C币 立即下载 >