在Oracle数据库中有以下几种常见的存储用户数据的方法:
*表(table)
*分区表(table partition)
*簇(cluster)
*索引表(index-organized table)
其中,表是数据库中最常用的存储数据的机制,在一个表中所存储的数据是无序的,dba无法控制某一行数据存储在一个表中的具体位置。
Oracle规定在一个表中的所有数据必须存放在一个表空间中。
Oracle系统提供了一些内置的数据类型。
包括标量数据类型,集合数据类型和关系数据类型。
其中,标量数据类型包括:
(1)varchar2(size)和nvarchar2(size):变长字符型数据。
其中,size为该列最多容纳的字符个数。size必须定义。它的默认值和最小值均为1,它的最大值为4000字符
。
(2)char(size)和nchar(size):定长字符型数据。
其中:
size为该列最多容纳的字符个数,它的默认值和最小值为1.它的最大值为2000字符。
这里的nvarchar2和nchar是用来存储全球化支持数据的数据类型。它们可以存储定长的或变长的多字节字符集的字符。这里的N是national的第一个字符。
(3)date:日期型数据
其中:
详细的:
timestamp:除了日期和时间之外还包括多达小数点后9位的秒数。
timestamp with time zone
timestamp with local time zone
以上三种类型只有在开发对时间要求非常高的数据库系统时才有用,如有几个服务器分别坐落在不同的国家(不同时区)的订货系统。
(4)number(p,s):数字型数据
其中,p为十进制的总长度(位数),s为十进制小数点后面的位数。p的最小值为1,最大值为38.s的最小值为-84,最大值为124
除了以上几种数据类型外,为了处理多媒体对象,还提供了LOB数据类型:
*CLOB和nlclob数据类型。用于在数据库中存储定长字节的大数据对象,如演讲稿或简历等。其中nclob是用来存储大的定长国家字符集数据。
*BLOB数据类型用于在数据库中存储大的无结构的二进制对象,如照片或幻灯片等。
CLOB和BLOB数据类型中的列中一些操作是不能直接使用Oracle的数据库命令来完成的,因此,Oracle提供了一个叫做DBMS_LOB的PL/SQL软件包来维护LOB数据类型的列。
*BFILE数据类型:用于在数据库外地操作系统文件中存储大的无结构的二进制对象,如电影胶片等。BFILE数据类型是外部数据类型,因此定义为BFILE数据类型的列是不能通过Oracle的数据库命令来操作的,这些列只能通过操作系统命令或第三方软件来维护。
*RAW数据类型:在数据库中直接存储二进制数据。此种类型的数据占有的存储空间小,操作效率也高。但在网络环境中在不同的计算机上传输资料时,Oracle服务器是不进行任何的字符集转换的.RAW数据类型的最大长度为2000个字节。
为了和以前的Oracle版本兼容,Oracle继续支持LONG和LONG RAW数据类型。
*LONG和LONG RAW数据类型:主要用于在Oracle8以前的数据库中存储无结构的数据。如二进制图像,文本件和地理信息等。
在Oracle8以后的版本中,LOB数据类型可以完全取代LONG数据类型。而且Oracle服务器操作LOB数据类型比操作LONG数据类型效率高的多。另外值可以在一个表中定义一个为LONG数据类型的列,但是可以任意定义多个LOB数据类型的列。
LONG数据类型的列最多存储2GB的数据,而LOB数据类型的列最多可以存储4GB的数据。
注:这里的LOB包括了CLOB,BLOB等数据类型。LONG包括了LONG和LONG RAW数据类型。
Oracle的集合数据类型包括了VARRAY变长数组和nested tables(嵌套表)。其中利用varray数据类型定义的列中存储的数据为一变长数组;而利用nested tables 数据类型定义的列中存储的数据本身又是一个表。
Oracle的关系数据类型只有一种为REF。利用REF数据类型定义的列中存储的数据为指向另一数据行的地址,这样可以加快两个表的连接速度。但是它们此时就不属于关系模型而是层次模型了。
以上三种类型尽量少用。
整理自 何明《Oracle DBA基础培训教程》