数据库中表设计原则分析

2016-03-07 00:55陈红艳
无线互联科技 2015年18期
关键词:主键

陈红艳

摘要:文章指出,数据结构设计时任何一个应用系统运行的支撑,是整个应用系统的基础,在设计过程中结构设计存在缺陷,那么相对其进行调整只通过数据库的参数是远远不够的。通常来讲,需要清除用户复杂表的结构以及表中这样的表的大小,从而拆开几个有关系的表结构。不能单单将用户标原封不动地进行转换,这样的行为方式是非常不明智的。

关键词:数据库逻辑设计;表;主键;字段及类型

在Oracle应用中,除了影响性能的大都是系统的配置参数等原因外,影响应用系统性能的另一个原因是应用程序的编写不当。因而,调整应用程序也是改善性能的一个方面。

在对系统分析这个阶段中,需要有工作经验的分析员以及编程人员跟客户一起讨论商量。这个过程所需要做的工作就是聆听客户的需求。当全面理解客户的初步需求之后,就需要分析员将客户的这些需求以文档的形式进行归档,即是将数据的需求定义编写。然后根据E R图进行逻辑设计。设计应尽量遵循如下原则。

1主键字段的正确选择

在对主键字段选择的时候,对其要求是非常重视的,要求其不能有重复的值现象发生,对于留空的一定要杜绝发生,这是主键选段的最基础的要求。在这过程中还需要注意以下几个方面内容:(1)主键的选择不能采用单位形式,不能过长的采用列值。(2)主键的选择建议采用字符或者数型。(3)不能使用类似日期、浮点之类的形式。(4)使用过程中出现主键重复,那么可以选择2个字段作主键,但是不推荐使用3个以上作为主键。

2字段类型以及长度的选择

在设计的过程中,每个设计者的思维是不同的,在一个字段的表示上,不同的设计者给出的结果是不相同的,有时候定义的字段其实际意义各不相同。在这个程度上,目前的理论内容还没有完全给出一个定义来定义这种现象,所以,众多人表示只要字段能够满足客户要求就行。其实面对一个比较复杂的应用系统,在定义字段过程中需要考虑的变化因素是众多的。笔者经过多年实际工作经验对应用以及设计进行分析,以供同行参考。

2.1如果能用字符型就不要用数字型

在设计过程,有很多的地方、很多字段都是可以用字符型以及数字型进行表示,例如,工作员的身份证号。其内容基本上都是以数字组成。身份证的每一个部位都包含特殊的含义,其在输入以及查询的过程中都会有一套严密的核查方法。例如:最后一位表示男(1)或女(2)。当用字符型时,可以在输入中用where substr(per_id,15,1)=l'orsubstr(per_id,15,1)=2来检查数据的正确性。如果采用数字这样的判断就不那么容易了。

2.2运算过程需求一致

在定义字段的过程中,除了要求数字型能够容纳日后也许变化的数据之外,还有一部分内容是值得重视的,即在可能参加运算的字段中,其长度和精度必须是保持一致的。

这样的处理方法,看上去会在一定程度上浪费空间,但是,没有必要去担心空间的使用程度,因为,假设其长度以及精度相差不齐,那么在运算过程中容易有算错的结果出现。

例如,可以采取PRO*C进行编程工作。当表内的数字字段的定义发生变量的时候,C编译不会去检查其中一致性的关系。举个例子说明:在表里面字段显得大,而在C语言中能够说明其小,当将表中的字段取出放到表量的过程中,语言没有提示错误的现象发生。在不经过任何转换的形式下进行运算,就会有不同的结果产生。

2.3不能为节省空间随意拆开字节

随着科技的迅猛发展,目前的储存硬件的发展进步是相当快的,在当前的应用设计阶段不要讲以往教科书里面的理论带到现在的环境中。这里所说的是指,实际的用户需要就是字段的长度需要。比如,有人经常将日期分成3个字段来定义,可能写nian char(2),即2位的年;yue char(1)即1位的月,ri char(2),2位的日。这样在年份只能存放2位,2000年存为00,2001年存为01;而月份就不同了,设计者要求用户1月输入成1,2月输入成2,…而10月输入成a;11月输入成b等。

这种设计形式好像节省了很多的空间,但实际上也没有节省多少,一条记录节省的也就是2个字节,那么成千上万条的记录也不过节省几十兆字节而己,这样的处理方式只会给程序的处理增加时间,对于优化和未来的移植是起到阻碍作用的。

2.4将LOB类型的字段与其它的类型分开

Oracle8i提供了许多可以用于存储大对象数据的类型,如LONG,LONG RAW等。从性能的角度考虑出发,建议在设计表格的时候将那些相对较大的对象跟其他种类的数据分开储存。比如职工的档案证件这些东西,职工档案其内容包含有一些关于职工的基本情况、相片之类的东西,在设计过程需要将这些信息与职工的信息进行分割,最后采取关键字段进行连接处理。

3采用具有编码的设计方法

在对多处使用值采用编码设计的阶段里,类似员工的单位名称这个部位,因为员工的里面包含的员工很多,假设在记录过程将每个员工的单位都进行记录,那么就会出现传说中的冗余现象。编码大概是划分为2中,排除刚才叙述的一种之外,还需要考虑另外一种,考虑一些应用使用性能方便的应用。比如,银行存款系统的应用,这个设计过程可以考虑考法一款(交易代码)的程序代码。分别用(存入、取出、结息)这3个步骤表示,可以将该字段取名为:

tran_code char(1) check(tran code'1,ortran code=2or tran code=3),

在设计操作处理界时,只有3种步骤供使用者选用,即“存入”“取出”“结息”3种选择,这样可以避免让操作员直接输入字符所带来的不一致等的问题。

在Oracle系统里,提供了功能特别的decode函数。使用它可以在性能上得到特别的效果。这样使用的前提是,先在建立表结构时就需要将该列描述为较短的宽度。然后在SQL语句中来使用它。如:银行的活期存款表结构,可以对借贷字段存入或取出。

4建立公共字典表

除了以上提到的建立代码的方法外,在现实设计中还有一种使用较为广泛的方式,就是对象数据字典的建立,其与Oracle系统的数据字典类似。应用系统的数据字典也是为了各个对象的命名标准而采用的方法。凡是表名、索引名、表中的列名以及过程所用名称等最好以数据字典的方式在数据库建立。这样可以让Oracle系统帮助人们检查。在一个新的对象需要建立命名的时候,需要将其设立在这个字典里面。这里需要和客户取得沟通后才能进行下一步工作,在对讨论出来的结果认定后就不能随便更改,但是遇到非要更改的情况时,一定要经过DBA的同意并且备案才能修改。另外一个建议是建立过程要控制两者不能建立相同的名字,为了做好这一点,建议先将各种关键字放到一个表格里面,在建立时候再进行比对,以这样的方式很好地避开重复。

5哪种类型的表设为cache方式

Oracle提供了一种方法,可以将表的数据驻留在内存的SGA区内,这叫做缓存(cache)。一般来说,对于在应用中那些数据量不大、被频繁访问的表,应该将其设置成缓存方式,这样在数据库启动完成后被说明为缓存的表的数据就被系统读到SGA区中了。可以用Alter table或Create table命令上加cache子句使表成为缓存表(一直放在SGA区内不被清除)。

如:alter table ACCOUNT_CODE cache;

如果不需要缓存而取消缓存设置可用nocache来完成。如:alter ACCTOUNT_CODE nocache;

例:在建表时将表设置成缓存的方式:

SQL>CREATE table phone_1st

(employee Id number,

phone_no varchar2(15),

extension varchar2(5)

)tablespace users

storage(INITIAL 1m next 500k pctincrease 0)

CACHE;

对于已经将表设置成Cache的信息,可以从DBA_TABLES字典中查到,如:

SQL>select owner,table_name from dba_tables

Where LTRIM(cache)=Y;

6结语

正确地对数据库表进行设计,直接关乎到每个用户的切身利益,也直接影响到企业的效益。所以需要合理科学的设计数据库中的表,提高系统的性能。

猜你喜欢
主键
Spark环境下SQL优化的方法
MVC应用程序开发课程教学中存在问题浅析
“三师共管”患者服务平台构建
基于MySQL数据库实施完整性约束的研究
浅析SQL Server数据库在搅拌站控制系统中的设计与应用
面向OLAP应用的OceanBase模式设计
数据库主键设置探讨
锦屏二级水电站转子磁轭热加垫工艺应用分析
评价系统的数据库优化查询设计