数据库实验题目和答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
按照如下方式重新定义四张表:
定义新的books表,其所拥有的属性与属性类型与原有的books表一致
以列级完整性的方式定义属性bookId为主码,同时在定义的时候必须提供约束名
定义属性category为”非空” ,同时在定义的时候必须提供约束名
create table Books(
bookId number(9,0)
constraint BooksKey primary key,
title varchar(80),
author varchar(40),
year integer,
category varchar(15)
constraint B1 not null
);
commit;
定义新的customers表,其所拥有的属性与属性类型与原有的customers表一致
以表级完整性的方式定义属性cid为主码
以列级完整性的方式定义属性cname为”唯一”,同时在定义的时候必须提供约束名
create table Customers (
cid number(9,0),
cname char(40)
constraint C1 unique,
age integer,
primary key(cid)
);
commit;
定义新的purchases表,其所拥有的属性与属性类型与原有的purchases表一致
定义属性cid与bookId为主码,同时在定义的时候必须提供约束名
以列级完整性的方式定义属性bookId为外码,它参照Books表的主码,同时在定义的时候必须提供约束名。当删除Books表中的某一本书时,级联删
除与它相关的购买记录
以表级完整性的方式定义属性cid为外码,它参照customers表,同时在定义的时候必须提供约束名。当删除customers表中的某个顾客时,如果存在
与该客户相关的购买记录,拒绝删除。
create table Purchases(
cid number(9,0),
bookId number(9,0)
constraint bookidFKey references Books(bookid)
on delete cascade,
pdate date,
pprice number(8,2),
constraint PurchasesKey primary key(cid,bookid),
constraint cidFKey foreign key(cid) references customers(cid)
);
commit;
定义新的pricing表,其所拥有的属性与属性类型与原有的pricing表一致
以列级完整性的方式定义属性booId为主码,同时在定义的时候必须提供约束名
定义约束,要求当书的format是‘paperback’时,当前价格不能超过50
create table Pricing(
bookId number(9,0)
constraint PricingKey primary key,
format varchar(15),
price number(9,2),
constraint P1 check (format <>'paperback' OR price<=50)
);
commit;
创建如下的触发器:
定义一个AFTER行级触发器,当修改books表的bookid后,自动修改purchases和pricing表中与它相关记录中的bookid(只允许使用一个触发器) create trigger alter_bookid
after update on books
for each row
begin
if(:new.bookid<>:old.bookid)
then update purchases
set bookid = :new.bookid
where bookid = :old.bookid;
update pricing
set bookid = :new.bookid
where bookid = :old.bookid;
end if;
end;
定义如下的一张表:
Score(Sno, Chinese, Math, English, Total)
Sno是主码
Chinese, Math, English分别表示三门课成绩,并且三门课的成绩取值范围是0-100且均不能为空值
Total的取值需要正好是三门课成绩总和
定义一个AFTER行级触发器,当修改Score表中某门课的成绩后,自动修改Total
create table Score(
Sno number(9,0)
constraint SnoKey primary key,
Chinese number(9,2)
constraint S1 check(Chinese BETWEEN 0 and 100)
constraint S2 not null,
Math number(9,2)
constraint S3 check(Math BETWEEN 0 and 100)
constraint S4 not null,
English number(9,2)
constraint S5 check(English BETWEEN 0 and 100)
constraint S6 not null,
Total number(9,2),
constraint S7 check (total = chinese+math+english)
);
定义触发器
create trigger update_score
before update on score
for each row
begin
:new.total := :new.chinese+:new.math+:new.english;
end;
利用书本上的3张表:student, course, sc
问题1:对各门课程成绩进行分段统计,并有类似如下的输出结果
课程: 数据库0<成绩<60 0人
课程: 数据库60<成绩<80 0人
课程: 数据库81<成绩<100 1人
课程: 数学0<成绩<60 0人
课程: 数学60<成绩<80 1人
课程: 数学81<成绩<100 2人
课程: 数据结构0<成绩<60 0人