U8数据库开发规范二次开发Word文件下载.docx
- 文档编号:20036479
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:14
- 大小:23.02KB
U8数据库开发规范二次开发Word文件下载.docx
《U8数据库开发规范二次开发Word文件下载.docx》由会员分享,可在线阅读,更多相关《U8数据库开发规范二次开发Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
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
变长字符型,<
8000字节,普通的字符型均采用
text
txt
t或c
文本型,存储大量文字,备注文件等
nchar
nch
定长的Unicode类型字符数据,<
4000中文字节
nvarchar
变长的Unicode类型字符数据,<
ntext
Unicode类型文本,可存储2^30-1(2,147,483,647)个Unicode字符
二进制
bit
b
逻辑型,0:
假,1:
真
binary
bin
定长的二进制数据类型,〈8000个字节
varbinary
变长的二进制数据类型,〈8000个字节
image
img
图像,office,视频,音频等
日期
datetime
dtm
d
日期和时间。
需要精确定位时间时使用,8个字节
int
i
整型(-2^31~2^31),用于一般数字型
bigint
长整型(-2^63~2^63),
浮点数
float
flot
f
浮点(-1.79E+308~1.79E+308)
Decimal
dcm
原系统都是用i表示
定点精度和小数位数。
使用最大精度时,有效值从-10^38+1到10^38-1
money
mny
m
金钱类型,定点精度和小数位数。
特殊类型
Uniqueidentifier
guid
uid
一个全局唯一的标识号
Cursor
cur
游标
时间戳
Timestamp
UFTS
字段名称为:
UFTS,没有前后缀。
特殊字段,特殊含义字段命名规范
项目
规则
单据及相关数据的唯一ID
nvarchar,Char,
uniqueidentifier
chr_____ID
c____ID
单据主键ID;
在表中使用的GUID类型数据;
编码
nvarchar,Char
chr____Code
chr____NO
c____Code
c____NO
单据号
有规则的编码
名称
chr____Name
c____Name
字段的名称(如商品名称,客户名称)
金额
float,Decimal
flot____Amount,
dcm____Amount
各种金额表示
数量
flot____Quantity,
dcm____Quantity
f____Qty
dcm____Qty
i____Qty
各种数量表示
价格
flot____Price,
dcm____Price
各种价格
作废
Bit,int,tinyint
bit____NoUsed
各种作废标志
审核
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
……………………………………………………
/*
在库品待检表
@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,
)ASsInQty,CONVERT(NVARCHAR(400),'
)ASsInNum,--预计入
)ASsOutQty,CONVERT(NVARCHAR(400),'
)ASsOutNum,
)ASsBInQty,CONVERT(NVARCHAR(400),'
)ASsBInNum,
)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
对数据的操作
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类型
CN
简体中文
TW
繁体中文
EN
英文脚本
SYS_STR_EFNF_WF_NL.SQL表示该脚本内容与语言无关。
DATA_DATA_EFNF_MIX_CN.SQL表示该脚本内容修改的是简体中文的数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- U8 数据库 开发 规范 二次开发