您的位置:首页 > 数据库

实验四 数据库模式对象管理

2016-12-31 20:26 260 查看
一、实验目的

1)  掌握表、索引、索引化表的概念及管理

2)  掌握分区的概念及分区管理

3)  掌握外部表的概念及其管理

4)  了解簇、视图、序列、同义词、数据库链接等的管理

二、预习内容

1)  什么是模式,模式有什么特点?

2)  Oracle数据库中模式对象有哪些?表空间、用户、角色、目录、概要文件及上下文问等数据库对象属于某个模式吗?

3)  如何进行模式的选择与切换?

4)  说明索引的作用,以及Oracle数据库中索引的类型。

三、实验环境

32位Windows XP/WindowsServer2000/Windows Server2003 +Oracle10g环境

四、实验内容

1)  按照下列表结构利用SQL语句创建class、student两个表。

class表
列名

数据类型

约束

备注

CNO

NUMBER(2)

主键

班号

CNAME

VARCHAR2(20)

 

班名

NUM

NUMBER(3)

 

人数

student表
列名

数据类型

约束

备注

SNO

NUMBER(4)

主键

学号

SNAME

VARCHAR2(10)

唯一

姓名

SAGE

NUMBER

 

年龄

SEX

CHAR(2)

 

性别

CNO

NUMBER(2)

 

班级号

create table class( CNO number(2) primary key, CNAME varchar2(20), NUM number(3) ) 

create table student( SNO number(4) primary key, SNAME varchar2(10) unique, SAGE number, SEX char(2), CNO number(2) ) 

2)  为student表添加一个外键约束,其CNO列参照class表的CNO列。

alter table student add constraint fk_cno foreign key (cno) references class(cno) deferrable;

3)  为student表的SAGE列添加一个检查约束,保证该列取值在0~100之间。

alter table student add constraint ck_sage check (sage>0 and sage<=100);

4)  为student表的SEX列添加一个检查约束,保证该列取值为“M”或“F”,且默认值为“M”。

alter table student add constraint ck_stu check(sex='M' or sex='F') modify sex default 'M'; 

5)  在class表的CNAME列上创建一个唯一性索引。

create unique index ind_cname on class(cname);

6)  利用子查询分别创建一个事务级的临时表和会话级的临时表,其结构与student表的结构相同。

Create global temporary table stu_trans oncommit delete rows as select * from student;

Create global temporary table stu_sess oncommit preserve rows as select * from student;

7)  创建一个索引化表,其表结构与student表相同。

Create table index_student(sno primary key,sname , sage, sex, cno)organization index as select * from student;

8)  创建一个student_range表(列、类型与student表的列、类型相同),按学生年龄分为3个区,低于20岁的学生信息放入part1区,存储在EXAMPLE表空间中;20-30岁的学生信息放在part2区,存放在ORCLTBS1表空间中;其他数据放在part3区,存放在ORCLTBS2表空间中。

create table student_range(sno number(4)primary key,sname varchar2(10),sage number,

sex char(2),cno number(2)) partition byrange(sage)(partition part1 values less than(20) tablespace example,partitionpart2 values less than(30) tablespace orcltbs1,partition part3 values lessthan(maxvalue) tablespace orcltbs2)

9)  创建一个student_list表(列、类型与student表的列、类型相同),按学生性别分为两个区。

create table student_list(sno number(4) primary key,snamevarchar2(10),sage number,sex char(2),cno number(2))partition bylist(sex)(partition man values('M') tablespace orcltbs1,partition womanvalues('F') tablespace orcltbs2)

 

10)    创建一个起始值为10000的序列,步长为2,最大值为100000,不可循环。

Create sequence sequ1 increment by 2 start with 10000 maxvalue100000 nocycle;

11)    为scott模式下的emp表创建一个公共同义词,名称为employee。

createpublic synonym emp_info for scott.emp;

12)    创建一个视图,包含员工号、员工名和该员工领导的员工号、员工名。

Create view employee_v(empno,ename,mgr_no,mgr_name) 

As Select e1.empno,e1.ename,e1.mgr,e2.ename  

from scott.emp e1 join scott.emp e2 on e1.mgr=e2.empno;

五、实验步骤

写出每一条实验内容对应的SQL语句。

六、思考题

1)  思考数据库中使用索引的优点和缺点,索引是如何工作的?

优点:

第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点:

第一,  创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 

第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

工作原理

SQL 当一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个8K用完的时候, SQLS指针会自动分配一个8K的空间。这里,每个8K空间被称为一个数据页(Page),又名页面或数据页面,并分配从0-7的页号,每个文件的第0页记录引导信息,叫文件头(File header);每8个数据页(64K)的组合形成扩展区(Extent),称为扩展。全部数据页的组合形成堆(Heap)。 SQLS 规定行不能跨越数据页,所以,每行记录的最大数据量只能为8K。这就是char和varchar这两种字符串类型容量要限制在8K以内的原因,存储超过 8K的数据应使用text类型,实际上,text类型的字段值不能直接录入和保存,它只是存储一个指针,指向由若干8K的文本数据页所组成的扩展区,真正的数据正是放在这些数据页中。

2)  Oracle数据库中对表和索引进行分区管理有何优点?

对巨型表进行分区后即可以对整个表进行操作也可以针对特定的分区进行操作从而简化了对表的管理和维护。

七、实验总结

通过本次实验我掌握表、索引、索引化表的概念及管理以及分区的概念及分区管理。应加强练习,才能在实验的时候游刃有余。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: