实验目的
1.掌握表的创建与管理。
2.掌握索引的创建与管理。
3. 掌握视图的创建与管理。
4. 掌握序列的创建与应用。
实验设备及器材
安装有ORACLE软件的计算机
实验内容
1.创建表。
2.创建索引。
3.创建视图。
4.创建序列。
实验要求
1.为图书销售系统创建表。
2.在图书销售系统适当表的适当列上创建适当的类型的索引。
3. 为图书销售系统创建视图。
4. 为图书销售系统创建序列。
实验步骤(给出相应代码及其运行截图)
2.按下列方式创建一个用户bs,并给该用户授权。
SQL>CREATE USER bs IDENTIFIED BY bs DEFAULT TABLESPACE USERS;
SQL>GRANT RESOURCE, CONNECT, CREATE VIEW TO bs ;
3.使用bs用户登录数据库,并进行下面的相关操作。
SQL>conn bs
然后输入口令:bs
4. 根据图书销售系统关系模式设计,创建表A-I至表A-6。
表A-1 CUSTOMERS
字段名 | 数据类型 | 长度 | 约束 | 说明 |
customer_id | NUMBER | 4 | PRIMARY KEY | 客户编号 |
name | CHAR | 20 | NOT NULL | 客户名称 |
phone | VARCHAR2 | 50 | NOT NULL | 电话 |
| VARCHAR2 | 50 | | |
address | VARCHAR2 | 200 | 地址 | |
code | VARCHAR2 | 10 | 邮政编码 |
表A-2 PUBLISHERS
字段名 | 数据类型 | 长度 | 约束 | 说明 |
publisher_id | number | 2 | primary key | 出版社号 |
name | varchar2 | 50 | 出版社名 | |
contact | char | 10 | 联系人 | |
phone | varchar2 | 50 | 电话 |
表A-3 BOOKS
字段名 | 数据类型 | 长度 | 约束 | 说明 |
ISBN | VARCHAR2 | 50 | PRIMARY KEY | 图书号 |
title | VARCHAR2 | 50 | 图书名 | |
author | VARCHAR2 | 50 | 作者 | |
pubdate | DATE | 出版日期 | ||
publisher_id | NUMBER | 2 | 出版社ID | |
cost | NUMBER | 6,2 | 批发(大于10本)价格 | |
retail | NUMBER | 6,2 | 零售价格 | |
category | VARCHAR2 | 50 | 图书类型 |
表A-4 ORDERS
字段名 | 数据类型 | 长度 | 约束 | 说明 |
order_id | number | 4 | primary key | 订单号 |
customer_id | number | 4 | foreign key | 顾客号 |
orderdate | date | not null | 订货日期 | |
shipdate | date | 发货日期 | ||
shipaddress | varchar2 | 200 | 发货地址 | |
shipcode | varchar2 | 10 | 发货邮政编码 |
表A-5 ORDERITEM
字段名 | 数据类型 | 长度 | 约束 | 说明 | |
order_id | number | 4 | foreign kye | primary key | 订单号 |
item_id | number | 4 | 订单明细号 | ||
ISBN | varchar2 | 50 | not null | 图书编号 | |
quantity | number | 4 | 图书数量 |
表A-6 PROMOTION
字段名 | 数据类型 | 长度 | 约束 | 说明 |
gift_id | number | 2 | 礼品编号 | |
name | char | 20 | primary key | 礼品名称 |
minretail | varchar2 | 50 | 图书最低价 | |
maxretail | vhar | 10 | 图书最高价 |
5.在CUSTOMERS表的name列上创建一个B-树索引,要求索引值为大写字母。
Create index CUSTOMERS_B_NAME_INDEX on CUSTOMERS(name) tablespace users storage (initial 20K next 20k pctincrease 75);
6.在BOOKS表的title列上创建一个非唯一性索引。
create index BOOKS_TITLE_NOUNIQUE on books(title);
7.在ORDERITEM表的ISBN列上创建一个唯一性索引。如图7
Create unique index ORDERITEM_ISBN_UNIQUE_INDEX on ORDERITEM(ISBN);
8.创建一个视图customers_book,描述客户与订单的详细信息,包括客户编号、客户名单、订购图书的ISBN、图书名称、图书数量、订货日期、发货日期等。
Create view customers_book
as
select dg.customer_id 客户编号 , dg.name 客户名称, dbc.ISBN 订购图书的ISBN, dbc.title 图书名称 , dbc.quantity 图书数量,dg.orderdate 订货日期 ,dg.shipdate 发货日期
from
(select cs.customer_id,cs.name, os.orderdate , os.shipdate ,os.order_id
from orders os left join customers cs on os.customer_id = cs.customer_id) dg ,
(select ot.ISBN , b.title ,ot.quantity ,ot.order_id
from orderitem ot left join books b on ot.ISBN = b.ISBN ) dbc
where dg.order_id = dbc.order_id;
9.创建一个视图customers_ gif,描述客户获得礼品的信息,包括客户名称、订购图书名称、图书总价、礼品名称。
create view customers_ gif
as
select * from
(select cs.name , os.order_id
from orders os left join customers cs on os.customer_id = cs.customer_id) dg ,
(select b.title ,ot.quantity ,ot.order_id , b.retail * ot.quantity allprice , po.name
from orderitem ot left join books b on ot.ISBN = b.ISBN
left join promotion po on po.gift_id = ot.item_id
) dbc
where dg.order_id = dbc.order_id;
10.定义序列seq_customers, 产生客户编号,序列起始值为1,步长为1,不缓存,不循环。
create sequence seq_customers increment by 1 start with 1 ;
11. 定义序列seq_orders, 产生订单编号, 序列起始值为1000步长为1, 不缓存,不循环。
create sequence seq_orders increment by 1 start with 1000 ;
12. 定义序列scq oderitem产生订单编号,序列起始值为1,步长为1, 不缓存,不循环。
create sequence scq_oderitem increment by 1 start with 1;
实验小结
通过本实验,我掌握了表、索引、视图、序列的创建和管理、应用,学会了数据库的基本操作。