通常数据库表设计理念:
1.遵循基本的三大范式。
2.数据库只用来存储数据 别把过大的压力丢给数据库 别用过多复杂sql语句来进行运算。
3.对于字段数多和数据量大的表,根据业务查询需求能拆分尽量拆分(垂直拆分:拆字段分表;水平拆分:分区或分小表)。
分区还是分小表???:
大的分区表优点:
1. 表名对于应用透明,无需额外工作
2. 分区操作提高可维护性及高可用性
3. 如果应用中大量用到分区键作为查询条件之一,那么Local Index会带来性能提升
大的分区表缺点:
如果应用中大量的查询不包含索引分区键,而Local Index又无法满足性能要求,那么必须创建的Global Index将带来恐怖的rebuild体验
结论:
如果可以忍受大的分区表的缺点,那么就去选择分区表吧
如果不可以,那么只能用多个小表,可以通过视图 union all等方法满足应用方面需要查询多个小表数据的需求
4.设计用户表字段时,关联到权限的时候要有是否可读可写可删除 isread,iswrite,isdelete字段。
5.数据表名和字段名命名规范,达到一看就懂的地步。各个应用或模块的表最好用前缀区分开。
命名规则:
1、必须以字母开始。
2、长度不能超过30个单字节字符。
3、只能包括A-Z,a-z,0-9,_,$和#。
4、不能在相同用户下建立两个同名的对象,
5、不能使用oracle的保留字和关键字。
6.字段类型和长度要合理,字段类型尽可能反应正式的数据含义,满足功能时字段长度尽可能短。
VARCHAR2 (size)可变长度的字符串,必须规定长度
CHAR(size)固定长度的字符串,不规定长度默认值为1
NUMBER(p,s)数字型p是位数总长度, s是小数的长度,可存负数,最长38位.不够位时会四舍五入.
DATE日期和时间类型
LOB超长字符,最大可达4G
CLOB超长文本字符串
BLOB超长二进制字符串
BFILE超长二进制字符串,保存在数据库外的文件里是只读的.
虽然数据库系统在处理数据时,某些数据类型是兼容的,或者会对相关的数据类型进行自动的转换。如对于一些日期类型的字段,其也可以赋值给字符类型的字段;整数型的字段跟浮点型的数据类型也是兼容的。但是,数据库设计人员不能因为数据库系统的这个特性,就放宽了对数据类型的把关。因为有时候,如在基础数据导入或者数据成批更新的时候,虽然最后可以成功完成任务。但是,数据库在这个过程中,需要进行数据类型的转换,就额外的增加了数据库的负担。
另外,在数据库设计的时候,也需要考虑字段的长度。若在建立表的时候,字段设计的太长,则会浪费存储空间。相反,若设计的太短的话,会影响前台系统的使用。所以,数据库管理员对于字段的长度,也要引起足够的重视。
再者,若在创建字段的时候,不能够确认字段长度的话,则最好采用变长的数据类型。如以字符型数据类型为例,就有CHAR与VARHAR2两种。其中,CHAR字符类型主要用来存储固定长度的字符串,允许的最大长度为2000字节。若实际存储的信息内容不到定义的位数的话,则系统会在这些列值为部添加空格,直到其长度到为止。可见,若采用固定长度字段类型的话,即使数据没有这么多,也会占用这么多的存储空间。所以,这种方式下,存储空间的浪费会比较大。后者主要用来存储可变长度的字符数据。当在VARCHAR2列中插入的数据,如果没有到其最大位数的话,则数据库不会在尾部添加空格。从而可以让空间利用最大化。
7.系统中的数据是不是很重要,如果很重要,在删除的时候就不要真的删除,添加删除标志isdelete物理删除。或添加有效标志isenable 。
8.重要数据的操作员工、操作时间要有字段进行记录。
9.默认值和约束(主键、外键、唯一性等)根据需要添加。
10.适当添加冗余字段。
11.最好把允许NULL的字段放在表的末尾,当数据库比较大或者空字段比较多的话,则可以大大的减少数据库的存储空间。
12.为了提高表与字段的可读性,注释要详尽到位。
13.确定表需要采用的类型(标准表、索引表等)。