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