数据库实验题目和答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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人

相关文档
最新文档