数据库中视图、表和索引的区别和联系及表约束和内建DataTy
数据库中,表是基本的对象,数据库中的数据就是存储在表空间中的容器的表上的。
视图是不占用存储空间的,视图只是基本表或者其它视图或者这两者的组合的一个逻辑映像而已。是为了方便用户或者应用程序使用基本表中的记录而设计的。视图可以针对不同的用户显示表中的不同部分的记录,或者在显示的时候可以使用更加人性化的列名。可以说,视图是数据库表对用户的一个窗口,以更加易读的方式展示表中的数据。
视图也分为两种。read-only和update。只读视图只允许查看,而update视图则允许通过该视图来更新或者增加基本表中的记录.
索引。索引针对列的。可以在一列或者多列上建立索引。其实质就是在这些列上的值放入一个有序的列表中。这样把本来无序的基本表(数据库中的表是无序的,表中的记录的先后顺序可以任意。)变为有序的了。
主要有两个作用:
1.在查询该表的时候,如果在该表的列上建立了索引,因为索引是有序的,那么就会查询该表的索引,这样在有序的索引中查找记录,查到后,再返回该找到的索引所对应的记录,这样可以大大的提高表的查询速度。
2.可以通过在表上建立索引,来把本来无序的表变为有序的,这样就可以按照一定的顺序来得到表中的记录了。
表的索引分为两种:唯一性索引和非唯一性索引。建立唯一性索引时,所建立索引的列的值必须是不可重复的。
比如,当在一列上建立唯一性索引的时候,如果该列可以为null,那么连null也只能出现一次,否则将不允许插入记录。可见,唯一性索引对建立索引的列实施了唯一性要求。实质上,约束中的主键约束和unique约束就是靠的唯一性索引来实现的。
当在表格的列上建立主键约束或者unique约束的时候,默认的在这些列上建立了唯一性索引,正是通过这个建立的唯一性索引来确保这些列上值的唯一性的。
列上的升序索引适合于该列上的MIN函数, 列上的降序索引适合于该列上的MAX函数,此外,也可以创建双向索引。
创建索引的时候,db2首先提取列上的所有key,然后排序,再将排好序的key list存储在数据库中。对于DMS中的表,在创建表的时候可以指定该表上的索引的存放表空间,否则,将采用默认值,且一旦表创建了以后,该表的索引的存放表空间将不可改变,除非删掉该表重新建表。
与视图相似,表上的索引一旦创建以后,就不能更改了。除非删除重新建立。但是与视图不同的是,索引是需要占用存储空间的,索引是放在数据库的表空间的。
在建立索引时候,可以使用include 列(仅仅针对unique index)。include 列将会被复制到索引中,但是不参与排序,这主要是为了提高一些查询的性能的。索引是表中数据的拷贝,所以,当表中的数据更新了,相应的索引的数据也必须更新。
数据库中,可以在表的列上定义很多约束,包括以下三类。这些约束可以用来检查列上的值是否符合一定的规则。
1.主键约束,唯一性约束。
主键约束是一种加强的唯一性约束(unique constraint),且只能定义在not null列上。该约束要求列上
的所有值互相不能重复(这是唯一性约束的作用)。此外,主键约束还可以让其它的表参照,从而在其它表上的列上定义参照该主键的外键约束(也就是参照完整性约束)。这是主键约束比唯一性约束的一个优点,但是在一个表上,只能定义一个主键约束,但是可以定义多个唯一性约束。
2.外键约束。
外键约束也就是参照完整性约束。定义该约束的列不要求一定为not null,但一般也是not null的。定义该约束的列上的值有这样的限制,就是它必须是某个其它表上的主键取值的其中的一个。否则,不能插入或者更新。
3.检查性约束(check constraint)
这种约束其实是为了给表的定义者一些灵活性。让表的定义者能自己定义一些表的列上的值的输入规则,自己规定列上那些值可以输入,那些值不允许输入。它比唯一性约束更加灵活,唯一性约束只是要求列上的值各不相同,但是检查性约束则要求必须满足所规定的规则,否则,无法插入或者更新列的值。
posted on 2010-12-06 21:13 Delphi7456 阅读(1188) 评论(0) 编辑 收藏 举报