DB2 视图,表和索引的区别和联系及表约束和内建DataType

DB2中,表是基本的对象,数据库中的数据就是存储在表空间中的容器的表上的。 视图是不占用存储空间的,视图只是基本表或者其它视图或者这两者的组合的一个逻辑映像而已。是为了方便用户或者应用程序使用基本表中的记录而设计的。视图可以针对不同的用户显示表中的不同部分的记录,或者在显示的时候可以使用更加人性化的列名。可以说,视图是数据库表对用户的一个窗口,以更加易读的方式展示表中的数据。 视图也分为两种。read-only和update。只读视图只允许查看,而update视图则允许通过该视图来更新或者增加基本表中的记录(的确貌似很强大的功能,不过没有试用过。)
   索引。索引针对列的。可以在一列或者多列上建立索引。其实质就是在这些列上的值放入一个有序的列表中。这样把本来无序的基本表(数据库中的表是无序的,表中的记录的先后顺序可以任意。)变为有序的了。主要有两个作用:1.在查询该表的时候,如果在该表的列上建立了索引,因为索引是有序的,那么就会查询该表的索引,这样在有序的索引中查找记录,查到后,再返回该找到的索引所对应的记录,这样可以大大的提高表的查询速度。2.可以通过在表上建立索引,来把本来无序的表变为有序的,这样据可以按照一定的顺序来得到表中的记录了。
  表的索引分为两种:唯一性索引和非唯一性索引。建立唯一性索引时,所建立索引的列的值必须是不可重复的。比如,当在一列上建立唯一性索引的时候,如果该列可以为null,那么连null也只能出现一次,否则将不允许插入记录。可见,唯一性索引对建立索引的列实施了唯一性要求。实质上,约束中的主键约束和unique约束就是靠的唯一性索引来实现的。当在表格的列上建立主键约束或者unique约束的时候,默认的在这些列上建立了唯一性索引,正是通过这个建立的唯一性索引来确保这些列上值的唯一性的。
  列上的升序索引适合于该列上的MIN函数,  列上的降序索引适合于该列上的MAX函数,此外,也可以创建双向索引。
 创建索引的时候,db2首先提取列上的所有key,然后排序,再将排好序的key list存储在数据库中。对于DMS中的表,在创建表的时候可以指定该表上的索引的存放表空间,否则,将采用默认值,且一旦表创建了以后,该表的索引的存放表空间将不可改变,除非删掉该表重新建表。
  与视图相似,表上的索引一旦创建以后,就不能更改了。除非删除重新建立。 但是与视图不同的是,索引是需要占用存储空间的,索引是放在数据库的表空间的。

 在建立索引时候,可以使用include 列(仅仅针对unique index)。include 列将会被复制到索引中,但是不参与排序,这主要是为了提高一些查询的性能的。索引是表中数据的拷贝,所以,当表中的数据更新了,相应的索引的数据也必须更新。

 

 

在DB2中,可以在表的列上定义很多约束,包括以下三类。这些约束可以用来检查列上的值是否符合一定的规则。
1.主键约束,唯一性约束。
 主键约束是一种加强的唯一性约束(unique constraint),且只能定义在not null列上。该约束要求列上
的所有值互相不能重复(这是唯一性约束的作用)。此外,主键约束还可以让其它的表参照,从而在其它表上的列上定义参照该主键的外键约束(也就是参照完整性约束)。这是主键约束比唯一性约束的一个优点,但是在一个表上,只能定义一个主键约束,但是可以定义多个唯一性约束。
2.外键约束。
  外键约束也就是参照完整性约束。定义该约束的列不要求一定为not null,但一般也是not null的。定义该约束的列上的值有这样的限制,就是它必须是某个其它表上的主键取值的其中的一个。否则,不能插入或者更新。
3.检查性约束(check constraint)
  这种约束其实是为了给表的定义者一些灵活性。让表的定义者能自己定义一些表的列上的值的输入规则,自己规定列上那些值可以输入,那些值不允许输入。 它比唯一性约束更加灵活,唯一性约束只是要求列上的值各不相同,但是检查性约束则要求必须满足所规定的规则,否则,无法插入或者更新列的值。

 

 DB2 data types fall into three categories: types for string data; types for numeric data; and types for dates, times, and timestamps.

字符类型:

CHAR(n) or CHARACTER(n)
   n个固定长度的单字节字符(一个字符用一个字节(8bit)表示)串。n最大为254.

VARCHAR(n) /CHARACTER VARYING(n) or CHAR VARYING(n)
n个变长的字符,一个字符用一个字节(8bit)表示。在实际存储数据的时候,按照实际的大小存储,比如n为8的时候,如果存入的数据的大小为4个字符,那么实际上将占用4个字符的空间。这样就可以有效的利用存储空间了。n的取值规定了该列最大能存储的字符的大小,实际上花掉的大小与实际存入的大小相等。n最大为32672.

CLOB(n[K|M|G]) :
  Character Large Object String.变长单字节大对象字符串。用于存储大单字节字符集合,最大为2G--Large Single-byte Character Set(SBCS)。
   n--能容纳n个字符。
   nk--能容纳nk(n*1024 bytes 即:n*1024 )个字符.n最大为2097152.
   nM--能容纳nM(n*1024*1024 bytes 即:n*1024*1024)个字符.n最大为2097152/1024=2048.
  nG--能容纳nG(n*1024*1024*1024  bytes 即:n*1024*1024*1024 ) 个字符.n最大为2097152/1024/1024=2. 
  
BLOB(n[K|M|G])--Binary Large Object 变长二进制字节字符串。常常用于存储图像,声音等媒体信息。
n--能容纳n个字符。
   nk--能容纳nk(n*1024 bytes 即:n*1024 )个字符.n最大为2097152.
   nM--能容纳nM(n*1024*1024 bytes 即:n*1024*1024)个字符.n最大为2097152/1024=2048.
  nG--能容纳nG(n*1024*1024*1024  bytes 即:n*1024*1024*1024 ) 个字符.n最大为2097152/1024/1024=2. 

GRAPHIC(n)
固定长度的双字节(2byte=8*2bits)字符串。n最大为127。默认为1.

VARGRAPHIC(n)
变长的双字节(2byte=8*2bits)字符串。n最大为16336。

LONG VARGRAPHIC
变长的双字节(2byte=8*2bits)字符串。n最大为16350。

DBCLOB(n[K|M|G])--Double-byte Character Large Object String.
变长双字节(2byte=8*2bits)大对象字符串。用于存储大双字节字符集合,最大为1G个双字节字符--Large Double-byte Character Set(SDCS)
   n--能容纳n个双字节字符。
   nk--能容纳nk(n*1024 bytes 即:n*1024 )个双字节字符.n最大为1048576.
   nM--能容纳nM(n*1024*1024 bytes 即:n*1024*1024 )个双字节字符.n最大为1048576/1024=1024.
  nG--能容纳nG(n*1024*1024*1024  bytes 即:n*1024*1024*1024 )个双字节字符.n最大为1024/1024=1. 

日期类型:日期類型的DB2内部表示为具有一定格式的字符串。日期类型即不是字符串類型,也不是數值類型,但是它可以參與一些数学计算或字符串操作。

DATE:
DB2内部表示为:“2009-05-07".由数字开头,至少应该包含8个单字节字符,月和日的起始的0可以省略。由年(0001-9999), 月(01-12), 日(01-n,n取决于月) 三部分来表示。用10个单字节字符来表示。所以被定义为DATE类型的列的长度为10bytes.


TIME:
TIME内部表示为:由三部分组成。由数字开头,至少应该包含4个单字节字符,小时的起始的0可以省略,秒可以完全省略,省略后默认为0。小时,分,秒。 DB2内部由8个单字节字符表示。

TIMESTAMP:
TIMESTAMP内部表示为:由7部分组成(综合了DATE和TIME,毕竟是TIMESTAMP,果然很相信)。包括了年月日小时分秒和微秒。其中微秒范围为:000000-999999.DB2内部由26个单字节字符表示。如:1988-12-25-17.12.30.000000. 由数字开头,至少应该包含16个单字节字符,其完整的字符串表示为:yyyy-mm-dd-hh.mm.ss.nnnnnn.月,日,小时的起始的0可以省略,微秒可以被截断或者完全省略,截断的部分默认为0,省略后默认为000000。

数值型:所有的数值型都有符号位和精度。符号为默认为+,精度指:该类型的bytes的表值范围的位数(除掉符号位)。
SMALLINT:2个字节(byte)表示的整数。范围:-32768--32767.精度:5个数字(即能够表达正负5个数字的范围)。

INTEGER or INT:
4个字节(byte)表示的整数。范围:-2147483648--2147483647.精度:10个数字(即能够表达正负5个数字的范围)。

BIGINT:
8个字节(byte)表示的整数。范围:-9223372036854775808--9223372036854775807.精度:19个数字(即能够表达正负5个数字的范围)。

DECIMAL(p,s) /DEC(p,s),NUMERIC(p,s) or NUM(p,s):
表示小数。其中p表示精度,即:不包括符号位和小数点的数字的个数的最大值。s表示scale,即:小数点后的位数。s不能为负数,而且不能大于p。 p-s得到整数的位数。精度p的最大取值为31,也就是说最多可以有31个数字(包括整数和小数部分)。表值范围为:-10的31次方到10的31次方-1。存储的时候,采用了压缩算法,占用p/2+1个字节的存储空间。


REAL--Single-precision floating-point:
用来近似的表示实数。采用4bytes(32bits)来表示。表值范围为:-3.402E+38到-1.175E-37 或者 1.175E-37到3.402E+38。包括0.

DOUBLE/DOUBLE PRECISION or FLOAT--DOUBLE-precision floating-point:
用来近似的表示实数。采用8bytes(64bits)来表示。表值范围为:-1.79769E+308到-2.225E-307 或者 2.225E-307到1.79769E+308。包括0.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walkingmanc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值