Oracle表设计时的注意事项
  表是Oracle数据库中最基本的对象之⼀。万丈⾼楼从平地起,这个基础对象对于数据库来说,⾮常重要。因为其设计是否合理,直接跟数据库的性能相关。从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与管理上,或多或少,会犯⼀些错误。笔者今天就谈谈⾃⼰在这⽅⾯的经验与教训,或许能够给⼤家⼀些警⽰作⽤。
varchar2最大长度  经验⼀:在设计⼤型数据库时,把允许NULL的列放在表的后⾯。
  在数据库表设计过程中,有些字段要求必须为⾮空,如表的关键字,单据编号字段等等。在数据库表创建的时候,往往需要把这些字段设置为⾮空。如此的话,就可以强制⽤户输⼊数据,以增强数据的⼀致性。
  同时,在⼀张表中,也会有不少的字段,如员⼯信息表中,员⼯爱好、注释等字段,就可能允许为空。利⽤数据库专业术语来说,这些没有内容的字段就是“NULL”字段。
  在数据库表设计的时候,对于这种类型的空字段要特别的留意。⼀⽅⾯,这个NULL字段,不是说其⾥⾯存储的是空格。若利
⽤“’’”这个符号去查询空字段的记录的话,往往查不到我们想要的结果。因为在数据库存储的时候,若字段
为NULL,则这个值根本没有存储。另⼀⽅⾯,正因为上⾯这种特性,所以,在表设计的时候,最好把允许NULL的字段放在表的末尾,当数据库⽐较⼤或者空字段⽐较多的话,则可以⼤⼤的减少数据库的存储空间。
  另外,在数据库创建表的时候,是按照列建⽴的时间来排序的。所以,当某个列建⽴好之后,除⾮重新删除再建⽴,否则⽆法调整列的顺序。这就要求数据库管理员在创建表之前,就要对列、以及是否为空有⼀个明确的定义。只有如此,才能够合理安排列的顺序。
  经验⼆:养成勤于写注释的习惯。
  判断⼀个⼈是否是数据库专家,从⼀个“注释”的⼩习惯中就可以 看得出来。若⼀个⼈在数据库开发的时候,勤与写注释,如在建⽴表或者字段的时候,能够利⽤comment命令对表与字段进⾏注释,则可以从⼀定程度上判断他是这⽅⾯的⾏家。相反,若其开发的数据库,注释没有多少,则基本可以判断,他是⼀个刚⼊门的菜鸟。或者说,其没有参加过⼤型数据库的设计。
  这主要是因为,在数据库开发过程中,往往不是⼀个⼈可以完成的。如在开发⼀个ERP数据库的时候,可能有些⼈专门负责开发基础表,⽽有些⼈负责维护视图,等等。⼤家都是分⼯合作。同时,在前台也有程序员需要调⽤后台的数据库表与字段。所以,中⼤型的数据库与应⽤系统往往是⼤家协作的结果。
  为此,为了提⾼表与字段的可读性,⼀个数据库管理⼈员开发的表格,⼤家都可以看的懂,就需要给表与字段设置⽐较详尽的注释。在Oracle数据库中,为了给其他伙伴提供有意义的帮助信息,就可以利⽤Comment命令来描述表、字段的作⽤以及⼀些引⽤的注意事项。这个⼩⼩的命令,可以⼤⼤提⾼表与字段的可读性,提⾼数据库与程序开发团队的协作性。
  经验三:选择合适的数据类型与长度。
  虽然数据库系统在处理数据时,某些数据类型是兼容的,或者会对相关的数据类型进⾏⾃动的转换。如对于⼀些⽇期类型的字段,其也可以赋值给字符类型的字段;整数型的字段跟浮点型的数据类型也是兼容的。但是,数据库设计⼈员不能因为数据库系统的这个特性,就放宽了对数据类型的把关。因为有时候,如在基础数据导⼊或者数据成批更新的时候,虽然最后可以成功完成任务。但是,数据库在这个过程中,需要进⾏数据类型的转换,就额外的增加了数据库的负担。
  另外,在数据库设计的时候,也需要考虑字段的长度。若在建⽴表的时候,字段设计的太长,则会浪费存储空间。相反,若设计的太短的话,会影响前台系统的使⽤。所以,数据库管理员对于字段的长度,也要引起⾜够的重视。
  再者,若在创建字段的时候,不能够确认字段长度的话,则最好采⽤变长的数据类型。如以字符型数据类型为例,就有CHAR与VARHAR2两种。其中,CHAR字符类型主要⽤来存储固定长度的字符串,允
许的最⼤长度为2000字节。若实际存储的信息内容不到定义的位数的话,则系统会在这些列值为部添加空格,直到其长度到为⽌。可见,若采⽤固定长度字段类型的话,即使数据没有这么多,也会占⽤这么多的存储空间。所以,这种⽅式下,存储空间的浪费会⽐较⼤。后者主要⽤来存储可变长度的字符数据。当在VARCHAR2列中插⼊的数据,如果没有到其最⼤位数的话,则数据库不会在尾部添加空格。从⽽可以让空间利⽤最⼤化。
  所以,在表设计的时候,数据库管理员要选择合适的数据类型,并且为其设置合适的长度。
  经验四:确定表需要采⽤的完整性约束与默认值。
  经验四:确定表需要采⽤的完整性约束与默认值。
  有些数据库管理员在数据库设计的时候,喜欢边设计边开发。如在设计表的时候,⼀开始不确定那些字段要添加约束,哪些字段不能为空,哪些字段需要什么默认值等等。等到需要的时候,再随意添加。这种做事⽅式,往往会给数据库带来不稳定的隐患。
  如某个数据库管理⼈员在建⽴表的时候,⼀开始没有给某个字段设置为默认值。后来前台程序开发⼈员说需要给这个字段添加某个默认值。但是,此时这个表中已经有了跟系统相关的基础数据。有了数据的表格后,往往不允许再重新设置默认值。否则的话,会给数据库造成⼀定的负⾯影响。
  所以,笔者认为,数据库管理员在建⽴表之前,需要确定表所需要的完整性。如哪些列作为主键;哪些列作为外键;哪些列需要唯⼀性等等。
  经验五:确定表需要采⽤的类型。
  在Oralce数据库中,存储⽤户数据可以使⽤标准表、索引表、筑表和分区表。有时候,基于不⽤的应⽤,选择不同类型的数据表,往往可以⼤⼤的提⾼数据库的性能,特别是数据查询的效率。
  如在合适的情况下,数据库管理员可以使⽤筑表节省存储空间并提⾼特定类型的SQL语句的性能。不过,我们平时利⽤的⽐较多的出了基本表之外,就是索引表了。因为索引表在某些特殊的应⽤下,可以表现出很好的性能。如在索引表中,可以通过溢出存储功能提⾼常⽤列的查询速度;如果经常需要通过主键来查询整条记录的话,则利⽤索引表可以明显提⾼查询效率。当然,索引表也不能够乱⽤。若索引表所存储的数据,变化⽐较频繁的话,则采⽤索引表这种类型的表格,反⽽会事倍功半。
  所以,为数据库表选择合适的类型,可以⼤幅度的提⾼数据库的性能。当数据库的记录数量越⼤,这种优势就越明显。
  总之,笔者认为,在Oracle数据库设计中,表的建⽴虽然是⼀项基础⼯作。但是,有时候对于数据库的性能,⽐其他内容影响更加深远。所以,我们要重视表的设计,从基础做起,为提升数据库的性能⽽努⼒。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。