一.数据库对象范围限定
1.表
2.约束[主键/外键]
3.索引
4.标量函数
5.存储过程
6.视图(对外)
二.数据库对象命名总规范
1.数据库所有元素只能使用字母,数字和下划线命名.不允许使用中文.且需自解释.不能使用中文首字母.
2.命名中的英文单词以大写首字母开头,主体部分为连续的英文单词,如果英文名称过长,可以使用英文简称.
三.表
1.命名
T_[功能类]_[表名称]
功能类.譬如Dict;Treat;Pat
T_Dict_InsuranceType
2.字段
1.字段名无下划线.譬如UserName
2.以表名称+Id为编号.譬如UserId,PatId
3.特例:由于底层框架强制约定.
主键列名 GUID
院区 Hos_ID
创建时间 CreateDate
3.字段类型
无法设置长度类型(BIT,TINYINT,SMALLINT,INT,BIGINT;DATETIME)
满足存储且长度最小的类型
可设置长度类型(CHAR,VARCHAR)
满足存储且长度最小的长度,冗余不超过10
不允许列类型为text,ntext,image.
字段全部不能为空,NOT NULL.特例:树父级Id,空外键引用.
每个表名,字段都有对应的说明.
四.约束
PK_[CL/NC]UQ[表名]主键列
PK_CL_UQ_T_User_UserId
FK[从表名][主表名][外键列]
CL:clustered;
NC:nonclustered
五.索引
IDX_[CL/NC][UQ][表名称][列名称]
IDX_NC_T_User_UserName_UserType
六.标量函数
FN_[功能类]_[函数名称]
Common,Pat,Treat,Public
七.存储过程
SP_[功能类]_[存储过程名]
八.数据库脚本规范
1.命名规范
DbName_Version_yyyyMMdd_HHmm_作者_简要说明.sql
2.脚本头使用USE,指定使用的数据库.
3.脚本可以重复执行,防御式编程.
4.对象判断SQL(不存在)
表
IF OBJECT_ID('DBO.TABLENAME','U') IS NULL
列
IF COL_LENGTH('DBO.TABLENAME','COLUMNAME') IS NULL
主键
IF OBJECT_ID('PK_CL_T_EQ_DEPRECIATION','PK') IS NULL
外键
IF OBJECT_ID('FK_T_EQ_DEPRECIATION_UserId','F') IS NULL
标量函数
IF OBJECT_ID('DBO.FN_FNNAME','FN') IS NULL
存储过程
IF OBJECT_ID('DBO.SP_SPNAME','P') IS NULL
索引
IF NOT EXISTS(SELECT 1 FROM SYS.INDEXES WHERE NAME = 'INDEXNAME')
5.表字段添加方法
IF COL_LENGTH('DBO.TableName','ColumnName') IS NULL
BEGIN
ALTER TABLE TableName ADD ColumnName Type NOT NULL CONSTRAINT DF_TableName_ColumnName DEFAULT 0;
EXECUTE sp_addextendedproperty N'MS_Description','Description', N'user', N'dbo', N'table', N'TableName', N'column','ColumnName'
END
GO
IF OBJECT_ID('DF_TableName_ColumnName','D') IS NOT NULL
ALTER TABLE TableName DROP CONSTRAINT DF_TableName_ColumnName;
GO
6.创建存储过程模板.
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Add the parameters for the stored procedure here
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO