电子商务数据库练习参考答案应用题.docx
《电子商务数据库练习参考答案应用题.docx》由会员分享,可在线阅读,更多相关《电子商务数据库练习参考答案应用题.docx(17页珍藏版)》请在冰豆网上搜索。
电子商务数据库练习参考答案应用题
第一章
1.举出适合用文件系统而不是数据库系统的例子;再举出适合用数据库系统的应用例子。
(1)适用于文件系统而不是数据库系统的应用例子:
数据的备份、软件或应用程序使用过程中的临时数据存储一般使用文件比较合适。
早期功能比较简单、比较固定的应用系统也适合用文件系统。
(1)适用于数据库系统而非文件系统的应用例子:
目前,几乎所有企业或部门的信息系统都以数据库系统为基础,都使用数据库,如库存管理系统、物资采购系统、作业调度系统、设备管理系统、人事管理系统等;学校的学生管理系统,人事管理系统,图书馆的图书管理系统,等等都适合用数据库系统。
2.试述网状模型的概念,举出三个网状模型的实例。
满足下面两个条件的基本层次联系集合为网状模型。
1)允许一个以上的结点无双亲;
2)一个结点可以有多于一个的双亲。
实例1:
实例2:
实例3:
第三章
1.建立一个关于系、学生、班级、学会等诸信息的关系数据库。
学生:
学号、姓名、出生年月、系名、班号、宿舍区。
班级:
班号、专业名、系名、人数、入校年份。
系:
系名、系号、系办公地点、人数。
学会:
学会名、成立年份、办公地点、人数。
语义如下:
一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。
一个系的学生住在同一宿舍区。
每个学生可参加若干学会,每个学会有若干学生。
学生参加某学会有一个入会年份。
(1)请给出关系模式。
各关系模式如下:
●学生(学号,姓名,出生年月,系名,班级号,宿舍区)
●班级(班级号,专业名,系名,班级人数,入校年份)
●系(系名,系号,系办公地点,系人数)
●学会(学会名,成立年份,办公地点,人数,姓名)(这里加入一个“姓名”,否则无法实现函数依赖)
(2)写出每个关系模式的极小函数依赖集,指出是否存在传递函数依赖。
每个关系模式的最小函数依赖集如下:
●学生的最小函数依赖集为:
FMIN={学号→姓名,学号→出生年月,学号→班级号,学号→系名,系名→宿舍区}
●班级的最小函数依赖集为:
FMIN={(系名,专业名)→班级号,班级号→班级人数,班级号→入校年份}系的最小函数依赖集为:
FMIN={系号→系名,系号→系办公地点,系号→系人数)
●学会的最小函数依赖集为:
FMIN={学会号→成立年份,学会号→办公地点,学会号→人数,姓名→SYEAR)
(3)对于函数依赖左部是多属性的情况讨论函数依赖是完全函数依赖,还是部分函数依赖。
以上关系模式中存在传递函数依赖,如:
学号→系名,系名→宿舍区,对于函数依赖左部是多属性的情况,函数依赖是完全函数依赖(假设系中专业名可以相同)
(4)指出各关系模式的候选码、外部码,有没有全码存在?
各关系的候选键、外部键如下:
●学生:
候选键是学号,外部键是姓名,系名,班级号。
●班级:
候选键是班级号,外部键是系名。
●系:
候选键是系号,外部键是系名。
●学会:
候选键是学会号,外部键是姓名。
2.设有关系模式:
学生(学号、姓名、所属系、专业、班级),试确定该模式中的所有候选键。
候选键是学号,如果姓名不能重复则姓名也是候选键。
3.设有关系模式:
商品(商品编号、类别、商品名称、单价、数量、总价),分析该关系模式上的函数依赖关系。
●商品编号→商品名称;
●商品编号→类别;
●商品编号→单价;
●(单价,数量)→总价
4.设有关系模式R(U,F),其中U={A,B,C,D,E},F={AB→C,B→D,D→E,C→B},试问R最高为第几范式,并解释原因。
如果R不是3NF,要求将其分解为3NF。
解:
因为AB为只在左部出现的属性,又AB+=ABCDE,因此AB是R唯一的候选码。
其中,A和B为主属性,C、D、E都是非主属性,因为B→D,存在非主属性对码的部分函数依赖,因此R属于1NF。
将R先分解成2NF关系:
R1(A)F1={A→A}
R2(A,B,C)F2={AB→C,C→B}
R3(B,D,E)F3={B→D,D→E}
R3中存在着非主属性对码传递函数依赖,B→D,D→E,因此若要满足3NF,则需要将R3进一步分解,以去除非主属性对码的传递函数依赖。
R3可分解为R4(B,D)和R5(D,E)
最终R可分解为:
R1(A)F1={A→A}
R2(A,B,C)F3={AB→C,C→B}
R3(B,D)F3={B→D}
R4(D,E)F3={D→E}
第四章
1.设某商业集团的仓库管理系统数据库有三个实体集。
一是“公司”实体集,属性有公司编号、公司名、地址等;二是“仓库”实体集,属性有仓库编号、仓库名、地址等;三是“职工”实体集,属性有职工编号、姓名、性别等。
公司与仓库间存在“隶属”联系,每个公司管辖若干仓库,每个仓库只能属于一个公司管辖;仓库与职工间存在“聘用”联系,每个仓库可聘用多个职工,每个职工只能在一个仓库工作,仓库聘用职工有聘期和工资。
(1)试画出E-R图,并在图上注明属性、联系的类型;
(2)将E-R图转换成关系模型,并注明主键和外键。
●公司(公司编号,公司名,地址)主键:
公司编号
●仓库(仓库编号,仓库名,地址,公司编号)主键:
仓库编号,外键:
公司编号
●职工(职工编号,姓名,性别,仓库编号,聘期,工资)主键:
职工编号,外键:
仓库编号
2.设有如下教学环境:
一个班级有多名学生,一名学生只属于一个班;一名学生可以选修若干门课程,每门课程由多名学生选修;一位教师可以讲授若干门课程,一门课程只有一位教师主讲;每位教师属于一个系,一个系有若干名教师。
试用E-R图画出该教学环境的概念模型。
第五章
建立书籍信息管理系统数据库E_Bookstore。
(1)在该数据库中创建基本表。
①建立书籍基本信息表,包含以下内容:
书籍编号(主键)、书籍名称、ISBN、出版年份、类别名称。
Book(BookID,BookName,ISBN,PublishYear,CategoryName)
CREATETABLEBook(
BookIDchar(5)PRIMARYKEY,
BookNamechar(60),
ISBNchar(13),
PublishYeardatetime,
CategoryNamechar(13)
)
②建立仓库基本信息表,包含以下内容:
仓库编号(主键)、仓库名称、地区、面积。
Warehouse(WarehouseID,WarehouseName,Location,area)
CREATETABLEWarehouse(
WarehouseIDchar(5)PRIMARYKEY,
WarehouseNamechar(60),
Locationchar(60),
Areaint
)
③建立库存基本信息表,包含以下内容:
书籍编号(主键)、仓库编号、库存量。
Stock(BookID,WarehouseID,StorageRate)
CREATETABLEStock(
BookIDchar(5)PRIMARYKEY,
WarehouseIDchar(5),
StorageRateint,
CONSTRAINTS_PRIKPRIMARYKEY(BookID,WarehouseID)
)
④建立快递员基本信息表,包含以下内容:
员工编号(主键)、姓名、性别、年龄、地区、薪金、奖金。
Courier(CourieredID,Name,Sex,Age,Location,Salary,Bonus)
CREATETABLECourier(
CourieredIDchar(5)PRIMARYKEY,
Namechar(5),
Sexint,
Ageint,
Locationchar(20),
Salaryint,
Bonusint,
)
(2)为书籍基本信息表增加以下内容:
版本、价格、折扣价格。
ALTERTABLEBook
ADD
Editint,
Pricemoney,
DiscountPricemoney;
(3)检查各个表的完整性约束,如果没有定义,请定义之,其中:
①定义快递员基本信息表中性别字段的完整性约束只能为“男”、“女”。
ALTERTABLECourier
ADDCONSTRIANTSex_CHKCHECK(Sex=’男’orSex=’女’)
②定义书籍基本信息表中的类别名称字段只能为“哲学类”、“文学类”、“计算机类”、“数学类”、“法学类”、“经济类”、“管理类”、“医学类”、“体育类”、“语言类”。
ALTERTABLEBook
ADDCONSTRIANTCategory_CHKCHECK(CategoryNameIN(‘哲学类’,’文学类’,’计算机类’,’数学类’,’法学类’,’经济类’,’管理类’,’医学类’,’体育类’,语言类’))
③定义书籍基本信息表中的版本字段只能为1-20版。
ALTERTABLEBook
ADDCONSTRIANTEdit_CHKCHECK(Edit>=1AndEdit<=20)
④定义快递员基本信息表的薪金字段只能为2000-5000元,奖金字段为0-8000元,收入字段计算公式为“收入=薪金+奖金”。
ALTERTABLECourier
ADDCONSTRIANTSalary_CHKCHECK(Salary>=2000AndSalary<=5000)
ADDCONSTRIANTBonusy_CHKCHECK(Bonus>=0AndBonus<=8000)
⑤定义仓库基本信息表的地区字段只能为“华南”、“华北”、“西南”、“西北”、“东北”。
ALTERTABLEWarehouse
ADDCONSTRIANTLocation_CHKCHECK(LocationIN(‘华南’,’华北’,’西南’,’西北’,’东北’))
(4)将快递员基本信息表中的员工编号的数据类型变为char(12)。
ALTERTABLECourier
ALTER COLUMN CourieredIDchar(12)
(5)删除快递员基本信息表中性别字段的完整性约束。
ALTERTABLECourier
DROPCONSTRAINTSex_CHK
(6)删除快递员基本信息表。
DROPTABLECourier
(7)在库存基本信息表的书籍编号和仓库编号字段上建立唯一性索引。
CREATEUNIQUEINDEXStock_IdxONStock(BookID,WarehouseID)
(8)在书籍基本信息表的书籍名称字段上建立聚集性索引。
CREATECLUSTEREDINDEXBook_IdxONBook(BookName)
(9)删除书籍基本信息表的索引。
DROPINDEXBook_Idx
(10)查询2010年出版的计算机类有库存的书籍信息。
SELECT*
FROMBook
WHEREBookIDIN(
SELECTBookIDFROMStockWHERE
StorageRateISNOTNULLANDStorageRate<>0
)
(11)查询所有价格低于30元的书籍的书籍名称。
SELECTBookName
FROMBook
WHEREPrice<30
(12)查询既不是“经济类”又不是“管理类”的书籍的书籍名称以及书籍编号。
SELECTBookID,BookName
FROMBook
WHERECategoryName!
=’经济类’ANDCategoryName!
=’管理类’
(13)查询所有书籍名称含有“数据库”的书籍的书籍名称与书籍编号。
SELECTBookID,BookName
FROMBook
WHEREBookNameLIKE‘%数据库%’
(14)查询库存位于仓库编号为“H0001”仓库的书籍的书籍名称。
SELECTBookName
FROMBook,Stock
WHEREBook.BookID=Stock.BookIDANDWareHouseID=’H0001’
(15)查询库存位于仓库名为“华南广州仓”的仓库的书籍的书籍名称与书籍编号。
SELECTBookName
FROMBook,Stock,WareHouse
WHEREBook.BookID=Stock.BookIDANDStock.WareHouseID=WareHouse.WareHouseIDANDWarehouseName=’华南广州仓’
(16)查询2012年出版的计算机类书籍的数量。
SELECTCOUNT(*)
FROMBook
WherePublishYear=2012ANDCategoryName=’计算机’
(17)统计每种类别的书籍的数量,要求输出类别名称和书籍数量,查询结果按书籍数量降序排列,若书籍数量相同,则按类别名称升序排列。
SELECTCategoryName,COUNT(*)
FROMBook
GROUPBYCategoryName
ORDERBYCOUNT(*)Des,CategoryName
(18)查询库存量大于等于1000本的书籍的书籍编号、书籍名称和类别名称,并把查询结果存放至一个命名为Book2的基本表中。
先创建一个基本表Book2
CREATTABLEBook2
(
BIDchar(5)PRIMARYKEY,
BNamechar(60),
CNamechar(13)
)
查询并存入基本表Book2中
SELECTStock.BookID,BookName,CategoryName
FROMStock,Book
WHEREStock.BookID=Book.BookID
GROUPBYStock.BookID
HAVINGCOUNT(*)>=1000
INTOBook2
(19)查询“华南广州仓”仓库库存量比“华南福建仓”仓库库存量大的所有书籍的书籍编号及其“华南广州仓”仓库库存量和“华南福建仓”仓库库存量。
SELECTBookID,StorageRate
FROM(SELECT*FROMStockWHEREWarehouseID=(SELECTWarehouseIDFROMWarehouseWHEREWarehouseName=’华南广州仓’))S1,(SELECT*FROMStockWHEREWarehouseID=(SELECTWarehouseIDFROMWarehouseWHEREWarehouseName=’华南福建仓’))S2
WHERES1.BookID=S2.BookIDANDS1.StorageRate>S1.StorageRate
(20)将库存在“华南广州仓”且库存量少于5本的书籍的库存量改为空值。
UPDATEStock
SETStorageRate=””
WHEREStorageRate<5ANDWarehouseIDIN(SELECTWarehouseIDFROMWarehouseWHEREWarehouseName=’华南广州仓’)
(21)将库存量少于10本的计算机类书籍的折扣价格提高5%
UPDATEBook
SETDiscountPrice=DiscountPrice*1.05
WHERECategoryName=’计算机类’AND
BookIDIN(SELECTBookIDFROMStockGROUPBYBookIDHAVINGCOUNT(*)<10)
(22)计算2012年出版的计算机类书籍的平均折扣价格。
SELECTAVG(DiscountPrice)asAvgDisPrice
FROMBook
WHEREPublishYear=2012ANDCategoryName=’计算机类’
(23)查询库存量超过1000本的仓库的仓库名称和库存量。
SELECTStock.WarehouseID,WarehouseName,SUM(StorageRate)
FROMStock,Warehouse
WHEREStock.WarehouseID=Warehouse.WarehouseID
GROUPBYStock.WarehouseID
HAVINGSUM(StorageRate)>1000
(24)查询每个仓库中库存量最小的书籍的书籍名称与书籍编号。
SELECTS1.BookID,BookName
FROMBookS1,(SELECTBookID,WarehouseID,MIN(StorageRate)FROMStockGROUPBYWarehouseID)S2
WHERES1.BookID=S2.BookID
(25)查询“华南广州仓”仓库中库存量高于书籍编号为“K0011”的书籍的库存量的所有书籍的书籍信息。
SELECT*
FROMBook
WHEREBookIDIN(
SELECTBookIDFROMStock,Warehouse
WHEREStock.WarehouseID=Warehouse.WarehouseIDANDWarehouseName=’华南广州仓’
GROUPBYBookID
HAVINGSUM(StorageRate)>(SELECTSUM(StorageRate)FROMStockWHEREBookID=’K0011’)
)
(26)列出在两个仓库的库存量都少于50本的书籍的书籍名称和书籍编号。
SELECTBook.BookID,BookName
FROMBook
WHEREBookIDIN
(SELECTBookIDFROMStockS1,StockS2WHERES1.BookID=S2.BookIDANDS1.StorageRate<50ANDS2.StorageRate<50ANDS1.WarehouseID<>S2.WarehouseID)
(27)统计库存量之和大于1500的书籍的库存量与书籍名称。
SELECTBookName,SUM(StorageRate)
FROMBook,Stock
WHEREBook.BookID=Stock.BookID
GROUPBYStock.BookID
HAVINGSUM(StorageRate)>1500
(28)列出在“华南广州仓”和“华南福建仓”都有库存的书籍的名称
SELECTBookName
FROMBook
WHEREBookIDIN
(
SELECTBookID
FROMStockS1,StockS2
WHERES1.BookID=S2.BookIDANDS1.WarehouseID=(SELECTWarehouseIDFROMWarehouseWHEREWarehouseName=’华南广州仓’)ANDS2.WarehouseID=(SELECTWarehouseIDFROMWarehouseWHEREWarehouseName=’华南福建仓’)
)
(29)建立计算机类书籍的基本信息的视图,包含书籍基本信息表的所有字段。
CREATEVIEWComputerBook
AS
SELCT*FROMBook
WHERECategoryName=’计算机类’
(30)建立计算机类书籍的库存量的视图,包含以下字段:
书籍编号、书籍名称、类别名称、仓库编号、库存量。
CREATVIEWBookStock
AS
SELECTBook.BookID,BookName,CategoryName,Stock.WarehouseID,StorageRate
FROMBook,Stock,Warehouse
WHEREBook.BookID=Stock.BookIDANDStock.WarehouseID=Warehouse.WarehouseID
第六章
略
第七章
编写程序,连接数据库,从书籍信息表中查找所有书籍的ISBN(ISBN)、书名(BookName)、作者(Author)、价格(Price),页数(Pages)和简介(About),并将这些字段读取出来。
Stringusername="sa";
Stringpassword="";
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=E_Bookstore";
Class.forName("com.microsoft.jdbc.sqlserver.jdbc.SQLServerDriver").newInstance();
Connectionconn=DriverManager.getConnection(url,username,password);
Statementstmt=conn.createStatement();
Stringsql="selectISBN,BookName,Author,Price,Pages,AboutfromBook_Information";
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){
Stringa=rs.getString("ISBN");
Stringb=rs.getString("BookName");
Stringc=rs.getString("Author");
Stringd=rs.getString("Price");
Stringe=rs.getString("Pages");
Stringf=rs.getString("About");
}
第八章
1.编写一个用于展示出版社资料信息表信息的jsp文件。
建立的PressList.jsp文件如下:
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<%@pageimport="java.sql.*"%>
出版社资料信息
出版社编号 | 出版社名称 | 电话 | Email | 地址 | 邮编 | 网址 |
---|
<%
Stringusername="sa";
Stri