数据库程序设计9 表结构设计——数据结构设计
目录
Oracle数据类型
数值类型
number
一般用于数值运算的。
Number(precision,scale)
precision:精度。也称为总位数,取值范围1~38,默认值为38,也可以用字符*表示38。
版本10之后的新类型:
binary_float和binary_double
在Oracle10g之前的版本中没有这两种类型。他们就是IEEE标准浮点数,用于近似数值,没有NUMBER类型精确。
特殊值
BINARY_FLOAT_NAN | 非BINARY_FLOAT类型的数字(NaN) |
BINARY_FLOAT_INFINITY | BINARY_FLOAT类型的无穷大(INF) |
BINARY_DOUBLE_NAN | 非BINARY_DOUBLE类型的数字(NaN) |
BINARY_DOUBLE_INFINITY | BINARY_DOUBLE类型的无穷大(INF) |
其他数值类型
效率不同,效率会比较高。
字符类型
Oracle中的字符数据类型包括CHAR、 VARCHAR2以及带“N”的相应变体(NCHAR 和NVARCHAR2),这些字符数据类型能存储 2000字节或4000字节的文本。这些文本会由数 据库根据需要在不同的字符集(character set)之间进行转换。
CHAR、VARCHAR2、NCHAR、 NVARCHAR2都是以同样的格式进行存储。
纯英文不需要n开头的,处理中文日文等需要考虑带n的。
char
CHAR (size[ BYTE | CHAR] )
VARCHAR2
VARCHAR2 (size[ BYTE | CHAR] )
VARCHAR2是变长字符串类型,不会用空格填充至最大长度。此类型最多可存储4000字节的信息。
NCHAR/NVARCHAR2
带N表示Unicode字符集,兼容中文。
NVARCHAR2和NCHAR与相应的VARCHAR2和CHAR的区别在于:
- 文本采用数据库的国家字符集来存储和管理,而不是默认字符集
- 长度总是字符数,而CHAR/VARCHAR2可能会指定是字节还是字符
日期类型
Oracle固有数据类型DATE、TIMESTAMP和 INTERVAL是紧密相关的。DATE和 TIMESTAMP类型可以存储固定日期/时间。 INTERVAL类型可以存储一个时间量。
DATE类型
DATE类型是一个7字节的定宽日期/时间数据 类型。它总是包含7个属性,包括:世纪、世纪中的哪一年、月份、月份中的哪一天、小时、分钟和秒。Oracle使用一种内部格式来表示这些信息。
存储中,oracle将不同字段分开存。在使用时,我们经常会将年月日分开使用。
大对象
Oracle Database 10g系统提供了4种大对象 (large object,lob)类型。这4种大对象类型的 特点分别如下:
- blob类型:二进制lob类型,主要用于存储二进制 数据。
- clob类型:字符lob类型,可以用来存储各种字符 数据。
- nclob类型:国际语言字符lob类型,使用多字节存 储各种语言的字符,主要用于存储非英文字符。
- bfile类型:二进制file类型,用于存储指向数据库 系统外的文件系统中的文件的指针。这些外部文件 可以储存在硬盘上、DVD或CD等介质上。
尽量使用lob类型来处理,因为兼容。
lob对象
每一个lob对象都由两部分组成:指针(定位器)和数据内容。
LOB数据的处理
对于每一个lob列,Oracle系统将保存一个定 位器值,以便找到该记录存储的外部数据。 在向包含了lob值的表中插入记录时,可以用 函数来告诉Oracle为内部存储的lob列创建一 个空定位器。
注意,空定位器值与null值不同。如果一个内 部存储的lob列值为null,那么在更新为非null 值之前,必须将其设置为空定位器.
在Oracle系统中,可以采用以下方式设置Lob 数据的空定位器:
- blob:empty_blob()
- clob:empty_clob()
- bfile:bfilename()
提高大对象的使用效率
Database 10g系统提供了许多提高使用大对象效率 的方法。这些方法主要包括:
- 数据分区技术
- 压缩数据技术
- 并行处理技术
- 物化视图技术
- RAC技术 (实时应用集群)
数据分区技术
在Oracle Database 10g系统中,可以通过采 用分区技术,将大量的业务数据分区成比较小的数据。但是,这种分区技术对于终端用户来说是不透明的。在Oracle Database 10g系统 中,从终端用户的角度来看,这里只有一个表。
压缩数据技术
如果业务数据的增长速度超过了系统设计的能 力,那么会由于数据量过大带来一系列查询性 能上的问题。这时,可以使用Oracle database 10g系统提供的压缩数据功能来压缩业务数据,从而降低数据量。
并行技术
在Oracle Database 10g系统中,还可以通过并行处 理的方式来提高查询的性能。并行处理适用于大量数 据需要处理的情况,例如,扫描包含大量数据的表、 连接查询多个表、创建大表的索引和扫描分区索引等。
物化视图技术
物化视图具有视图的特征,但是与视图也不完 全相同。可以基于select语句创建物化视图, 但是物化视图可以物理地保留和存储数据。使用物化视图,可以执行各种查询操作、可以被 分区、可以被压缩、可以被并行处理,甚至可 以在其上面创建索引。
Rowid\URowid 类型
ROWID是数据库中一行的地址。ROWID中编入了足够多的信息,足以在磁盘上找到行,以及标识ROWID所指向的对象。ROWID并不真正存储在行中,而是行的一个推导属性,基于行的物理地址生成。
UROWID是ROWID的“近亲”。它用于比如索引组织表(IOT) 和通过异构数据库网关访问的没有固定ROWID的表。UROWID基于行的主键生成,是行主键值的一个表示。但是,UROWID并不作为一个单独的列存在,而只是作为现有列的一个函数。