MySql标准fenghuang - 众发娱乐

MySql标准fenghuang

2019-02-10 11:00:38 | 作者: 元绿 | 标签: 标准,进程,修正 | 浏览: 7204

1.数据库表及字段命名、规划标准
1.1数据库表数据库表的命名标准:
表的前缀应该用体系或模块的英文名的缩写(悉数大写或首字母 大写)。假如体系功用简略,没有划分为模块,则能够以体系英文称号的缩写作为前缀,否则以各模块的英文称号缩写作为前缀。例如:假如有一个模块叫做 BBS(缩写为BBS),那么你的数据库中的一切目标的称号都要加上这个前缀:BBS_ + 数据库目标称号,BBS_CustomerInfo标明论坛模块中的客户信息表
表的称号有必要是易于了解,能表达表的功用的英文单词或缩写英文单 词,无论是完好英文单词仍是缩写英文单词,单词首字母有必要大写。假如当时表可用一个英文单词表明的,请用完好的英文单词来表明;例如:体系资猜中的客户表 的表名可命名为:SYS_Customer。假如当时表需用两个或两个以上的单词来表明时,尽量以完好方式书写,如太长可选用两个英文单词的缩写方式;例 如:体系资猜中的客户物料表可命名为:SYS_CustItem。
表称号不应该获得太长(一般不超越三个英文单词)。
在命名表时,用奇数方式表明称号。例如,运用 Employee,而不是 Employees。
关于有主明细的表来说。明细表的称号为:主表的称号 + 字符Dts。例如:收购定单的称号为:PO_Order,则收购定单的明细表为:PO_OrderDts
关于有主明细的表来说,明细表有必要包括两个字段:主表要害字、SN,SN字段的类型为int型,意图为与主表要害字联合组成明细表的要害字,以及标明明细记载的先后次序,如1,2,3……。
表有必要填写描绘信息
后台表名尽量与前台表名相同,后台独有的表应以_b作为后缀。如r_gggd_b
1.2表字段
命名标准 
数据库字段的命名有必要遵从以下标准:
采 用有意义的字段名。字段的称号有必要是易于了解,能表达字段功用的英文单词或缩写英文单词,单词首字母有必要大写,一般不超越三个英文单词。例如:人员信息表 中的电话号码可命名为:Telephone或Tel。产品明细表中的产品称号可用ProductName表明。(引荐一般用完好的英文单词)。
体系中一切归于内码字段(仅用于标明仅有性和程序内部用到的标明性字段),称号取为:“ID”,选用整型或长整型数,详细依据或许的数据量断定,添加记载时取最大值加1,该字段一般为主要害字。
体系中归所以业务规模内的编号的字段,其代表必定的业务信息,比方材料信息和单据的编号,这样的字段主张命名为:“Code”,其数据类型为varchar,该字段需加仅有索引。
在命名表的列时,不要重复表的称号;例如,在名为 Employee 的表中防止运用名为 EmployeeLastName 的字段。
不要在列的称号中包括数据类型。

规划标准
一切字段在规划时,除以下数据类型timestamp、image、datetime、smalldatetime、 uniqueidentifier、binary、sql_variant、binary 、varbinary外,有必要有默许值。字符型的默许值为一个空字符值串’’;数值型的默许值为数值0;逻辑型的默许值为数值0;
其间:体系中一切逻辑型中数值0表明为“假”;数值1表明为“真”。
datetime、smalldatetime类型的字段没有默许值,有必要为NULL。
当字段界说为字符串形时主张运用varchar而不必nvarchar。
主张在大多数表中(如报销单,申请单),应都有以下字段:
字段名阐明类型默许值
CreatorID创立者int0
CreatedTime创立时刻DatetimeNULL

字段的描绘
数据库中每个字段的描绘(Description)如下:

尽量恪守第三范式的标准(3NF)。
表内的每一个值只能被表达一次
表内的每一行都应当被仅有的标明
表内不应该存储依赖于其他键的非键信息
假如字段事实上是与其它表的要害字相关联而未规划为外键引证,需建索引。
假如字段与其它表的字段相关联,需建索引。
假如字段需做含糊查询之外的条件查询,需建索引。
除了主要害字答应树立簇索引外,其它字段所建索引有必要为非簇索引。
字段有必要填写描绘信息
2存贮进程命名及规划标准
2.1命名标准
存贮进程的命名请遵从以下命名标准:USP _ + 体系模块缩写(与表前缀相似)+_ + 功用标识 + 代表存贮进程操作的首要表名(不带前缀)或功用的英文单词或英文单词缩写。
假如一个存贮进程只对一个表进行操作,主张存贮进程的称号就用存贮进程所操作的表的表名(不带前缀)。这样有利于依据表名找到相应的存贮进程。
为了在很多的存贮进程中能很快的找到并保护存贮进程,咱们按存贮进程的效果将体系的存贮进程
进行以下的分类及命名:(以下示例假定存贮进程地点的模块名为ORG)
效果榜首前缀第二前缀名
(功用标识)示例
用于新增的存贮进程USP_ORGAddUSP_ORG_Add_Employee
用于修正的存贮进程USP_ORGUptUSP _ORG_Upt_Employee
用于删去的存贮进程USP_ORGDelUSP _ORG_Del_Employee
用于单据查询的存贮进程USP_ORGQryUSP _ORG_Qry_Employee
用于报表核算的存贮进程USP_ORGRptUSP _ORG_Rpt_GetEmployee
用于一些特别进程处理的存贮进程USP_ORGOthUSP _ORG_Oth_SetSystemMessage
假如体系中的存贮进程只要一级,则遵从以上规矩命名,假如存在多级,则需求区别其归于哪一级,详细为:USP + 所属的级次 + _ + 后边的部分
例如:
1.USP1_ORG_Add_Subject  (没有调用其它存贮进程)
2.USP2_ORG_Upt_Subject  (调用了第1级的存贮进程)
3.USP3_ORG_Qry_Subject  (调用了第2级的存贮进程)
2.2规划标准
在存贮进程中有必要阐明以下内容:
意图:阐明此存贮进程的效果。
作者:初次创立此存贮进程的人的名字。在此请运用中文全名,不答应运用英文简称。
创立日期:创立存贮进程时的日期。
修正记载:
修 改记载需包括修正次序号、修正者、修正日期、修正原因,修正时不能直接在本来的代码上修正,也不能删去本来的代码,只能先将本来的代码注释掉,再从头添加 正确的代码。修正次序号的方式为:log1,log2,log3。。。,依据修正次数次序添加,一起在注释掉的本来的代码块和新增的正确代码块前后注明修 改次序号。
对存贮进程各参数及变量的中文注解。
示例如下:
/*
意图:依据部分与物料和管帐区间查询出产现场领料汇总报表
作者:李奇
创立日期:2002-12-11
*/
/*
修正次序号:log1
修正者:刘敏
修正日期:2002.12.22
修正原因:(详细原因详细描绘)
*/
CREATE PROCEDURE [dbo].[USP_GetLMSSum]
@ProductionType int=1, 出产类型(1-克己;0-委外加工)
@DeptID int=0,  出产部分
@ItemID int=0,  物料
@StartDate datetime=2002-11-26,管帐区间开端日期
@EndDate datetime=2002-12-25管帐区间截止日期
AS
/*
log1 old
克己领料
INSERT INTO #LMSDts
SELECT dbo.iStockBill.DeptID, dbo.fDept.DeptName,
  dbo.mLMS.ItemID AS ItemInterID, dbo.fItem.ItemID, dbo.fItem.ItemName,
  ISNULL(dbo.fItem.Model, N) AS Model, ISNULL(dbo.fUnit.UnitName, N)
  AS UnitName, dbo.mLMS.Qty, dbo.mLMS.TransType, dbo.mWO.OrderType,
  dbo.mLMS.CreateTime
end log1 old
*/
log1 new
克己领料
INSERT INTO #LMSDts
SELECT dbo.iStockBill.DeptID, dbo.fDept.DeptName,
  dbo.mLMS.ItemID AS ItemInterID, dbo.fItem.ItemID, dbo.fItem.ItemName,
  ISNULL(dbo.fItem.Model, N) AS Model, ISNULL(dbo.fUnit.UnitName, N)
  AS UnitName, dbo.mLMS.Qty, dbo.mLMS.TransType, dbo.mWO.OrderType,
  dbo.mLMS.CreateTime
end log1 new
3 视图命名标准
3.1命名标准
视图的命名请遵从以下命名标准:UV _ + 体系模块缩写(与表前缀相似)+_ + 功用标识 + 代表视图查询的首要表名(不带前缀)或功用的英文单词或英文单词缩写。
假如一个视图只对一个表进行查询,主张视图的称号就用视图所查询的表的表名(不带前缀)。这样有利于依据表名找到相应的视图。
为了在很多的视图中能很快的找到并保护视图,咱们按其效果将体系的视图
进行以下的分类及命名:(以下示例假定视图地点的模块名为ORG)
效果榜首前缀第二前缀名
(功用标识)示例
用于单据查询的视图UV_ORGQryUV_ORG_Qry_Employee
用于报表核算的视图UV_ORGRptUV_ORG_Rpt_GetEmployee
用于一些特别进程处理的视图UV_ORGOthUV_ORG_Oth_SetSystemMessage
假如体系中的视图只要一级,则遵从以上规矩命名,假如存在多级,则需求区别其归于哪一级,详细为:UV + 所属的级次 + _ + 后边的部分
例如:
UV1_ORG_Add_Subject  (没有调用其它视图)
UV2_ORG_Upt_Subject  (调用了第1级的视图)
UV3_ORG_Qry_Subject  (调用了第2级的视图)
3.2 规划标准
在视图中有必要阐明以下内容:
意图:阐明此视图的效果。
创立者:初次创立此视图的人的名字。在此请运用中文全名,不答应运用英文简称。
修正者、修正日期、修正原因:假如有人对此视图进行了修正,则有必要在此视图的前面加注修正者名字、修正日期及修正原因。
对视图各参数及变量的中文注解。
示例如下:
/*
意图:查询本月所要训练的科目
创立:加菲猫
时刻:2001-3-3
修正者:Dyan 修正日期:2002-12-11 
修正原因及内容:学员不需求训练,将不需求训练的课程去掉。
修正者:周明 修正日期:2002-4-2 
修正原因及内容:添加一门新课程
*/
CREATE VIEW dbo.USP_AddSubject
AS
SELECT SubjectIId AS 课程编号
FROM dbo.ZfLocaleDecide
3.3 存储进程和业务处理
假如业务处理在存储进程回来时的嵌套层次与履行时的层次不同,SQL Server会显现信息提示业务处理嵌套失控。因为存储进程并不反常停止该批处理,在履行和承认随后的句子时,进程内的rollback tran 会导致数据完好性丢失。
在编写存储进程时,应恪守以下准则:
1.进程对@@trancount应无净改动。
2.仅当存储进程宣布begin tran句子时,才宣布rollback tran。
3.4 其他留意事项
存储进程应该坚实牢靠的,因为它们是驻留在服务器中,被频频运用的。应仔细查看参数的有效性,并在有问题时回来犯错信息。应确保参数的数据类型和被比较的栏的数据类型匹配,然后防止数据类型匹配过错。在每个SQL句子之后要查看@@error。
4触发器编码标准
4.1命名标准
触发器名为相应的表名加上后缀
Insert触发器加_i,Delete触发器加_d,Update触发器加_u,如:r_bch_i,r_bch_d,r_bch_u。
4.2 规划标准
在触发器中有必要阐明以下内容:
意图:阐明此触发器的效果。
创立者:初次创立人的名字。在此请运用中文全名,不答应运用英文简称。
修正者、修正日期、修正原因:假如有人对此视图进行了修正,则有必要在此视图的前面加注修正者名字、修正日期及修正原因。
对其间各参数及变量的中文注解。
4.3典范
下面经过一个比如,阐明触发器编程中应恪守的标准:
/* delete related r_a according to deleted table */
CREATE TRIGGER r_a_d ON r_a
  FOR DELETE
AS
IF @@ROWCOUNT = 0 -no rows deleted
  RETURN
/* delete r_b table related to deleted table */
DELETE r_b
  FROM r_b b, deleted d
  WHERE b.id=d.id
IF @@ERROR != 0
BEGIN
  RAISERROR("Error occurred deleting related records", 16, 1)
  ROLLBACK TRAN
END
RETURN
作以下几点阐明:
1.查看是否有行被修正。留意:不管数据是否被修正,触发器都会引发,履行状况取决于T-SQL句子的履行,而和任何潜在的where子句是否履行无关。
2.因为被删去行在该表中不再可用,所以应在被删去的表中查看。
3.查看T-SQL句子的回来代码,以捕获任何犯错条件。
4.4 业务进程中的触发器
1.触发器内的rollback将一切作业回来至最外层的begin tran,完结触发器内的处理并反常停止当时的批处理。
2.不能够从触发器内部回来至某个已命名的业务进程,这将发作运转过错,挂起一切作业并停止批处理。
5 SQL言语编码标准
5.1一切要害字有必要大写。
如:INSERT、UPDATE、DELETE、SELECT及其子句。
IF……ELSE、CASE、DECLARE等。
一切函数及其参数中除用户变量以外的部分有必要大写。
在界说变量时用到的数据类型有必要小写。
一切要害字有必要大写
5.2注释
注释能够包括在批处理中。在触发器、存储进程中包括描绘性注释将大大添加文本的可读性和可保护性。本标准主张:
1、注释以英文为主。
实践运用中,发现以中文注释的SQL句子版别在英文环境中不可用。为防止后续版别履行进程中发作某些反常过错,主张运用英文注释。
2、注释尽或许详细、全面。
创立每一数据目标前,应详细描绘该目标的功用和用处。
传入参数的意义应该有所阐明。假如取值规模断定,也应该一起阐明。取值有特定意义的变量(如boolean类型变量),应给出每个值的意义。
3、注释语法包括两种状况:单行注释、多行注释
单行注释:注释前有两个连字符(),最终以行尾序列(CR-LF)完毕。一般,对变量、条件子句能够选用该类注释。
多行注释:符号/*和*/之间的内容为注释内容。对某项完好的操作主张运用该类注释。
4、注释简练,一起应描绘明晰。
5函数注释:
编写函数文本如触发器、存储进程以及其他数据目标时,有必要为每个函数添加恰当注释。该注释以多行注释为主,首要结构如下:
/************************************************************************
*name  :  函数名
*function :  函数功用
*input  :  输入参数
*output  :  输出参数
*author  :  作者
*CreateDate  :  创立时刻
*UpdateDate  :  函数更改信息(包括作者、时刻、更改内容等)
*************************************************************************/
CREATE PROCEDURE sp_xxx
5.3条件履行句子if…else
条件句子块(statenemt block,以 begin…end为鸿沟)仅在if子句的条件为真时才被履行。
为进步代码的可读性,主张嵌套不多于5层。还有,当嵌套层次太多时,应该考虑是否能够运用case句子。
5.4重复履行while和跳转句子goto
需 要屡次履行的句子,能够运用while结构。其间,操控while循环的条件在任何处理开端之前需求先履行一次。循环体中的保存字break无条件的退出 while循环,然后持续处理后续句子;保存字continue从头核算while条件,假如条件为真,则从循环开端处从头履行各句子。
运用跳转句子goto和标签label也能够便利地完成循环和其他更灵敏的操作。SQL SERVER仅具有单通道语法分析器,因而不能解析对没有创立的目标所做的前向参阅。换言之,跳转到某标签的后续句子应该是可履行的(如不存在或许没有创立的数据目标)。
5.5书写格局
数据库服务器端的触发器和存储进程是一类特别的文本,为便利开发和保护,进步代码的易读性和可保护性。标准主张依照分级缩进格局编写该文本。
次序履行的各指令坐落同一级;条件句子块(statenemt block,以 begin…end为鸿沟)坐落下一级,类推。
SQL 句子是该文本的主体。为习惯某些教杂乱的用户需求,SQL句子或许比较巨大。为便利阅览和保护,标准主张依照SQL句子中体系保存字的要害程度再划分为三 级。详细分级请参照下表。其间,非体系保存字(如字段名、数据表名、标点符号)相对本级保存字再缩进一级。多个接连的非保存字能够分行书写,也能够写在同 一行。当WHERE包括的条件子句教杂乱时,应该每行只写一个条件分句,并为重要的条件字句填写单行注释。
在确保根本缩进格局的前提下,能够经过对齐某些重要要害字(如条件要害字AND、OR,符号 = 、 等)来进一步进步文本的易读性和可保护性。
相邻两级的缩进量为10个空格。这也是ISQL编辑器默许的文本缩进量。别的,在ISQL编辑器中,一个TAB键也相当于10个空格。

6数据目标的国际化
6.1关于数据目标的命名
数据目标和变量的命名一概选用英文字符。制止运用中文命名。其他命名留意事项和标准请参阅2命名规矩。
6.2关于RAISERROR
SQL SERVER 体系的RAISERROR指令能够把某个犯错状况回来给调用进程,这对阐明调用进程的履行状况很有必要;一起能够部分防止客户端的冗余操作。别的,结合系 统存储进程sp_addmessage和sp_dropmessage能够便利完成数据目标在SQL SERVER端的国际化。
SQL SERVER的MASTER数据库中有过错信息数据表sysmessages,专门用于存储体系和用户的过错提示及相关信息(如过错ID号、过错等级、状 态)。用户能够调用sp_addmessage和sp_dropmessage预先将各类过错信息记入该数据表。其间,不同的过错信息用过错ID号区别。 在编写存储进程代码时,调用RAISERROR函数从过错信息表sysmessages中引证相关过错ID号的过错信息。
因为0~50000的值是保存为 SQL SERVER运用的,所以用户自界说过错信息的过错ID号有必要大于50000。
RAISERROR的语法如下:
RAISERROR ({msg_id | msg_str}, severity, state )
本标准主张存储进程以RAISERROR和RETURN回来。
举例如下:
l榜首步:生成该过错信息
/*insert a error message into the master..sysmessages*/
sp_addMessage 50001 ,16 ,Can"t update the primary key from table %s
l第二步:履行存储进程sp_xxx,反常回来时引证上述过错信息
CREATE PROCEDURE sp_xxx
BEGIN

RAISERROR(50001 ,16 ,1 ,r_a) Can"t update the primary key from table r_a
ROLLBACK TRAN
RETURN(1)
END
l第三步:在DELPHI调用中,经过EDBEngineError捕捉该过错
  try
sp_test.execProc ;
  except
  on e :EDBEngineError
if e.errors[1].errorcode = 13059 then
  /*hint Can"t update the primary key from table r_a*/
  showMessage(e.errors[1].message)
  end ;
l第四步:当不再运用该过错信息时,应该从过错信息表中删去相应数据
sp_dropMessage 50001
l第五步:过错提示信息国际化
用相应言语替换master..sysmessages表中用户自界说的过错音讯即可。
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表众发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    Oracle 简略运用huabian

    运用,数据库,用户
  • 3
  • 4
  • 5

    MySql标准fenghuang

    标准,进程,修正
  • 6

    数据库相关itjob

    触发器,时刻
  • 7
  • 8
  • 9

    oracle extractITeye环球

    部分,类型,时分
  • 10