1、厦门智业软件工程有限公司.研发部ZHIS4项目组文档密级公开()普通()秘密()机密()绝密()数据库编程规范文档编号:文档归类:作 者:李程扬创建时间:2005-11-14修改时间:2005-11-15版 本 号:v1.0文档传阅:一、 数据库对象创建及命名规范1、 数据库字段及对象命名规范a. 数据库命名规范与PB编程规范对命名方式的约定可相互参照;b. 命名单词间分隔用下划线_,尽可能使用与业务相匹配的单词或其缩写;c. 绝对不允许使用拼音首码及简单数字的命名方式;d. 对于对象或字段名称长度有限
2、制,最多31个字符;2、 字段定义及类型说明a. 字段定义仅能使用以下类型i. date:日期时间类型,存入日期字段的数据若未指明时间,时间缺省就是00:00:00;若未指明日期,则日期缺省是1900-01-01;对于年份(4,0)与月份(6,0)这类数据,一般用类型定义;ii. :数值类型,字段所占空间与每一行数据相关,即有多少存多少;要注意其定义小数位是包含在总长度中,如(12,2)总长度为12位,其中小数占2位;iii. char:定长字符串类型,不论字符串信息多少都要占用所定义长度的空间,不足的部分用空格填充;对于一些更新操作
3、比效率高;长度限制为255;iv. :非定长字符串类型,字符串信息多少就占多少空间,所以对于此类型数据在存入数据库前要去空格,以防止多余空格造成字段关联错误;相比char可节省很多存储空间,某种程序上可提高网络传输效率;长度限制为4000个字符;v. clob:一般存大于4000个字节的字符串信息,如数据窗口的语法;vi. blob:一般存二进制数据,如图片;b. 对于字符串类型,除数据固定长度字段(如char(1)、),其它情况都必须使用类型;c. 对于与类型,在定义时要预留足够的长度,因为这两种类型都
4、是按实际数据来分配存储空间,这样才能避免数据需求变长,字段长度修改造成程序错误(数据窗字段及数值变量小数位定义);d. 应尽量使用类型定义代码、状态字段;相比char或,这可最大程度地节省空间,并可显著提度检索效率;当然,同类型已定义的字段,为兼容原先设计,还是必须使用旧的类型定义;e. 字段命名约定i. 字段名称不必像PB变量使用前缀来标识其数据类型;ii. 字段常用后缀如下Ø ID/No表示唯一的序列号标识;其中ID多用于表示对人或物的标识,即指的是一种标志(如);而No多用于对连续号或流水号的标识(如单据号)Ø
5、 Code表示项目代码(如项目代码)Ø Name表示名称(如项目名称)Ø Class表示类别(如单据类别)Ø 表示操作员(类型用(27),如)Ø Time表示日期或日期时间(如)Ø Dept表示科室(如开单科室)Ø Flag表示标志(字段类型用char(1),值为Y或N)Ø 表示状态(字段类型用char(1))iii. 常见业务字段名称及类型定义如下字段名字段
6、中文名字段类型说明病人(10)兼容原有设计就诊卡号(30)兼容原有设计项目代码(14)兼容原有设计(诊项或药品代码)项目名称(400)项目规格(200)类别(10)兼容原有设计单价(15,6)单位(8)兼容原有设计操作者(27)兼容原有设计科室代码(8)兼容原有设计c
7、ost/金额(15,2)单据号(12)兼容原有设计数量(15,4)备注(4000)有效标志(1,0)拼音首码(100)五笔首码(100)排序号(10,0)code代码(4,0)字典代码class类别(10,0)类别代码3、 数据库对象定义说明:创建对象时一定要指定是在哪个模式下面a. 表i. 下面列出建表步骤(一般在PB6中
8、新建表,再拷出相应建表语法)Ø 建表语法Ø 创建主键及索引Ø 创建同义词Ø 对象授权(所有新建对象都必须授权给)ii. 对于表命名有以下常用后缀Ø :主表Ø :细表Ø :记录表Ø _dict:系统字典/用户字典Ø :用户配置表iii. 不推荐使用表外键约束,也不推荐除空值以外的其它约束检查,这类约束判断一般在程序中处理;b. 主键:一种特殊的索引i. 主键名都是以pk_作为前缀,后面一部分用表名,即pk_+表名ii. 所有表都必须创建主
9、键,否则这些表就没办法做更新操作c. 索引i. 索引名以idx_作为前缀,后面一部分用表名+索引相关列名或其缩写ii. 创建索引时一定要记得指明其所在模式(一般与表在同一模式下),这一点程序员常会遗漏;iii. 索引也要区分是唯一索引还是可重复索引;iv. 要查询的列尽可能创建索引,一般不推荐使用多列组合索引,而应分开建立索引;如病人ID或查询时间字段;另外,用到组合索引时要注意索引列的顺序;v. 一个表索引最多不能超过7个,否则会影响数据更新效率,且占用存储空间,即:索引越多、查询效率高、但更新操作慢、存储占用高;vi. 对于值内容单一(如只有0与1)或大部分数据是空值的字段不用建索引;对于
10、某些数据量很少的表(如字典),也是不用建索引;d. 视图:其命名以v_作为前缀,统一建在模式下(可省去授权)e. 序列号:其命名以_seq作为后缀,统一建在模式下;主要用于数据表的主键字段取唯一值(如单据号),对于字典代码就没必要用序列号;f. 同义词:创建相应对象的同义词主要是便于编程(),做到对象模式无关g. 用户:即模式h. 函数及存储过程:除非开放接口给其它软件供应商,否则不使用这两类对象,因为包()就可代替其功能,并便于分类组织;i. 后台包/Java包:不用深入了解,知道有这些东西就可;j. 后台任务(Job):后台计划任务执行
11、,通过可查询当前在执行任务;k. 触发器:的触发器一般都认为在事务处理上不安全,所以除非特殊接口,否则不准使用触发器;二、 常用函数1、 的PL/SQL语言是对SQL的过程性语言扩展,当前的SQL语法遵循SQL92标准;2、 完整PL/SQL函数集可查阅资料..htm3、 字符串相关函数a. |:字符串合并操作符b. trim:去字符串前后空格,一定要记住存取字符串数都要调用此函数去空格c. :截取字符串的一
12、部分内容,也PB的mid函数功能一样d. :将数值型或日期型数据转化为字符类型,如(,'yyyy-mm-dd hh24:mi:ss')e. lpad/rpad:在串值左/右重复填充指定的字符串,与PB的fill函数功能类似f. upper/lower:字符串都转为大写/小写4、 日期相关函数a. +/-:加/减天数操作符b. :将字符串类型数据转为日期型信息,如('2005-11-15','yyyy-mm-dd')c. trunc:去掉时间那部分信息,常用于按日期检索数据d.
13、:增加月份5、 数值相关函数:a. :将字符串类型数据转为数值型,如((,'')要注意,如果待转化数据包含非数字内容,就会报错误b. trunc:按指定小数位精度截取6、 其它函数a. nvl:空值判断,这是很常用的函数;对于PL/SQL的空串与空值是一样的,即在SQL语法中没必要像PB一样判断空串;b. :条件分支判断,if elsec. sign:判断数值的符号,可用于>或= ('2005-11-15','yyyy-mm-dd') and < (
20、9;2005-11-16','yyyy-mm-dd');b. 特别要注意对于字符型字段与数值参数关联(或反过来数值型字段与字符参数关联),一定要把参数先转化为与字段同样的类型,否则即使字段有建索引也没办法用到,因为分析SQL语法时会自动把字段加上相应的函数处理以匹配参数;即所有参数类型定义应与所关联字段匹配,或对类型转化要显示在参数中处理;c. 多表关联时,尽可能使用主键列;d. 尽可能用/not 语法,而不是in/not in语法;一般若子查询数据量较小可用in语法,若子查询行数可能会超过100条,则必须使用语法,且Or
21、acle的in语法有最多999行限制;e. 尽量使用绑定变量,主要是动态执行的SQL语法(用动态游标),这样可在SQL执行预处理时省却语法分析阶段所占的时间,特别是在循环语句中;f. char和字段类型关连:i. char与char:不论两字段长度定义如何,都能利用索引;ii. 与:也与其长度定义无关,但要注意要么后面都没空格,要么空格数量要一致才能用到索引;iii. char与:除非字段空格补足到与char定义长度一样,否则没办法用到索引;g. 对于大数据量表新建索引时,一定要记得分析索引 inde
22、x comm.(索引名) ;5、 判断SQL执行情况的方法:可通过在设置以下命令,然后执行所要分析的SQL语法,就可以得到其执行路径与执行时间等信息set on/set (不显示所检索的数据)set on6、 大幅提高批量数据处理效率的方法后台包,如床位计价、每日报表基表数据生成等;对于一些医院业务高峰常用模块(如住院摆药、单据扣费等)也常把这类业务写在后台包中处理;7、 数据库连接接口:正常情况下都是使用PB原生接口,且按其
23、客户端配置尽可能用高版本的客户端;六、 数据库操作安全问题1、 不准在PB的数据库管理窗口中执行SQL更新语法,必须在执行,这样才能判断执行结果,防止更新语法写错(如where条件写漏了),以决定提交()还是回滚();2、 更新数据前先用相同条件的语法查看,且把检索出的数据导出备份(用PB或程序员助手),以便出错时恢复数据(很有中能SQL语法没错,但需求是错的);3、 除非是清库才使用 table语法(直接提交,无法回滚,且无数据库日志),否则删除所有数据只能使用 from 语法;七、 数据库管理相关
24、1、 数据库文件a. 初始化文件:.ora与.ora(才有)b. 密码文件:可用命令创建c. 控制文件: filed. 数据文件:系统文件、临时表空间文件、回滚段数据文件、用户数据文件e. 日志文件:在线日志与归档日志2、 手工启动/关闭数据库实例a. 启动实例(初始化文件): ->alter . 启动实例(控制文件): mount->alter openc. 启动实例(数据文件):sta
25、rtup/ opend. 关闭实例: 、 数据库备份机制:a. 硬件双机热备b. 软件文件备份(在线热备/离线冷备)c. 软件导出备份(全库导出/增量导出)4、 重建数据库相关(详细步骤参见 创建数据库步骤.txt )a. 修改数据库实例名:创建实例,init文件实例参数修改,重建控制文件b. 数据库文件路径修改:init文件控制文件路径修改,重建控制文件c. 实例名与数据库文件路径都不变:拷到相同目录,直接启动w:–2df9-463c-8ba8-87e8.pdf 第7页 共7页