密级:数据库设计规范(oracle版本)文档编号版本号发布日期修改人修改日期审核人审核日期审批人审批日期修订记录版本号发布日期修改人/修改日期审核人/审核日期审批人/审批日期备注目录1、目的....................................................................................................42、概述....................................................................................................43、数据库物理设计原则............................................................................43.1、数据库环境配置原则..................................................................43.2、数据库设计原则.........................................................................53.3、数据库表空间设计原则..............................................................94、数据库逻辑设计原则............................................................................94.1、命名规范...................................................................................94.2、命名........................................................................................114.3、数据类型.................................................................................124.4、设计........................................................................................134.5、SQL编写..................................................................................155、设计工具...........................................................................................17附录........................................................................................................17SGA..................................................................................................173NF..................................................................................................191、目的定义数据库设计设计规范,作为数据库设计、规划、开发以及维护人员的技术参考资料。2、概述本文主要根据oracle9i以上数据库性能特点,描述数据库环境配置、数据库物理设计、数据库逻辑设计、视图、存储过程、应用程序设计等方面的设计规范。3、数据库物理设计原则3.1、数据库环境配置原则操作系统环境:对于中小型数据库系统,采用linux操作系统比较合适,对于数据库冗余要求负载均衡能力要求较高的系统,可以采用Oracle9iRAC的集群数据库的方法,集群节点数范围在2—64个。对于大型数据库系统,可以采用SunSolarisSPARC64位小型机系统或HP9000系列小型机系统。内存要求对于linux操作系统下的数据库,由于在正常情况下Oracle对SGA的管理能力不超过1.7G。所以总的物理内存在4G以下。SGA的大小为物理内存的50%—75%。对于64位的小型系统,Oracle数据库对SGA的管理超过2G的限制,SGA设计在一个合适的范围内:物理内存的50%—70%,当SGA过大的时候会导致内存分页,影响系统性能。交换区设计当物理内存在2G以下的情况下,交换分区swap为物理内存的3倍,当物理内存2G的情况下,swap大小为物理内存的1—2倍。其他环境变量参考Oracle相关的安装文档和随机文档。3.2、数据库设计原则数据库SID数据库SID是唯一标志数据库的符号,命名长度不能超过30个字符。对于单节点数据库,以字符开头的30个长度以内字串作为SID的命名。对于集群数据库,当命名SID后,各节点SID自动命名为SIDnn,其中nn为节点号:1,2,…,64。例如rac1、rac2、rac24。数据库全局名数据库全局名称:sid.domain数据库类型选择对于海量数据库系统,采用datawarehouse的类型。对于小型数据库或OLTP类型的数据库,采用TransactionProcessing类型。数据库连接类型选择Oracle数据库有专用服务器连接类型和多线程服务器MTS连接类型。对于批处理服务,需要专用服务器连接方式,而对于OLTP服务则MTS的连接方式比较合适。由于采用MTS后,可以通过配置网络服务实现某些特定批处理服务采用专用服务器连接方式,所以数据库设计时一般采用MTS类型。数据库SGA配置数据库SGA可以采用手工配置或按物理内存比例配置,在数据库初始设计阶段采用按比例配置方式,在实际应用中按系统调优方式修改SGA。数据库字符集选择为了使数据库能够正确支持多国语言,必须配置合适的数据库字符集,采用UTF8字符集。数据库其他参数配置DB_FILESDb_files是数据库能够同时打开的文件数量,默认值是200个。当数据库规划时文件数量FILES接近或超过200个时候,按以下估计值配置:DB_FILES=FILES*1.5Db_block_sizeDb_block_size是数据库最小物理单元,一旦数据库创建完成,该参数无法修改,db_block_size按以下规则调整:数据仓库类型:db_block_size尽可能大,采用8192或16384OLTP类型:db_block_size用比较小的取值范围:2048或4096数据库控制文件配置控制文件镜象多个控制文件存放在不同的物理位置。控制文件配置控制文件中参数设置,最大的数据文件数量不能小于数据库参数db_files。数据库日志文件配置日志文件大小日志文件的大小由数据库事务处理量决定,在设计过程中,确保每20分钟切换一个日志文件。所以对于批处理系统,日志文件大小为几百M到几G的大小。对于OLTP系统,日志文件大小为几百M以内。日志文件组数量对于批处理系统:日志文件组为5—10组。对于OLTP系统:日志文件组为3—5组。每组日志大小保持一致。对于集群数据库系统,每节点有各自独立的日志组。日志成员数量为了确保日志能够镜象作用,每日志组的成员为2个。数据库回滚段配置在Oracle9i数据库中,设计Undo表空间取代以前版本的回滚段表空间。Undo表空间大小的设计规范由以下公司计算:Undospace=UR*UPS*db_block_size+冗余量UR:表示在undo中保持的最长时间数(秒),由数据库参数UNDO_RETENTION值决定。UPS:表示在undo中,每秒产生的数据库块数量。例如:在数据库中保留2小时的回退数据,假定每小时产生200个数据库块。则Undospace=2*3600*200*4K=5.8G数据库临时段表空间配置数据库临时段表空间根据实际生产环境情况调整其大小,表空间属性为自动扩展。数据库系统表空间配置系统表空间大小1G左右,除了存放数据库数据字典的数据外,其他数据不得存储在系统表空间。3.3、数据库表空间设计原则表空间大小定义原则当表空间大小小于操作系统对最大文件限制时,表空间由一个文件组成。如果表空间大小大于操作系统对最大文件限制时,该表空间由多个数据文件组成,表空间的总大小为估算为:Tablespace+sum(数据段+索引段)*150%表空间扩展性设计原则表空间采用自动扩展的方式、表空间采用local管理方式。4、数据库逻辑设计原则4.1、命名规范表T_。数据表必须以有特征含义的单词或缩写组成,中间可以用“_”分割,例如:t_pstn_detail。表分区p。分区名必须有特定含义的单词或字串。例如:t_pstn_detail的分区p2004100101表示该分区存储2004100101时段的数据。字段必须以有特征含义的单词或缩写组成,中间可以用“_”分割。例如:USER_NAME。主键PK_。主键名称应是前缀+表名+构成的字段名。如果复合主键的构成字段较多,则只包含第一个字段。表名可以去掉前缀。索引IDX_。索引名称应是前缀+表名+构成的字段名。如果复合索引的构成字段较多,则只包含第一个字段,并添加序号。表名可以去掉前缀。外键FK_。外键名称应是前缀+外键表名+主键表名+外键表构成的字段名。表名可以去掉前缀。索引分区无。由系统自动产生视图V_。按业务操作命名视图。实体化视图MV_。按业务操作命名实体化视图。存储过程Proc_。按业务操作命名存储过程触发器Trg_。触发器名应是前缀+表名+触发器名。函数Func_。按业务操作命名函数数据包Pkg_。按业务操作集合命名数据包。序列Seq_。按业务属性命名。表空间公用表空间Tbs_。根据存储的特性命名,例如:tbs_parameter。专用表空间Tbs_表名称_nn。该表空间存储特定表,或表分区的数据数据文件表空间nn.dbf。nn=1,2,3,4,…普通变量Var_。游标变量Cur_。存放游标记录集。记录型变量Rec_。存放记录型数据。表类型变量Tab_。存放表类型数据。4.2、命名语言命名应该使用英文单词,避免使用拼音,特别不应该使用拼音简写。命名不允许使用中文或者特殊字符。英文单词使用对象本身意义相对或相近的单词。选择最简单或最通用的单词。不能使用毫不相干的单词来命名当一个单词不能表达对象含义时,用词组组合,如果组合太长时,采用简写或缩写,缩写要基本能表达原单词的意义。当出现对象名重名时,是不同类型对象时,加类型前缀或后缀以示区别。大小写名称一律大写,以方便不同数据库移植,以及避免程序调用问题。单词分隔命名的各单词之间可以使用下划线进行分隔。保留字命名不允许使用SQL保留字。命名长度表名、字段名、视图名长度应限制在30个字符内(含前缀)。字段名称同一个字段名在一个数据库中只能代表一个意思。比如telephone在一个表中代表“电话号码”的意思,在另外一个表中就不能代表“手机号码”的意思。不同的表用于相同内容的字段应该采用同样的名称,字段类型定义。4.3、数据类型字符型固定长度的字串类型采用char,长度不固定的字串类型采用varchar。避免在长度不固定的情况下采用char类型。如果在数据迁移等出现以上情况,则必须使用trim()函数截去字串后的空格。数字型数字型字段尽量采用number类型。日期和时间系统时间由数据库