数据库开发规范_第1页
数据库开发规范_第2页
数据库开发规范_第3页
数据库开发规范_第4页
数据库开发规范_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE5PAGE15项目一部数据库开发规范版本号日期修改者说明1.02023-03-06注:对该文件内容增加、删除或修改均需填写此变更记录,详细记载变更信息,以保证其可追溯性。新建的表,存储过程,包等要遵循以下规则对象名称前缀备注表见下表,根据功能分视图v主键pk索引idx序列seq存储过程pr包pk函数f同义词s数据库连接(dblink)dl表名不得超过30个字母,全部采用大写字母,表的命名可以如下:模块缩写名表的名称,如RESNODE代表资源模块的节点;值班:DUTYCALENDAR。字段名不得超过30个字母,必须以英文单词构成,每个单词之间以下划线隔开,全部采用大写字母。对复杂的大型应用系统而言,必须建立表名和字段名的数据字典,并附于开发规范附录中,在命名时必须严格遵守数据字典。数据库所有对象,包括表、视图、主键、索引、序列、存储过程、包等必须在数据库建模工具中进行管理并保持与数据库完全同步。在数据库模型、数据库脚本中,所有对象,包括表、视图、主键、索引、序列、存储过程、包等名称必须大写。为了保持可移植性,尽量不使用某种数据库的特有功能,如SQLServer专用的UniqueID,Oracle专用的Sequence的功能;在SQL语句中,LIKE关键字支持通配符匹配,但这种匹配特别耗费时间。如:SELECTAFROMABCWHEREALIKE'M%'。在A字段上建立了索引。把语句改为SELECTAFROMABCWHEREA>'M'ANDA<'N',在执行查询时会利用索引以提高响应速度。使用*通配符必须事先征得项目开发负责人同意。使用distinct会增加查询和I/O的操作次数。应当避免使用distinct关键字。SELECTAFROMCMSUSERWHEREUSERNAMEIN(SELECTUSERNAMEFROMCMSDEPARTMENTWHEREDEPARTMENT=’电子办’)如果我们用连接来代替,且表关联放在条件语句的最后部。即:SELECTAFROMCMSUSER,CMSDEPARTMENTWHERECMSDEPARTMENT.DEPARTMENT=’电子办’ANDCMSDEPARTMENT.USERNAME=CMSUSER.USERNAME将提高一定的效率。查询嵌套层次越多,效率越低。应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。利用索引自动以适当的次序输出时,可以避免对表中数据排序,当以下的情况发生时,排序就不能省略:索引中不包括一个或几个待排序的列;groupby或orderby子句中列的次序与索引的次序不一样;排序的列来自不同的表。正确地增建索引、合理地合并数据库表,可以避免不必要的排序。如果排序不可避免,那么应当试图简化它,如缩小排序列的范围等。如果不过滤多表中的重复数据,请使用UNIONALL;如果过滤多表中的重复数据,请使用UNION。避免使用很长、很复杂的查询语句,如果有特殊需求必须书写较长的SQL语句,应该把语句分解成若干部分,每一部分形成一个存储过程或函数。大表分区:超过1G的表尽可能使用分区,分区的原则和尽可能和维护该表的机制结合起来。比如:保留10天数据,每天删除10天前的一天数据,在删除数据的时候,可以采用采用altertabletablenametruncatepartitionpartitionname,而后altertabletablenamedroppartitionpartitionname;这里不直接使用drop的原因是减小数据库的开销。Truncate是在秒的级别中完成。在条件语句中,如Wherea.s=b.c中将记录少的表放在等号的前部。表关联条件放在语句的最后部。不使用容易与系统关键字重复的单词来命名,如ID,DATE等,但可以使用如NODEID,BUYDATE等可以来命名;SQL语句用大写字母(字段中的内容除外);编写ddl和dml时,每个语句后面必须加上分号;对于定期增加性的性能数据表,必须建立有效的索引;查询语句的Where语句必须落在索引上。RBO(rule-basedoptimizer)CBO1)2张行数不一致的表连接表TAB1行数:16,384行表TAB2行数:1行×SELECTCOUNT(*)FROMTAB2,TAB1;○SELECTCOUNT(*)FROMTAB1,TAB2;2)3张表连接×SELECT*FROMEMPE,LOCL,CATCWHEREE.empno BETWEEN1000AND2023ANDE.catno =C.catnoANDE.locn =L.locn;○SELECT*FROMLOCL,CATC,EMPEWHEREE.empno BETWEEN1000AND2023ANDE.catno =C.catno ANDE.locn =L.locn;使用索引引起的where语句效率使用AND语句时行数多的放在前面×SELECT*FROMempEWHEREempsal>50000ANDemptype='MANAGER'AND25<(SELECTCOUNT(*)FROMEMPWHEREempmgr=E.empno);○SELECT*FROMempEWHERE25<(SELECTCOUNT(*)FROMEMPWHEREempmgr=E.empno)ANDempsal>50000ANDemptype='MANAGER';使用OR语句时,行数多的放在后面×SELECT*FROMempEWHERE25<(SELECTCOUNT(*)FROMEMPWHEREempmgr=E.empno)OR(empsal>50000ANDemptype='MANAGER');○SELECT*FROMempEWHERE(empsal>50000ANDemptype='MANAGER')OR25<(SELECTCOUNT(*)FROMEMPWHEREempmgr=E.empno);2)ROWID的使用使用ROWID的WHERE语句效率最高。SELECTROWID,...INTO:emprowid,...FROMempWHEREemp.empno=56722FORUPDATE;UPDATEempSET=...,WHEREROWID=:emprowid; 3)减少访问次数×SELECTempname,sal,gradeFROMempWHEREempno=0342;SELECTempname,sal,gradeFROMempWHEREempno=0291;○SELECTA.empname,A.sal,A.grade,B.empname,B.sal,B.gradeFROMempA,empBWHEREA.empno=0342 ANDB.empno=0291; 4)Where语句的索引的使用 (1)SUBSTR×SELECTaccname,transdate,amountFROMtransactionWHERESUBSTR(accountname,1,7)='CAPITAL';○SELECTaccname,transdate,amountFROMtransactionWHEREaccountnameLIKE'CAPITAL%'; (2)!=×SELECTaccname,transdate,amountFROMtransactionWHEREamount!=0;○SELECTaccname,transdate,amountFROMtransaction WHEREamount>0;(3)TRUNC×SELECTaccname,transdate,amountFROMtransactionWHERETRUNC(transdate)=TRUNC(SYSDATE);○SELECTaccname,transdate,amountFROMtransactionWHEREtransdateBETWEENTRUNC(SYSDATE)ANDTRUNC(SYSDATE)+.99999;(4)||×SELECTaccname,transdate,amountFROMtransactionWHEREaccname||acctype='AMEXA'; ○SELECTaccname,transdate,amountFROMtransactionWHEREaccname='AMEX' ANDacctype='A'; (5)运算×SELECTaccname,transdate,amountFROMtransactionWHEREamount+3000<5000; ○SELECTaccname,transdate,amountFROMtransaction WHEREamount<5000+3000;×SELECTCOUNT(*),SUM(salary)FROMempWHEREdeptno=0020ANDempnameLIKE'SMITH%';SELECTCOUNT(*),SUM(salary)FROMempWHEREdeptno=0030ANDempnameLIKE'SMITH%';○SELECTCOUNT(DECODE(deptno,0020,'X',NULL))D0020count,COUNT(DECODE(deptno,0030,'X',NULL))D0030count,SUM(DECODE(dept,0020,salary,NULL))D0020sal,SUM(DECODE(dept,0030,salary,NULL))D0030salFROMemp WHEREempnameLIKE'SMITH%';×SELECTE.empno,name,taxno,Cpcode,compnameFROMcompanyC,empEWHEREEpcode=Cpcode;○SELECTE.empno,E.name,E.taxno,Cpcode,CpnameFROMcompanyC,empEWHEREEpcode=Cpcode;DELETEFROMempEWHEREE.rowid>(SELECTMIN(X.rowid)FROMempXWHEREX.empno=E.empno);SELECTCOUNT(有索引的列)FROMTRANS;SELECTCOUNT(*)FROMTRANS;SELECTCOUNT(1)FROMTRANS;×SELECTregion,AVG(locsize)FROMlocationGROUPBYregionHAVINGregion!='SYDNEY' ANDregion!='PERTH';○SELECTregion,AVG(locsize)FROMlocationWHEREregion!='SYDNEY'ANDregion!='PERTH';GROUPBYregion×SELECTempnameFROMempWHERE(empcat,salrange)=(SELECTMAX(category),MAX(salrange)FROMempcategories)ANDempdept=0020;○SELECTempnameFROMempWHEREempcat=(SELECTMAX(category)FROMempcategories)ANDsalrange=(SELECTMAX(salrange)FROMempcategories) ANDempdept=0020;×SELECT...FROMdeptD,empEWHEREE.deptno=D.deptnoANDE.emptype='MANAGER'ANDD.deptcat='A';○SELECT...FROMempEWHEREEXISTS(SELECT'X'FROMdeptWHEREdeptno=E.deptnoANDdeptcat='A')ANDE.emptype='MANAGER';×SELECT...FROMdeptD,empEWHEREE.deptno=D.deptnoAND(E.emptype='MANAGER'ORD.deptcat='A');○SELECT...FROMempEWHEREE.emptype='MANAGER';OREXISTS(SELECT'X'FROMdeptWHEREdeptno=E.deptnoANDdeptcat='A');×SELECTDISTINCTdeptno,deptnameFROMdeptD,empEWHERED.deptno=E.deptno;○SELECTdeptno,deptnameFROMdeptDWHEREEXISTS(SELECT'X'FROMempE WHEREE.deptno=D.deptno);×SELECT...FROMempWHEREdeptnoNOTIN(SELECTdeptnoFROMdept WHEREdeptcat='A');○SELECT...FROMempEWHERENOTEXISTS(SELECT'X'FROMdept WHEREdeptno=E.deptnoANDdeptcat='A');Union进行排序UnionAll不排序Locno,region上有索引×SELECT...FROMlocationWHERElocid=10ORregion='MELBOURNE';○SELECT...FROMlocationWHERElocid=10UNIONALLSELECT...FROMlocationWHEREregion='MELBOURNE';×SELECT...FROMlocationWHERElocid=10ORlocid=20ORlocid=30;○SELECT...FROMlocationWHERElocidIN(10,20,30);使用索引时,要考虑以下因素:索引列的计算索引列的增加索引列不要用NOT索引中空值的使用ISNULL,ISNOTNULL索引列的数据类型的变换EMPTYPE为varchar2类型,下列语句使用索引SELECT...FROMempWHEREemptype=123;SELECT...FROMempWHERETONUMBER(emptype)=123;SELECT...FROMempWHEREemptype='123';增加索引要考虑多种因素,要考虑对更新、插入的影响等。频繁查询不超过大表1%~15%的场合。列的不同值列列同表$>sqlplus–s/SQL>@$ORACLEHOME/rdbms/admin/utlxplan.sqlSQL>commitSQL>exit@afe57gc2/users/home/ino29>sqlplussys/****SQL>@$ORACLEHOME/sqlplus/admin/plustrce.sqlSQL>droproleplustrace;:SQL>grantplustracetoops$ino;SQL>exit@afe57gc2/oracle/product/8.1.737>sqlplus/SQL>setautotraceonSQL>select*fromwcattori;执行计划 0SELECTSTATEMENTOptimizer=CHOOSE10TABLEACCESS(FULL)OF'WCATTORI'統計0recursivecalls12dbblockgets4consistentgets0physicalreads0redosize4779bytessentviaSQL*Nettoclient314bytesreceivedviaSQL*Netfromclient1SQL*Netroundtripsto/fromclient0sorts(memory)0sorts(disk)0rowsprocessed SQL>@afe57gc2/oracle/product/8.1.740>sqlplus/SQL>ALTERSESSIONSETTIMEDSTATISTICS=true;SQL>ALTERSESSIONSETMAXDUMPFILESIZE=500;SQL>ALTERSESSIONSETSQLTRACE=true;SQL>SELECT*FROMWCATTORI;SQL>ALTERSESSIONSETSQLTRACE=false;SQL>exit@afe57gc2/users/home/ino44>suPassword:#chmod777/oracle/product/8.1.7/rdbms/log/ora14186wca1.trc#exit@afe57gc2/users/home/ino46>tkprof$ORACLEHOME/rdbms/log/ora14186wca1.trcoutput.txtTKPROF:Release.0-Productionon木Apr1815:55:172023(c)Copyright2023OracleCorporation.Allrightsreserved.備考:ログファイルの出力先SQL>columnnameformatA20SQL>columnvalueformatA30SQL>selectname,valuefromv$parameterwherenamelike'%dumpdest';NAMEVALUEbackgrounddumpdest?/rdbms/loguserdumpdest?/rdbms/logcoredumpdest?/dbsSQL>@afe57gc2/users/home/ino47>catoutput.txt(一部抜粋)SELECT*FROMWCATTORIcallcountcpuelapseddiskquerycurrentrowsParse10.000.000000Execute10.000.000000Fetch10.000.0004120total30.000.0004120Missesinlibrarycacheduringparse:0Optimizergoal:CHOOSEParsinguserid:34RowsRowSourceOperation0TABLEACCESSFULLWCATTORI

公司印章管理制度一、目的公司印章是公司对内对外行使权力的标志,也是公司名称的法律体现,因此,必须对印章进行规范化、合理化的严格管理,以保证公司各项业务的正常运作,由公司指定专人负责管理。二、印章的种类公章,是按照政府规定,由主管部门批准刻制的代表公司权力的印章。专用章,为方便工作专门刻制的用于某种特定用途的印章,如:合同专用章、财务专用章、业务专用章、仓库签收章等。3、手章(签名章),是以公司法人代表名字刻制的用于公务的印章。三、印章的管理规定印章指定专人负责保管和使用,保管印章的地方(桌、柜等)要牢固加锁,印章使用后要及时收存。财务专用章由财务部负责保管,向银行备案的印章,应由财务部会计、总经办分别保管。3、印章要注意保养,防止碰撞,还要及时清洗,以保持印迹清晰。4、一般情况下不得将印章携出公司外使用,如确实因工作所需,则应由印章管理员携带印章到场盖章或监印。5、印章管理人员离职或调任时,须履行印章交接手续。四、公章刻制印章需本公司法人代表批准,并由印章管理专责人负责办理刻制并启用并交由专人进行保管。五、印章的使用使用任何的印章,需由相应负责人审核签字。为方便工作,总经理可授权印章管理专责人审核一般性事务用印。用印前印章管理人员须认真审核,明确了解用印的内容和目的,确认符合用印的手续后,在用印登记簿上逐项登记,方可盖章。3、对需要留存的材料,盖印后应留存一份立卷归档。4、不得在空白凭证、便笺上盖章。5、上报有关部门的文件资料,未经部门经理、总经理审签,不得盖章。6、以公司名义行文,未经总经理签发,不得盖章。7、按照合同会签制度的规定,所有合同和协议在会签手续齐全后方可盖章。8、各印章管理人员如出差,应把印章移交有关人员,并办理有关交接手续。六、印章管理人员的责任1、印章管理人员要与公司签订《印章管理责任书》,并在“印章管理制度”上签名。2、印章管理人员不得擅自使用印章,对于非法使用印章者,造成经济损失的除赔偿损失外,还要追究其行政责任或法律责任。用章申请事由:部门负责人核准时间副经理核准时间总经理核准时间

“用计算器计算稍复杂的小数加、减法”教学设计[教学目标]:1、会用计算器进行一些稍复杂的小数加、减法计算。

2、让学生体验用计算器进行计算的方便与快捷,进一步培养对数学学习的兴趣,感受计算器在人们生活和工作中的价值。

[教材简析]:例题通过相对复杂的问题情境,引入用计算器计算小数加、减法,教给学生在计算器上按出整数部分是0的小数的简便按法,再用计算器解决小数加法的实际问题。“试一试”继续通过例4的问题情境,引导学生借助计算器解决小数减法的实际问题。

[教学过程]:

一、谈话导入,激发兴趣

谈话:同学们都有去超市购物的经验,购完物,营业员都能借助计算器准确、快速地算出应付的价钱,今天我们也来用计算器解决一些计算问题。

二、创设情境,解决问题

1、教学例4

(1)出示例题,理解题意。谈话:怎样用计算器算出她一共用了多少元?

(2)先让学生独立思考,然后指名回答。在全班交流中达成共识:只要把“金额”一栏的数据加起来。

(3)提问:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论