U8数据库开发规范二次开发.docx
《U8数据库开发规范二次开发.docx》由会员分享,可在线阅读,更多相关《U8数据库开发规范二次开发.docx(16页珍藏版)》请在冰点文库上搜索。
![U8数据库开发规范二次开发.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/1222a2f8-07e1-4fa0-9d18-d1c786f652a8/1222a2f8-07e1-4fa0-9d18-d1c786f652a81.gif)
U8数据库开发规范二次开发
U8二次开发数据库开发规范
一、数据库命名规则
1.表、视图、存储过程、用户定义的函数、索引
✧前缀尽量大写;
✧使用英文命名;
✧尽量用完整的词,单词的第一个字母大写;对象的名称应尽量表明具体使用的含义
下表XX代表对象内容。
数据库对象
前缀
示例
备注
数据表
一般表
产品号_名称
GL_AccVouch
IA_Summary
MPS_Schedule
产品业务数据表
系统数据表
UA_XX
UA_Menu
系统元数据,系统参数,业务流程参数等的数据集合。
索引
主键索引
PK_表名
pk_bom_bom
BOM资料表上主键索引
非主键索引
IX_表名_XX
或
I_表名_XX
IX_AppVouchs_ID
IX_IA_Subsidiary_ID_cVouType
I_bom_bom_identcode
约束
外键约束
FK_表名_字段名_其他
FK__UA_Log__cAcc_Id
默认值约束
DF_名称_XX
DF__bom_bom__Status__27A
唯一约束
UQ_表名_XX
UQ_UA_Group_CGroup_ID
视图
视图
v_产品号_XX
或
VW_产品号_XX
V_IA_rdrecords01
V_mom_moallocatevw_APAR_detail_CM
存储过程
存储过程
SP_产品号_XX
SP_XX
SP_ST_Etl_RDDetail
sp_SAReceive
自定义函数
自定义函数
FN_产品号_XX
FN_ua_group_withuser
触发器
触发器
TR_产品号_XX
不建议使用
自定义类型
自定义类型
UD_产品号_XX
2.表、视图等字段命名
表、视图中字段都用英文命名,一般字段命名规则如下:
✧数据类型的简写为小写字母前缀;
✧后面是该字段的名称描述,应尽量表明字段含义、使用完整单词;
如果名称描述多个单词组成,每个单词的第一个字母都大写
✧具有特殊含义的后缀结尾。
例:
iMaxInCost(存货总账-最小入库成本单价 )
||_____________含义,;单词第一个字母大写
|_________________数据类型是浮点数(目前大多数使用Decimal)
数据类型规范:
数据类型
缩写
简写
使用说明
字符类型
char
chr
c
定长字符型,<8000字节,字符使用
varchar
chr
c
变长字符型,<8000字节,普通的字符型均采用
text
txt
t或c
文本型,存储大量文字,备注文件等
nchar
nch
c
定长的Unicode类型字符数据,<4000中文字节
nvarchar
chr
c
变长的Unicode类型字符数据,<4000中文字节
ntext
txt
t或c
Unicode类型文本,可存储2^30-1(2,147,483,647)个Unicode字符
二进制
bit
bit
b
逻辑型,0:
假,1:
真
binary
bin
bin
定长的二进制数据类型,〈8000个字节
varbinary
bin
bin
变长的二进制数据类型,〈8000个字节
image
img
img
或
bin
图像,office,视频,音频等
日期
datetime
dtm
d
日期和时间。
需要精确定位时间时使用,8个字节
int
int
i
整型(-2^31~2^31),用于一般数字型
bigint
bin
i
长整型(-2^63~2^63),
浮点数
float
flot
f
浮点(-1.79E+308~1.79E+308)
Decimal
dcm
dcm
原系统都是用i表示
定点精度和小数位数。
使用最大精度时,有效值从-10^38+1到10^38-1
money
mny
m
金钱类型,定点精度和小数位数。
特殊类型
Uniqueidentifier
guid
uid
一个全局唯一的标识号
Cursor
cur
cur
游标
时间戳
Timestamp
UFTS
UFTS
字段名称为:
UFTS,没有前后缀。
特殊字段,特殊含义字段命名规范
项目
数据类型
规则
备注
单据及相关数据的唯一ID
nvarchar,Char,
uniqueidentifier
chr_____ID
或
c____ID
单据主键ID;
在表中使用的GUID类型数据;
编码
nvarchar,Char
chr____Code
chr____NO
或
c____Code
c____NO
单据号
有规则的编码
名称
nvarchar,Char
chr____Name
或
c____Name
字段的名称(如商品名称,客户名称)
金额
float,Decimal
flot____Amount,
dcm____Amount
各种金额表示
数量
float,Decimal
flot____Quantity,
dcm____Quantity
或
f____Qty
dcm____Qty
i____Qty
各种数量表示
价格
float,Decimal
flot____Price,
dcm____Price
各种价格
作废
Bit,int,tinyint
bit____NoUsed
各种作废标志
审核
Bit,int,tinyint
i____Audit
审核标志
备注
Nvarchar,text
chr____Notes
c____Notes
txt____Notes
备注信息
注:
以前有些不是按以上规则设计的,今后再添加的请按这些规则添加。
●数据类型的选用
Ø尽可能使用变长类型(除非数据列长度的确是固定的)。
变长类型只存储列中实际含有的内,检索需要扫描的页会减少。
Ø创建字符类型字段请使用UNICODE数据类型字段,使用nvarchar、nchar、ntext替换varchar、char、text类型,在插入和查询时候使用N’’。
二、
数据库语言规范
1.触发器规范
由于数据表触发器容易产生很多数据库问题,一般情况下禁止使用触发器。
请使用系统API的前后事件进行代码编程。
2.视图规范
●不能在视图上创建视图,视图不能产生视图;
●禁止通过视图修改数据;
●禁止修改系统视图;
●用注释说明视图的作用;
●应尽量使用SQLServer的视图生成器产生视图;
●视图中不要有ORDERBY排序语句;
●视图中不要使用UNION联合视图;
●禁止使用“Select*from……”,“SelectT.*……”等语句;
●注意缩进,格式清楚;
●所有关键字要大写;
●字段逗号,运算符等操作符之间有空格相隔;
例子:
CREATEVIEW[dbo].[V_IA_rdrecords32]
/*
销售出库单未记账单据
*/
AS
SELECTRdrecord.bRdFlag,rdrecord.CBusType,Rdrecord.cBusCode,
Rdrecord.ccodeAScVouCode,rdrecords.AutoIDASID,
Rdrecords.iquantity,rdrecords.iunitcost,rdrecords.iprice,
Rdrecords.cVouchCodeAScBatchCode,
Rdrecords.cbaccounterAScAccounter,rdrecord.cMaker,
CAST(NULLASTINYINT)ASbFlag,CAST(NULLASBIT)ASbMoneyFlag,
(CASEWHENrdrecord.cVouchType=N'32'THEN1ELSE0END)asbSale,
rdrecord.cDefine1,rdrecord.cDefine2,rdrecord.cDefine3,rdrecord.cDefine4,
..........................................................
FROMrdrecords32RdrecordsINNERJOINrdrecord32rdrecordONrdrecords.id=rdrecord.idandisnull(rdrecords.cbaccounter,'')=''
LEFTJOINWareHouseONWareHouse.cWhcode=rdrecord.cWhCode
LEFTJOINSO_SODetailsONrdrecords.iorderdid=SO_SODetails.isosidAndrdrecords.iordertype=1--销售订单
LEFTJOINSO_SOMainONso_sodetails.id=so_somain.id
..................................................................................
3.存储过程规范
●编写存储过程原则
✧将每个存储过程完成一项单独的任务;
✧存储过程可以调用存储过程;
✧存储过程可以调用自定义函数;
✧存储过程中禁止使用全局性质的临时表;
●代码书写规范
✧在创建存储过程的开始处应有注释,
说明该存储过程的功能,存储过程的输入、输出参数的含义。
✧对于存储过程中功能相对独立的SQL代码段给出注释描述功能用途;
✧尽量保证SQL语句的执行顺序,对于每一次的执行单元应尽量保持先读后写的顺序;
✧所改变的SQLServer的系统参数,设置应在退出存储过程时还原(如SETNOCOUN等);
✧关键字应尽量保持大写;
✧字段逗号,运算符等操作符之间有空格相隔;
✧注意缩进,保持存储过程的可读性;
✧输入、返回参数命名应尽量规则:
前缀为参数数据类型的简写,主体是参数描述
常用数据类型简写如下:
inti,charchr,nvarcharvch等可参照数据类型规范,参数描述使用英文,单词的第一个字母大写;
例子:
CREATEPROCEDURE[dbo].[SP_ST_StockInspect]@QueryDatedatetime='2003-11-1',
@QueryConditionnvarchar(4000)=N'',
@ComUnitNoint=1
……………………………………………………
AS
/*
在库品待检表
@QueryDate查询日期
@QueryCondition查询条件
@ComUnitNo第几辅计量编号
……………………………………………………
*/
SETNOCOUNTON
DECLARE@strSqlNVARCHAR(4000)
DECLARE@strSql1NVARCHAR(4000)
DECLARE@sQtyasNVARCHAR(4000)
SET@strSql=N'execPrc_SCM_GetStockFuc_ST'
SELECTCONVERT(NVARCHAR(400),'')ASsQty,
CONVERT(NVARCHAR(400),'')ASsNum,
convert(nvarchar(400),'')ASsBQty,CONVERT(NVARCHAR(400),'')ASsBNum,
convert(nvarchar(400),'')ASsInQty,CONVERT(NVARCHAR(400),'')ASsInNum,--预计入
convert(nvarchar(400),'')ASsOutQty,CONVERT(NVARCHAR(400),'')ASsOutNum,
convert(nvarchar(400),'')ASsBInQty,CONVERT(NVARCHAR(400),'')ASsBInNum,
convert(nvarchar(400),'')ASsBOutQty,CONVERT(NVARCHAR(400),'')ASsBOutNum
INTO#tmpFucwhere1=0
EXECUTESP_EXECUTESQL@strSql
SELECT@sQty=sQty,@snum=sNum,@sbatchQty=sBQty,@sbatchnum=sBNumFROM#tmpFuc
set@iPreDays=(selectisnull(cvalue,0)fromaccinformationwherecname=N'iPreInspectDays')
set@iYQDays=(selectisnull(cvalue,0)fromaccinformationwherecname=N'iYQInspectDays')
……………………………………………………………………………………..
SETNOCOUNTOFF
4.自定义函数规范
●自定义函数的代码与注释书写规范类似于存储过程;
●自定义函数应看作除了SQL语句外最小执行单位;
●自定义函数中不能调用存储过程;
●自定义函数中只能对表进行操作,不允许对视图进行操作;
●如果自定义函数返回的是数据集,数据量较大时,尽量使用Join语句关联查询,少时用IN条件语句;
●自定义函数尽量不要用到条件列、查询列中,因为要进行全表数据计算,影响查询性能,可以用于查询条件中,尽量用于查询条件右侧,使用固定值。
例子:
ALTERFUNCTION[dbo].[FN_GetLastBOM](@PartIdint,@CurDatevarchar(20))
/*
得到最后版本的BOMID
@PartId母件物料Id
@CurDate版本生效日期
*/
RETURNSint
AS
BEGIN
declare@BomIDasint
selecttop1@BomID=b.bomidfrombom_parentpinnerjoinbom_bombonp.bomid=b.bomid
wherep.ParentId=@PartIdand@CurDatebetweenb.VersionEffDateandb.VersionEndDate
orderbyb.VersionEffDatedesc
if@BomIDisnull
set@BomID=-1
RETURN(@BomID)
END
5.索引规范
●创建索引原则:
Ø在经常作为条件搜索的列上创建索引;
Ø保持索引中的数据量尽可能的少。
Ø在主键上创建索引;
Ø在关键、经常使用的外键上创建索引;
Ø检索方式比较复杂时,应考虑创建复合索引,SQL2005以上可以创建包含性索引。
在创建复合索引时,应该仔细考虑列的顺序。
对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引才起作用;仅对后面的任意列执行搜索时,复合索引则没有用处。
特别注意:
考虑到执行速度,代码维护,代码的不可控等因素,数据库升级的兼容性等很多方面,一般情况下禁止使用“Select*from……”;
三、
U8开发之脚本文件规则
数据库脚本文件是U8中对数据库操作语句汇总,通过编写脚本更改数据库元素达到增加新功能、修改BUG的目的。
U8中脚本文件的命名、具体存放位置需要遵循一定的规范,以划分不同类型的脚本,方便编写、阅读、运行和管理。
Ø什么是脚本文件?
在开发中经常需要对数据库进行操作,如:
增加表、字段,存储过程、触发器,修改表、字段、存储过程、触发器,修改数据等。
这些SQL语句都统一存放在脚本文件中。
主要脚本文件:
结构脚本:
对表结构的增删改脚本。
视图脚本:
对视图的增删改脚本。
存储过程:
对存储过程、触发器、函数的增删改脚本。
数据脚本:
对表数据的增删改脚本。
Ø文件命名规范的目标
本文主要介绍脚本文件的命名规则,不符合规则的命名会导致脚本执行出错,遵守同一命名规则也方便管理开发过程中的所有数据库脚本。
Ø脚本文件如何命名?
脚本文件的命名规则如下:
数据库_SQL类型_产品_业务类型_语言.sql
1.脚本文件中执行数据库命名规范
脚本名称中的数据库部分表示该脚本文件在哪个数据库中执行,具体值如下。
表示
说明
SYS
UFSystem数据库
DATA
账套库,UFDATA开头的数据库
META
元数据库,UFMeta开头的数据库(V8.70以后版本有元数据库)
UTU
UTU数据库(V11.0以后版本有UTU数据库)
WorkFlow
U8WorkFlow数据库(V8.70至V8.90版本有U8WorkFlow库,其他版本没有)
MOM
UFMOM数据库(V8.70至V8.90版本有UFMOM库,其他版本没有)
如:
SYS_STR_EFNF_MIX_NL.SQL表示该脚本在UFSystem数据库运行。
DATA_DATA_EFNF_MIX_NL.SQL表示该脚本在UFDATA开头的数据库运行。
2.脚本文件中SQL执行类型命名规范
SQL类型说明文件中存放SQL语句的类型,总共有4个类型,且有执行的优先级顺序,具体值如下:
表示
说明
执行顺序
STR
对表结构的操作
1
PRV
对视图的操作
2
PRP
对存储过程的操作
3
DATA
对数据的操作
4
如:
SYS_STR_EFNF_MIX_NL.SQL表示该脚本修改的是UFSystem数据库的表结构。
DATA_DATA_EFNF_MIX_NL.SQL表示该脚本修改的是UFDATA开头数据库的表数据。
3.脚本文件中产品与项目命名规范
表示该脚本文件隶属的产品号,值对应UFSystem库UA_SubSys_Base表的cSub_ID字段,如果二次开发的插件没有产品号,该值可以自定义,但必须是“EF”开头,如EFNF表示南孚项目,长度不能超过6位。
注意:
二次开发脚本名称中的产品不能使用U8标准产品编号,否则会出现互相覆盖现象。
如:
SYS_STR_EFXXX_MIX_NL.SQL
DATA_DATA_EFXXX_MIX_NL.SQL表示该脚本属于XXX二次开发项目。
4.脚本文件中业务类型命名规范
业务类型表示该脚本文件涉及到的业务范围,如果某一脚本只用于修改权限,使用这个字段进行区分,具体值如下:
表示
说明
Menu
菜单
FR
功能权限
DR
数据权限
Vou
单据
Col
栏目
Query
报表
Start
系统启用
WF
工作流
EAI
企业应用集成
Mix
混合类型,不做具体业务区分
自定义值
不超过5个英文字母
如:
SYS_STR_EFNF_WF_NL.SQL表示该脚本内容与工作流相关。
DATA_DATA_EFNF_MIX_NL.SQL表示该脚本内容不区分业务类型,多种业务类型的脚本放在一个脚本文件中。
5.脚本文件中多语命名规范
U8从V8.61开始支持多语言,数据库中与界面显示有关的表会包含多种语言数据,对多语言数据进行增删改时需要把sql脚本按照修改内容的语言进行区分,不同语言标识的脚本有执行的先后顺序。
具体值如下:
表示
说明
执行顺序
NL
脚本文件的内容与语言无关,STR、PRV、PRP类型的脚本语言为NL类型
1
CN
简体中文
2
TW
繁体中文
3
EN
英文脚本
4
如:
SYS_STR_EFNF_WF_NL.SQL表示该脚本内容与语言无关。
DATA_DATA_EFNF_MIX_CN.SQL表示该脚本内容修改的是简体中文的数据。