Oracle数据库设计规范建议

合集下载

Oracle数据库命名规范

Oracle数据库命名规范

1.Oracle数据库命名规范数据库命名规范总体上以“汉语拼音和常见英语单词相结合”的方式,汉语拼音即是采用每一个汉字拼音的第一个字母的方式。

英语单词采用整个英文单词或可以识别的英文单词缩写的方式。

数据库字段命名原则总统上同数据库命名,采用“汉语拼音和常见英语单词相结合”方式命名。

这里单独出来主要是强调本系统字段命名需要额外遵循如下规则:1)字段名称的唯一性:即同一含义的字段在整个系统范围内中必须有相同的字段名。

不能有类似一个表中的备注字段用“BeiZhu”,另一表中的备注却用“Remark”、“Desc”、“XXRemark”等。

2)字段含义唯一性:即系统同一字段名称必须有同一含义。

不能有类似“Name”在一个表中表单位名称,在另外一个表中表项目名称,这种情况需要加前缀区分。

3)所有字段名不能以SM开头,目的是避免与SuperMap保留字段前缀混淆4)空间表中:字段顺序以空间信息字段在前,属性信息字段在后原则。

5)属性表中:字段顺序以主次顺序设计,用于空间定位的字段放在最后原则。

1.1表属性规范1)表名前缀为Tbl_。

数据表名称必须以有特征含义的单词或缩写组成,中间可以用“_”分割,例如:tbl_pstn_detail。

表名称不能用双引号包含。

2)表分区名前缀为p。

分区名必须有特定含义的单词或字串。

例如:tbl_pstn_detail的分区p2004100101表示该分区存储2004100101时段的数据。

3)字段名字段名称必须用字母开头,采用有特征含义的单词或缩写,不能用双引号包含。

4)主键名前缀为PK_。

主键名称应是前缀+表名+构成的字段名。

如果复合主键的构成字段较多,则只包含第一个字段。

表名可以去掉前缀。

5)外键名前缀为FK_。

外键名称应是前缀+外键表名+主键表名+外键表构成的字段名。

表名可以去掉前缀。

1.2索引1)普通索引前缀为IDX_。

索引名称应是前缀+表名+构成的字段名。

如果复合索引的构成字段较多,则只包含第一个字段,并添加序号。

(完整版)Oracle数据库规划设计和运行维护方案

(完整版)Oracle数据库规划设计和运行维护方案

Oracle数据库规划设计和运行维护方案(V1。

0)目录1。

前言 (6)1。

1. 编写目的 (6)1。

2。

方案说明 (6)1.3. 预期读者 (7)2。

数据库部署模式 (7)2.1. 单机模式 (7)2.2. 双机热备模式(HA模式) (8)2.3。

集群模式(RAC) (9)2。

4. 主从模式(DataGuard) (10)2.5。

混合模式(DataGrard+RAC) (10)2。

6。

数据库运行模式选择 (11)3。

系统特点和数据库类型 (11)3。

1。

业务系统的特点 (11)3。

1.1。

OLTP特点 (12)3.1.2。

OLAP特点 (13)3。

2。

数据库的规模 (13)3.3。

数据库版本建议 (13)4. 数据库运行环境规划 (14)4.1。

主机规划 (14)4。

2. 网络规划 (15)4.3. 存储规划 (17)5。

数据库安装部署规划 (19)5.1。

软件安装路径 (19)5。

2. 表空间设计 (19)5.2.1. 业务数据量估算 (19)5。

2。

2。

表空间使用规则 (21)5.2.3。

表空间的概念和分配原则 (25)5。

2.4。

表空间的参数配置 (26)5.2。

5. Undo/temp表空间的估算 (30)5.2。

6. 表的参数设置 (30)5.2。

7. 索引的使用原则 (31)5。

3. 文件设计 (32)5.3。

1. RAC配置文件 (32)5.3。

2. 参数文件 (33)5。

3。

3. 控制文件 (34)5。

3.4。

重做日志文件 (35)6。

数据库应用规划 (37)6。

1。

数据库用户设计 (37)6。

1。

1。

用户权限规划 (37)6.1.2。

用户安全实现 (39)6。

1。

3. 用户类型及角色命名规范 (41)6.2. 数据库分区 (44)6.2。

1. 数据库分区介绍 (44)6。

2.3. 物理分割 (45)6。

2。

4. 数据分区的优点 (45)6.2.5. 数据分区的不足 (45)6.2。

数据库的设计方法、规范与技巧

数据库的设计方法、规范与技巧

数据库的设计⽅法、规范与技巧⼀、数据库设计过程 数据库技术是信息资源管理最有效的⼿段。

数据库设计是指对于⼀个给定的应⽤环境,构造最优的数据库模式,建⽴数据库及其应⽤系统,有效存储数据,满⾜⽤户信息要求和处理要求。

数据库设计中需求分析阶段综合各个⽤户的应⽤需求(现实世界的需求),在概念设计阶段形成独⽴于机器特点、独⽴于各个DBMS产品的概念模式(信息世界模型),⽤E-R图来描述。

在逻辑设计阶段将E-R图转换成具体的数据库产品⽀持的数据模型如关系模型,形成数据库逻辑模式。

然后根据⽤户处理的要求,安全性的考虑,在基本表的基础上再建⽴必要的视图(VIEW)形成数据的外模式。

在物理设计阶段根据DBMS特点和处理的需要,进⾏物理存储安排,设计索引,形成数据库内模式。

1. 需求分析阶段 需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。

需求分析的重点是调查、收集与分析⽤户在数据管理中的信息要求、处理要求、安全性与完整性要求。

需求分析的⽅法:调查组织机构情况、调查各部门的业务活动情况、协助⽤户明确对新系统的各种要求、确定新系统的边界。

常⽤的调查⽅法有:跟班作业、开调查会、请专⼈介绍、询问、设计调查表请⽤户填写、查阅记录。

分析和表达⽤户需求的⽅法主要包括⾃顶向下和⾃底向上两类⽅法。

⾃顶向下的结构化分析⽅法(Structured Analysis,简称SA⽅法)从最上层的系统组织机构⼊⼿,采⽤逐层分解的⽅式分析系统,并把每⼀层⽤数据流图和数据字典描述。

数据流图表达了数据和处理过程的关系。

系统中的数据则借助数据字典(Data Dictionary,简称DD)来描述。

数据字典是各类数据描述的集合,它是关于数据库中数据的描述,即元数据,⽽不是数据本⾝。

数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分(⾄少应该包含每个字段的数据类型和在每个表内的主外键)。

数据项描述={数据项名,数据项含义说明,别名,数据类型,长度, 取值范围,取值含义,与其他数据项的逻辑关系} 数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}} 数据流描述={数据流名,说明,数据流来源,数据流去向, 组成:{数据结构},平均流量,⾼峰期流量} 数据存储描述={数据存储名,说明,编号,流⼊的数据流,流出的数据流, 组成:{数据结构},数据量,存取⽅式} 处理过程描述={处理过程名,说明,输⼊:{数据流},输出:{数据流}, 处理:{简要说明}} 2. 概念结构设计阶段 通过对⽤户需求进⾏综合、归纳与抽象,形成⼀个独⽴于具体DBMS的概念模型,可以⽤E-R图表⽰。

oracle数据库设计课程设计

oracle数据库设计课程设计

oracle数据库设计课程设计一、课程目标知识目标:1. 理解Oracle数据库的基本概念,掌握数据库设计的基本原理;2. 学会使用SQL语言进行数据库的基本操作,如创建表、查询数据、更新数据等;3. 掌握数据库设计规范,能够设计出结构合理、性能优良的数据库表结构;4. 了解数据库的安全性和一致性约束,能够为数据库设置合理的约束条件。

技能目标:1. 能够运用所学知识独立完成小型信息系统的数据库设计;2. 能够熟练运用SQL语言进行数据库的操作,解决实际问题;3. 能够运用数据库设计原则对现有数据库进行优化,提高数据库性能;4. 能够分析实际业务需求,撰写数据库设计文档,为软件开发提供支持。

情感态度价值观目标:1. 培养学生对数据库技术的兴趣,激发学习积极性,提高自主学习能力;2. 培养学生具备良好的团队合作精神,能够在团队项目中发挥积极作用;3. 培养学生严谨、细致的学习态度,对待数据库设计和操作能够认真负责;4. 通过数据库技术在实际案例中的应用,使学生认识到信息技术对社会发展的积极作用,增强社会责任感。

二、教学内容1. Oracle数据库基础知识- 数据库概念、发展历史及Oracle数据库特点- 数据库体系结构、数据库存储结构- SQL*Plus工具的使用2. SQL语言基础- 数据定义语言(DDL):创建、修改、删除表- 数据操纵语言(DML):插入、查询、更新、删除数据- 数据控制语言(DCL):权限管理、事务控制3. 数据库设计原理- 实体关系模型(ER模型)及其转换- 数据库设计范式:1NF、2NF、3NF、BCNF- 数据完整性、约束条件设置4. Oracle数据库高级应用- 索引、分区、视图、序列的应用- 存储过程、函数、触发器的创建与使用- 数据库性能优化、备份与恢复5. 实践项目- 设计一个小型信息系统的数据库,包括表结构设计、数据操作、完整性约束设置等- 对数据库进行性能优化,分析并解决性能瓶颈- 撰写数据库设计文档,进行项目展示与交流教学内容按照以上五个方面进行组织,确保学生能够系统地掌握Oracle数据库的设计与应用。

掌握数据库设计的原则与技巧

掌握数据库设计的原则与技巧

掌握数据库设计的原则与技巧在当今数字化的时代,数据已经成为企业和组织运营的核心资产之一。

而数据库作为存储和管理数据的关键工具,其设计的合理性和有效性直接影响着系统的性能、可扩展性和数据的完整性。

因此,掌握数据库设计的原则与技巧对于开发高质量的应用程序和确保数据的高效管理至关重要。

数据库设计的原则1、数据完整性数据完整性是指确保数据库中的数据准确、一致和可靠。

这包括实体完整性(确保表中的每行都有唯一的标识符)、参照完整性(确保表之间的关系正确)和域完整性(确保数据的值在预定义的范围内)。

例如,在一个学生成绩管理系统中,学生表中的学号必须是唯一的,课程表中的课程编号也必须是唯一的。

同时,成绩表中的成绩必须在 0 到 100 之间。

2、数据一致性数据一致性是指在数据库的不同部分和不同操作中,数据保持相同的含义和格式。

为了实现数据一致性,需要在设计时定义明确的数据规则和约束条件。

比如,在一个库存管理系统中,如果一个商品被出库,那么库存数量应该相应地减少,而且在任何查询库存的操作中,都应该得到相同的准确数量。

3、最小冗余冗余数据是指在数据库中多次重复存储相同的信息。

过多的冗余会导致数据不一致、存储空间浪费和更新操作的复杂性增加。

然而,在某些情况下,适当的冗余可以提高查询性能。

例如,在一个订单管理系统中,可以在订单详情表中存储商品的名称和价格,而不是每次查询都从商品表中获取,这样可以减少表连接的操作,但需要确保在商品信息发生变化时能够及时更新。

4、可扩展性设计的数据库应该能够轻松适应未来数据量的增长和业务需求的变化。

这意味着在设计时要考虑到可能的扩展方向,例如添加新的表、字段或关系。

例如,如果一个电商平台预计未来会增加新的商品类别,那么在设计数据库时应该预留足够的灵活性,以便能够方便地添加相关的表和字段。

5、性能优化数据库的性能是设计时需要重点考虑的因素之一。

这包括合理选择数据类型、创建合适的索引、优化查询语句等。

ORACLE设计规范

ORACLE设计规范

ORACLE设计规范1、数据库模型设计方法规范1.1、数据建模原则性规范1.2、实体型之间关系认定规范1.3、范式化1NF的规范1.4、范式化2NF的规范1.5、范式化3NF的规范1.6、反范式化冗余字段使用规范1.7、数据库对象命名基本规范第一:长度规范:凡是需要命名的对象其标识符均不能超过30个字符,也即:Oracle中的表名、字段名,函数名,过程名,触发器名,序列名,视图名的长度均不能超过30个字符;第二:构成规范:数据库各种名称必须以字母开头,但严禁使用SYS开头;名称只能含有字母,数字和下划线“_”三类字符,“_”用于间隔名称中的各语义字段;不要使用DUAL作表名;第三:大小写规范:构成Oracle数据库中的各种名称(表明,字段名,过程名,视图名等等)的所有字符,必须使用大写,也就是不能在脚本中,对任何名称添加双引号“”来设定字符的大小写形式,只要不采用“”限制,Oracle自动会将各名称转化成大写。

2、表的设计规范2.1、表的主键规范遵循如下三点原则:第一:有无原则:除临时表和外部表,以及流水表,日志表外,其他表都要建立主键;第二:构成原则:主键不能使用含有实际语义的列,应该增加一个xx_id字段做主键,类型为number,取值来自序列sequence;第三:创建原则:对于500万以上的表,请数据组参与设计实施,采用先建唯一索引再添加主键约束的方式来创建主键;2.2、表的主键列规范对于实体表,主键就是一列,就是没有任何语义的自增的NUMBER列,对于关系表,主键就是相关实体表主键形成的复合主键,是多列;2.3、使用注释的规范2.4、一个表所含字段总长度的规范2.5、一个表所含字段访问频繁度的规范2.6、一个表所含数据量的规范2.7、大对象字段(BLOB,CLOB)使用规范2.8、增量同步表的设计规范字典信息表和需要使用增量同步的表必须增加如下属性:2.9、表的表空间使用规范2.10、索引的表空间使用规范3、设计分区表的规范3.1、RANGE分区的规范3.2、LIST分区的规范3.3、HASH分区的规范3.4、RANGE-LIST分区的规范3.5、RANGE-HASH分区的规范4、索引的设计规范4.1、主键索引的规范4.2、唯一约束索引的规范4.3、外键列索引的规范4.4、复合索引的规范4.5、函数索引的规范4.6、位图索引的规范4.7、反向索引的规范4.8、分区索引的规范4.9、索引重建的规范5、SQL访问规范5.1、避免SELECT *程序中不能出现SELECT*,即使是选择全部选择项,也需要全部指明,这主要出于如下原因:第一:使用*相对比较慢,因为Oracle 需要遍历更多的内部字典信息;第二:为避免以后相关表增加字段造成程序错误,比如INSERT INTO SELECT和SELECT INTO语句会报错;5.2、避免笛卡尔运算多表关联查询不能出现笛卡尔积,如果在报表中为集聚表(或称中间表)生成多个维度组成的复合主键需要使用迪克尔积的,必须请数据组确认性能。

数据库设计开发规范

数据库设计开发规范

数据库设计开发规范1 数据库命名约定1.1 规则(1)命名富有意义英⽂词汇,多个单词组成的,中间以下划线分割。

(2)除数据库名称长度为1-8个字符,其余为1-30个字符,dblink名称也不要超过30个字符。

(3)命名只能使⽤英⽂字母,数字和下划线,字母全部⼩写(4)避免使⽤Oracle的保留字如level、关键字如type。

1. 2系统模块编号名称英⽂缩写1系统管理system sys2配置管理dictionary dic3设备系统equipment equ4通讯系统BaiZE bai5能耗系统energy consumption egy6调度系统dispatch dph7数据分析系统Auto Data Make Data amk8Data to UI dui9stmart smt10营收系统revenue rev11客服系统custom service cus12远程抄表系统remote reading rea13报装系统Expanding exp14移动互联系统mobile mob15管⽹监测系统Pipe Supervision pip16⾃备井监测Self-supply wells ssw17协同办公cooperative OA coa18⽔⼚监测Water Factory Monitoring wfm19⼆次供⽔系统secondary water-supply sws20GIS系统gis gis21⽔⼒模型系统Water Model system mod21⽔⼒模型系统Water Model system mod22管理系统Manage system man23仿真决策分析系统decision-making system dms24BIM系统Building Information Modeling bim1. 3业务功能编号名称英⽂缩写1⼩区area area2压⼒pressure pressure3流量flow flow4客服custom service service5移动应⽤mobile apps app6⽔⼚water works water7客户customer customer 8⼤客户big customer bcustomer 9⼆次供⽔secondary water supply second10饮⽔机water fountain fountain11⾃备井Self-supply wells wells12⽔质water quality quality13诊断diagnoses diagnoses 14⽔源waterhead waterhead 15收费charge charge16档案file file17抄表reading reading18发票invoice invoice19报表report report20⼯单job job21流程process processs 1. 4数据库对象编号名称缩写其它1表空间tbs2表tb3视图vw4过程sp5函数fn6序列seq seq_表名7触发器tr tr_表名8包pk9索引idx seq_表名10约束ck ck_表名_字段名11主键pk pk_表名_字段名12外键fk fk_主表名_从表名13⽤户⾃定义类型udt2 SQL书写⽅式2.1 注释(1)注释以中⽂为主。

ORACLE数据库设计规范

ORACLE数据库设计规范

1 命名原则约定ü? 是指对数据库、数据库对象如表、字段、索引、序列、存储过程等的命名约定;ü? 命名使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割ü? 避免使用Oracle的保留字如LEVEL、关键字如TYPE(见Oracle保留字和关键字);ü? 各表之间相关列名尽量同名;ü? 除数据库名称长度为1-8个字符,其余为1-30个字符,Database link名称也不要超过30个字符;ü? 命名只能使用英文字母,数字和下划线;?表名规则如下:命名规则为xxx_yyy_TableName。

xxx表示开发公司的名称,最多五个字母构成,尽量用简称;yyy表示子系统中的子模块的名称(可以没有), 最多五个字母构成,尽量用简称;TableName为表含义, 最多十个字母构成,尽量用简称?TableName规则如下:ü? 使用英文单词或词组作为表名,不得使用汉语拼音ü? 用名词和名词短语作表名ü? 不使用复数?正确的命名,例如:fiber_sys_userfiber_biz_order?存储过程规则如下:命名规则为xxx_yyy_StoredProcedureName。

xxx表示开发公司的名称,最多五个字母构成,尽量用简称;yyy表示子系统中的子模块的名称(可以没有), 最多五个字母构成,尽量用简称;StoredProcedureName为存储过程含义,最多十个字母构成,尽量用简称?StoredProcedureName规则如下:ü? 用动词或动词短语来命名,并带有宾语ü? 需要符合用Pascal 命名规则。

ü? 尽量谨慎地使用缩写ü? 尽量不要和关键字重合ü? 不要用任何名前缀 (例如 U,B)ü? StoredProce dureName内不使用下划线ü? 当操作依赖条件时,一般结尾使用 By+条件?存储过程正确的命名,例如:sys_InsertUsersys_SearchUserByUserIDsys_DeleteUserByUserID?视图规则如下:ü? 视图的命名采用xxx_yyy_ViewName_v。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle数据库设计规范建议1 目的本规范的主要目的是希望规范数据库设计,尽量提前避免由于数据库设计不当而产生的麻烦;同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好的保证。

数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。

2 适用范围本规范的适用人员范围包括我司的所有应用开发人员以及在我司承接数据库应用开发的软件人员。

本规范的适用IT范围包括数据库对象的命名规范、设计原则、SQL语句的设计和使用、SQL语句的性能优化建议、其他与性能有关的设计原则以及设计工具的选择。

3 数据对象的命名规范3.1 通用规范3.1.1 使用英文:要用简单明了的英文单词,不要用拼音,特别是拼音缩写。

主要目的很明确,让人容易明白这个对象是做什么用的;3.1.2 一律大写,特别是表名:有些数据库,表的命名乃至其他数据对象的命名是大小写敏感的,为了避免不必要的麻烦,并且尊重通常的习惯,最好一律用大写;3.2 数据库对象命名规范3.2.1 表的命名3.2.1.1 表名的前缀:前缀_表名_T。

为表的名称增加一个或者多个前缀,前缀名不要太长,可以用缩写,最好用下划线与后面的单词分开;其目的有这样几个:3.2.1.1.1 为了不与其他项目或者其他系统、子系统的表重名;3.2.1.1.2 表示某种从属关系,比如表明是属于某个子系统、某个模块或者某个项目等等。

表示这种从属关系的一个主要目的是,从表名能够大概知道如何去找相关的人员。

比如以子系统为前缀的,当看到这个表的时候,就知道有问题可以去找该子系统的开发和使用人员;3.2.2 视图命名:相关表名_V(或者根据需要另取名字);3.2.3 程序包命名:程序包名_PKG(用英文表达程序包意义);3.2.4 存储过程命名:存储过程名_PRO(用英文表达存储过程意义);3.2.5 函数命名:函数名称_FUN(用英文表达函数作用);3.2.6 触发器命名:触发器名称_TRI(用英文表达触发器作用);3.2.7 索引命名:表名_字段名_IDX(如果存在多字段索引,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail 上建立联合索引,命名为表名_cus_cut_cur_IDX,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如在 custid, custom,custname上建立联合索引,就命名为表_tid_tom_tna_IDX;3.2.8 唯一索引命名:表名_字段名_UNI(如果存在多字段唯一索引,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail上建立唯一索引,命名为表名_ cus_cut_cur_UNI,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如:在 custid, custom,custname上建立唯一索引,命名:表_tid_tom_tna_UNI;3.2.9 主键命名:表名_字段名_PK(如果存在多字段主键,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail上建立主键,命名为表名_cus_cut_cur_PK,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如在 custid, custom,custname上建立主键,命名:表_tid_tom_tna_PK;3.2.10 外键命名:表名_主表名_字段名_FK;3.2.11 Sequence命名:表名_列名_SEQ(或者根据需要另取名字);3.2.12 Synonym命名:与对应的数据库对象同名;3.2.12 JAVA命名:遵守公司相应的JAVA命名规范;4 数据库对象设计原则4.1 表的设计4.1.1 主、外键4.1.1.1 每个表,都必须要有主键。

主键是每行数据的唯一标识,保证主键不可随意更新修改,在不知道是否需要主键的时候,请加上主键,它会为你的程序以及将来查找数据中的错误等等,提供一定的帮助;4.1.1.2 一个表的某列与另一表有关联关系的时候,如果加得上的话,请加上外键约束。

外键是很重要的,所以要特别强调:4.1.1.2.1 适量建外键。

为了保证外键的一致性,数据库会增加一些开销,如果有确凿的并且是对性能影响到无法满足用户需求的证据,可以考虑不建外键。

否则,还是应该建外键;4.1.1.2.2 不要以数据操作不方便为理由而不建外键。

是的,加上外键以后,一些数据操作变得有些麻烦,但是这正是对数据一致性的保护。

正是因为这种保护很有效,所以最好不要拒绝它;4.1.1.2.3 以缺省的方式建立外键(即用delete restrict方式),以达到保护数据一致性的目的;外键在保护数据一致方面非常有效。

如果不建外键,数据库中容易出现垃圾数据,并且无人知晓。

当数据量很大的时候,查找这些垃圾数据也是相当困难的。

而应用程序在设计时,往往没有考虑或者也无法照顾到垃圾数据。

因此垃圾数据很可能造成应用程序工作不正常,并且表现出来的现象会很奇怪,让人摸不着头脑。

4.1.2 列的设计4.1.2.1 字段的宽度要在一定时间内足够用,但也不要过宽,占用过多的存储空间,对于长度不确定的列,采用可变长度的数据类型如 varchar类型;4.1.2.2 字段的类型及宽度在设计以及后面进行开发时,往往要与应用的设计、开发人员商讨,以得到双方认可的类型及宽度;4.1.2.3 除非必要,否则尽量不加冗余列。

所谓冗余列,是指能通过其他列计算出来的列,或者是与某列表达同一含义的列,或者是从其他表复制过来的列等等。

冗余列需要应用程序来维护一致性,相关列的值改变的时候,冗余列也需要随之修改,而这一规则未必所有人都知道,就有可能因此发生不一致的情况。

如果是应用的特殊需要,或者是为了优化某些逻辑很复杂的查询等操作,可以加冗余列;4.1.3.3 除非必要,否则尽量不使用LONG, TEXT, BLOB, CLOB, NCLOB, LONG, LONG RAW这一类的数据类型,而是使用其他可以替代的数据类型;优先使用varchar2类型替代CHAR类型,除非列宽有严格的要求而且得到应用严格支持;4.1.3 记录数4.1.3.1 单表的记录数一般控制在两千万条 (参考值,各应用可以根据实际情况进行适量调整) 以内;4.1.3.2 记录数在两千万和两亿条之间的表一定要采用分区技术,并根据应用的使用情况创建合适的分区标准,单个分区内的记录数一般控制在两千万条(参考值,各应用可以根据实际情况进行适量调整)以内,同时表的索引使用对应的分区索引;4.1.3.3 记录数超过两亿条的表一定要考虑信息生命周期,必须考虑历史数据的剥离,并在应用设计中完成对历史数据的相应处理功能(历史数据的剥离规则须经业务使用部门的确认);4.2 索引的设计索引是从数据库中获取数据的最高效方式之一。

95%的数据库性能问题都可以采用索引技术得到解决。

但大量的DML操作会增加系统对索引的维护成本,对性能会有一定影响,对于插入相当频繁的表要慎重建索引,索引也会占相当的存储空间,所以要根据硬件环境和应用需求在空间和时间上达到最好的平衡点,主要原则:4.2.1 适当利用索引提高查询速度:当数据量比较大,了解应用程序的会有哪些查询,依据这些查询需求建相应的索引;最好亲自试验一下,模拟一下生产环境的数据量,在此数据量下,比较一下建索引前后的查询速度;索引对性能会有一定影响,对于DML频繁列的索引要定期维护(重建)。

但是,索引的结构对于索引的更新(比如在插入数据的时候)是有一定优化的,所以不要在没有试验以前过分夸大它对性能的影响。

最终还是以试验为准;4.2.2 不要建实际用不上的索引,与上条相关,如果建的索引并不提高任何一应用中的查询速度,则要把它删除;有些数据库有相关工具可以发现实际未被使用的索引,可以利用一下;4.2.3 索引类型的选择:要根据数据分布及应用来决定如何建立索引,一般的高基数数据列(高基数数据列是指该列有很多不同的值)时 ,建立BTree索引(一般数据库索引的缺省类型);当低基数数据列(该列有大量相同的值)时,可以考虑建立位图索引(如果所选数据库支持的话),但位图索引是压缩类型索引,所以DML(增、删、改)的代价更高,要综合考虑;4.2.4 索引列的选择:如果检索条件有可能包含多列,创建联合主键或者联合索引,把最常用于检索条件的列放在最前端,其他的列排在后面;不要索引使用频繁的小型表,假如这些小表有频繁的DML就更不要建立索引,维护索引的代价远远高于扫描表的代价;4.2.5 主键索引在建立的时候一定要明确的指定名称,不能让系统默认建立主键索引(可能有些数据库无法指定主键名,则例外);4.2.6 外键必须需建索引。

当有一定数据量,并且经常以外键所在列为关联,进行关联查询时,需要建索引(可能有些数据库自动为外键建索引,则例外);4.2.7 当有联合主键或者联合索引时,注意不要建重复的索引。

举例说明:4.2.7.1 表EMPLOYEES,它的主键是建立在列DEPARTID和EMPLOYEEID上的联合主键,并且创建主键的语句中DEPARTID在前,EMPLOYEEID在后。

在这样一个表里,通常就没有必要再为DEPARTID建一个索引了;联合索引的情况也一样;4.2.7.2 更复杂的情况,比如表EMPLOYEES,有一个索引建立在列CORPID, DEPARTID, EMPLOYEEID三列上,在创建语句中也依据上述顺序,就没有必要再为CORPID建立索引;也没有必要再建立以CORPID在前,DEPARTID在后的联合索引;如果EMPLOYEEID 需要索引,那么为EMPLOYEEID建立一个索引是不与上面的索引重复的;DEPARTID列也类似;4.2.8 控制一个表的索引数量,尽量使得一个表的索引数量小于五个;4.3 视图的设计4.3.1在不太清楚视图用法的情况下,尽量不建。

因为一旦建了,就有被滥用的危险;4.3.2 如果需要建视图,只要是打算长期使用的,请写入数据库设计中。

明确它的用途、目的;4.3.3 建立视图时要明确写出所有要选择出的列名而不要以SELECT *来代替,可以使结构清晰可读性增强,也不会增加它对表的所有字段的依赖,而表是很可能修改的,特别是增加字段。

就很有可能导致使用该视图的应用程序出错;4.4 存储过程、函数、触发器的设计4.4.1 触发器的功能通常可以用其他方式实现。

在调试程序时触发器可能成为干扰。

假如你确实需要采用触发器,一定要经过测试再应用在生产系统中,而且必须集中对它文档化。

相关文档
最新文档