欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库程序设计9 表结构设计——数据结构设计

程序员文章站 2022-07-13 15:43:29
...

目录

Oracle数据类型

数值类型

number

binary_float和binary_double

特殊值

其他数值类型

字符类型

char

VARCHAR2

NCHAR/NVARCHAR2

日期类型

DATE类型

大对象

lob对象

Rowid\URowid 类型


Oracle数据类型

数据库程序设计9 表结构设计——数据结构设计

数值类型

number

一般用于数值运算的。

Number(precision,scale)

precision:精度。也称为总位数,取值范围1~38,默认值为38,也可以用字符*表示38。

版本10之后的新类型:

binary_floatbinary_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) 


其他数值类型

数据库程序设计9 表结构设计——数据结构设计

效率不同,效率会比较高。

字符类型

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对象都由两部分组成:指针(定位器)和数据内容。

数据库程序设计9 表结构设计——数据结构设计

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并不作为一个单独的列存在,而只是作为现有列的一个函数。
 

相关标签: 数据库