ssd7练习中文.docx
《ssd7练习中文.docx》由会员分享,可在线阅读,更多相关《ssd7练习中文.docx(20页珍藏版)》请在冰点文库上搜索。
![ssd7练习中文.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/5ec40340-9996-406c-a668-d1fb869056e3/5ec40340-9996-406c-a668-d1fb869056e31.gif)
ssd7练习中文
练习一关系型数据库
题目要求:
设计以下两个关系,将你的答案书写在一个名为BookPublisher.html的HTML页面中。
BOOK:
∙PrimaryAuthor
∙Title
∙ISBN
∙PublisherID
∙Edition
∙DateofPublication
∙Price
∙BookDescription
PUBLISHER:
∙PublisherID
∙Name
∙Address
第一部分:
1.按照以下要求标识出每个关系的关键字(主键、备用键、外键)。
对于此练习,选择关键字的时候可以忽略性能因素。
1)标识出每个关系的主键,如果没有主键,做适当的论述证明你的答案。
2)标识出每个关系的备用键,如果没有备用键,做适当的论述证明你的答案。
3)标识出每个关系的外键和完整性约束,并做适当的论述证明你的答案。
2.列出每个关系的属性名,和每个属性的域(数据类型和格式),并做适当的论述证明你的答案。
要求:
在每一个HTML表格中,列出至少四行正确的数据(可自己假设,要求合理、符合实际即可),将你的答案书写在一个名为BookPublisher.html的HTML页面中提交。
第二部分:
1.按照以下要求书写SQL语句,可以参考settingupyourDBMS部分,将你的答案书写在一个名为createDB.Sql的文件中提交。
1)使用CREATETABLE关键字创建两个关系,要求标识出每个关系的主键和备用键。
2)使用INSERT关键字向每个关系中插入四行数据(第一你部分列出的数据)。
3)书写SQL语句查询出某两个作者(例如"AddisonWesley"and"McGrawHill")出版的所有书的标题和价格。
同时在一个名为Rel-ops.txt的文件中列出你所使用的关系操作(选择、投影、联合),并做适当的解释。
(哪部分SQL操作应用到了哪个关系操作)
4)书写SQL语句查询出某本书(如"FundamentalsofDatabaseSystems")的出版社名字。
练习二SQL
运行给定的SQL脚本来创建一个图书馆的数据库。
注意,Book表中的每一行指的是一本书的副本。
因此,如果一个数据库有三本"DBMS",那么Book表中将会有三行,一行一个副本。
编写SQL语句来完成下列操作。
(注意:
对于每个操作,你必须用一条SQL语句来表达你的查询。
但是在一个语句中可以含有子查询):
1.列出"Churchill"写的所有的书的书名,以及它们的出版日期。
2.检索出名为"John"或"Susan"的会员借出的所有书的书名。
3.列出那些已借了"Iliad"和"Odyssey"这两本书的所有会员的姓名和ID。
4.列出那些已借了"Collins"写的所有的书的所有会员的姓名和ID。
假设,一名会员或许已经借了多本同样的书。
5.找出那些借了一本姓"Tanenbaum"的作者写的书的所有会员的电话号码
6.找出那些借了至少三本书的成员,并列出它们的姓名,ID以及他们借出的书的数量。
按借出书的数量将序排列找到的结果。
7.列出没有借任何书的会员
8.以字母序列出那些匹兹堡居民(电话号码以"412"开头)并且没有"PittRoads"这本书的会员的名。
独立完成这次评估,可查阅指导书。
练习三高级SQL
此练习以图书馆系统libraryschema为案例,案例包含了图书馆书籍信息、图书馆成员信息,图书馆借阅信息(某本书被某个读者借阅几次),提供书籍的出版社信息,出版社订单信息。
为了与其他练习作区分,本次练习的每个关系名字最后一个字符为阿拉伯数字‘4’。
注意:
ReceivedDate指系统收到订单日期,不是指某个消费者收到他所预订的货物日期。
TITLE4(Name,ISBN,CallNumber,Year,AuthorFName,AuthorLName);
PK(CallNumber)
MEMBER4(LibId,Fname,Lname,Address,PhoneNumber);
PK(LibId)
BOOK4(Book_Id,Edition,Status,BorrowerId,BorrowerDueDate,CallNumber);
PK(Book_Id)
FK(BorrowerId)->MEMBER4(LibId)
FK(CallNumber)->TITLE4(CallNumber)
PURCHASE_ORDER4(PoNum,Qty,OrderDate,DueDate,ReceivedDate);
PK(PoNum)
SUPPLIER4(Supplier_Id,Name,Address);
PK(Supplier_Id)
READ_BY4(CallNumber,LibId,TimesRead);
PK(CallNumber,LibId)
FK(CallNumber)->TITLE4(CallNumber)
FK(LibId)->MEMBER4(LibId)
ORDERED4(CallNumber,PoNum,Supplier_Id);
PK(CallNumber,PoNum,Supplier_Id)
FK(CallNumber)->TITLE4(CallNumber)
FK(PoNum)->PURCHASE_ORDER4(PoNum)
FK(Supplier_Id)->SUPPLIER4(Supplier_Id)
使用CREATETABLEandINSERTstatements提供的SQL语句创建你的所有关系,要求在一个空的数据库中运行提供的SQL语句创建数据库。
1.运行CREATETABLEandINSERTstatements提供的SQL语句,完成关系的创建和部分数据插入。
2.书写SQL语句,删除所有关系中的数据,将你的答案书写在一个名为delete_rows.sql的文件中。
3.按照以下要求书写SQL语句,并运行它们,完成对数据库的修改和完善。
1)按照题目中提供的关系信息完成未创建关系的创建。
根据CREATETABLEandINSERTstatements提供的数据插入语句来设置你每个关系的属性域(要求在创建好所有关系后能够运行插入数据语句正确地插入所有数据)。
(1)增加ISBN和Name两个属性为TITLE4关系的备用键(是两个备用键,不是两个属性组成一个属性组作为备用键),同时设置两个属性为非空。
(2)增加每个关系的外键约束。
(3)为MEMBER4关系增加Join_date和Gender两个属性。
(4)为READ_BY4关系增加约束,TimesRead为非负。
2)运行INSERTSQLstatements提供的SQL语句插入数据
3)按照以下查询要求书写SQL语句,将你的答案书写在一个名为queries.sql的文件中。
(1)列出符合以下要求的所有图书馆成员的ID,第一名字和Join_date.
●ID以字符“A%B”或者“A&B”开始。
●不晚于Nov.30,1997加入图书馆。
(2)列出符合以下要求的所有书的名字、ISBN、CallNumber。
●由两个或两个以上的出版社提供。
●所有的订单总量在10本以上。
●按照订单总量递减的顺序排列结果。
(3)列出符合以下要求的所有图书馆成员ID和第一名字。
●借阅书的次数小于图书馆所有书借阅次数综合的5%。
●按照借阅次数的递增顺序排列结果。
(4)列出符合以下要求的所有图书馆成员的ID和第一名字。
●性别为女。
●在图书馆有借阅记录(读某本书一次)。
●按名字的字母顺序排列结果。
(5)列出符合以下要求的所有出版的名字,ID,和订书总量。
●平均订书量(某个出版社收到的订书总量除以该出版社收到的订单数)低于系统的平均订书量(系统收到的订书总量除以所有订单数)。
(6)列出符合以下要求的所有图书馆成员的第一名字,ID。
●性别为男。
●Oct.10,1995前加入图书馆。
●阅读不同标题(title)书籍的次数在5次或5次以下。
●阅读同一书籍(同一title)的次数在两次或两次以上
作业提交文件:
1.delete_rows.sql
2.alter_tables.sql
3.queries.sql
练习四Web数据库编程
通过创建所有的HTML页面来设计你电子商城界面的各种视图。
你需要实现对这个电子商城项目进行的描述在附录中已给出了。
在这次练习中,你应该设计出附录附录中制定的电子商城需求的所欲HTML页面(不只是附录中给出的截图)。
你的HTML页面不需要包含那些用于访问数据库的必要代码。
但是,在系统的最终实现中,你的html页面应该包含所有可按动的按钮及连接。
有必要的话,你可以在你的HTML页面中编一些虚拟的数据作为占位符。
标明连接到相关html页面的链接以便点击这些链接后可以跳到适当的包含一些虚拟数据的html页面。
确定那些链接和按钮,当单击它们的时候,开始访问数据库。
例如,让我们来看下这三个页面的详细介绍:
搜索页面,搜索结果的页面和书目页面。
搜索页面应该为用户提供一个文本框用于填写搜索标准,此外,在文本框的旁边还应该有一个按钮。
在最终的实现中,点击这个按钮将会开始一个数据库搜索,但是在你已经完成了当前练习后,它将不会做这些事情。
在这次练习中,点击该按钮后仅出现一个搜索结果页面,该页面包含一些之前编写的书集。
不考虑搜索标准,同样的书集将在搜索结果页面显示出来。
搜索页面中的每一本书回事一个超链接。
点击一本书上的超链接将会出现另一页面,这个页面包含了更多书本的详细说明。
此外,在这次练习中,不管点击哪本书,都将显示出同一本书的详细说明。
提交你所有的html页面。
用这些SQL代码创建一个小数据库。
该代码会创建一个非常简单的联机图书馆。
基于支持图书馆会员能够实现添加一本书到借书篮的应用来设计Web页面。
在你的应用程序中,必须拥有下列功能:
1.主页面应该由一个图书列表包含图书馆所有的书,一个按钮用于更新借书篮及一个链接用于连接到一个可以查看借书篮的页面。
2.每一本书都应该有一个复选框。
当点击更新按钮时,每一本被选中的书都应该被添加到借书篮中。
如果一本书已经在借书篮中,那么他的数量应该增加1。
3.用于查看借书篮内容的页面。
4.用于查看借书篮内容的页面必须含有一个返回主页面的链接及一个按钮,当点击按钮的时候,清空借书篮。
5.你的应用程序应该是无错而且能够很好地处理异常。
你的应用程序决不能崩溃或是显示一些服务容器生成的错误信息(例如,Java中抛出的堆栈跟踪)。
但是,你可以在标准错误页面显示出堆栈跟踪。
你的应用程序应该遵照模型视图控制器架构。
为此,你应该写一个Java小程序来处理从借书篮中添加和删除书。
借书篮一定是一个会话层的对象。
你也可以用这个对象作为实现结束蓝的起点。
注意所有的错误,不管他们的来源,都应该被发送到同一个错误页面。
你应该用一个Java服务器页面来显示篮子中的书。
你应该用一个Java服务器页面来显示图书馆的所有书。
该页面应该用一个页面层的对象,根据书名和ISBN来查询图书馆中所有的书。
书名应该被展示给用户,ISBN可以用作形式参数。
这个JavaBean应命名为LibraryBooks。
这个对象应该有名为getTitles()和getIsbns()的方法,分别以字符串数组的形式返回图书馆中的书名和ISBN。
因此,你应该撞见和递交以下文件:
1.LibraryBooks.java—一个用于存储当前图书馆所有书籍的JavaBean。
2.viewbasket.jsp—一个用于显示一个用户借书篮中的所有书的Java服务器页面。
3.showbooks.jsp—一个用于显示图书馆中所有书籍的一个Java服务器页面。
5.errorpage.jsp—一个用于显示所有错误的Java服务器页面。
6.AddBasketController.java—一个从ShowBooks中接受输入并将一本选中的书添加到用户借书篮的服务程序。
7.ClearBasketController.java—一个清空用户借书篮的服务程序。
提交运行你的应用程序所必需的代码。
独立完成这部分评估,可查阅指导书。
练习五ER模型
以附录中提供的电子商务描述为案例,建立ER模型。
注意,案例描述是以用户需求为中心描述的,因此并未标识出所有关系的关键字(主键、备用键),你需要自己去标识完全。
为了完成题目,你可以做适当的假设。
要求你的假设必须与最终设计出的ER模型相符合。
ER模型中要求标识出以下内容:
●实体类型(标识出弱实体)
●每个实体的属性(单值/多值,派生,简单/复杂等等),要求属性写在一个文本文档中,不要写在ER图中。
●关系类型(标识出关系角色,基数约束和参与性约束)
答案提交:
将ER关系图以ER.gif命名,将属性书写在ER.txt文本文档中提交。
练习六规范化
在名为normalization.txt的文件中提出下列问题的解决办法。
注意:
这次练习中所讨论的问题是独立于附录中描述的电子商务项目的。
下面的表格捕捉到了下列关于电子商务图书商城的现实情况:
在日期为ShippedDate这天,一姓名为EmpName,ID为EmpID的职员已将订单(订单号为OrderNo)发送到地址ShipToAddr。
运单号是TrackingNum。
该运单号由运送货物的快递公司提供。
该图书商城只用一家快递公司。
注意:
基于订购物项目的可用性,一个订单可以被分割成多个进行发送。
一次发送只由一个职员处理,但是,如果一个订单以多个发送的形式发货,那么可以由多个职员来处理该订单。
1.列出主键。
2.列出所有FD。
3.列出所有的更新异常并各给出一个实例。
4.这个关系属于哪种范式?
给出解释。
5.逐步对它进行规范化,给出该关系的第三范式。
即,如果该关系未被规范化,那么给出它的第一范式,然后给出刚创建的第一范式的第二范式,最后,给出由第二范式进一步规范出的第三范式。
对于每一次到更高范式X的转换,
1.解释每一次规范化的步骤。
2.提供X范式的表格结构,主键及FD。
3.解释你认为它是第X范式的理由。
即,如果该关系是一个未规范化的形式,那么你应该解释你将它转换成第一,第二,第三范式的过程。
你也应该分别提供相应的表格结构,主键及FD。
你也应该解释为什么你认为它是第一,第二及第三范式。
这次练习,你应该提交下列文件。
1.normalization.txt
独立完成这部分评估,可查阅指导书。
练习七ER映射
使用课件中提供的ER映射算法,将你练习5中的ER模型转换为相应的关系模型。
按照以下符号约定完成本练习
●PK:
PrimaryKey
●AK:
AlternateKey
●FK:
Foreignkey
要求按照以下格式书写,并详细写出映射的每步操作。
EMP(SSN,Name,DriverLicenseNo,DeptNo);
PK(SSN)
AK(DriverLicenseNo)
FK(DeptNo)->Dept(DNo)
将以上题目答案书写在名为relational-schema.txt的文本文档中。
书写SQL语句,完成你以上映射产生的所有关系的创建工作。
注意,要标识出所有关系的关键字、外键约束等等。
将SQL语句保存在relational-model.sql文件中提交。
提交文件:
1.relational-schema.txt
2.relational-model.sql
练习八E-CommerceProject(电子商务项目)
完成附录中指定的电子商城项目。
它应该具有项目描述文档中的提到的功能。
提交所有相关的文件以及SQL语句来创建你的初始数据库。
用"prxyuser"作为用户名,用"prxypass"作为联机字符串中的密码。
将你的数据库命名为"bookstore"。
你可以借鉴卡耐基图书馆项目的思路。
用WinZip或其他一些使用工具或多种工具的集合,将你所有的文件打包并压缩到一个文件。
.tar和gzip都是免费实用软件,你可用从网上下载帮你将多个文件打包并压缩成一个文件。
在考试3中,或许会让你扩展实现你的电子商城项目。
代替扩展你的实现,你可以扩展卡耐基图书馆项目这个例子。
务必保证你有构建一个基于网页的数据库应用的技能。
掌握这些技能并且为考试3做准备的最好方法就是完成你的项目。
独立完成这部分的评估,可查阅指导书。
练习九事务编程
第一部分:
测试数据库事务提交和回滚
几乎所有的商业DBMS软件都会支持在事务提交前的回滚,这对于保证事务原子特性非常有用。
你可以使用rollback命令撤销掉部分操作。
此部分练习将会让你熟悉rollback和commit命令。
1.运行SQLscript建立一个小的银行数据库,account关系包含两列,用户id和账户余额。
有两行数据,定期储蓄账户(id为1)和活期储蓄账户(id为2)。
2.开始一个新事务。
3.查询活期储蓄账户余额,将查询结果拷贝到rollback.txt文档中。
4.删除定期和活期两个储蓄账户,将SQL语句拷贝到rollback.txt文档中。
5.查询两个账户的信息,将结果拷贝入rollback.txt文档中。
6.回滚事务。
7.查询两个账户的余额,将结果拷贝入rollback.txt文档中。
8.开始一个新事务。
9.删除定期储蓄账户,将SQL语句拷贝入rollback.txt文档中。
10.查询表account的所有行,将结果拷贝入rollback.txt文档中。
11.提交事务。
12.尝试回滚刚刚提交的事务。
查询表中存储的值。
解释说明事务提交和回滚产生的不同影响。
将结果写入rollback.txt文档中。
第二部分测试事务隔离等级
PostgreSQL支持两种事务隔离等级。
完成以下练习,熟悉PostgreSql支持的隔离等级。
1.运行SQLscript建立一个小的银行数据库,account关系包含两列,用户id和账户余额。
有两行数据,定期储蓄账户(id为1)和活期储蓄账户(id为2)。
2.开始两个PostgreSQL窗口会话。
3.两个窗口都开始一个新事务。
4.第一个窗口,将活期储蓄账户余额更改为455.66。
5.第一个窗口,查询account关系所有行,结果拷贝入isolation.txt文档中,用序号标识出数据来自于窗口一。
6.第二个窗口,查询account关系所有行,结果拷贝入isolation.txt文档中,用序号标识出数据来自于窗口二。
7.第一个窗口,提交事务。
8.第二个窗口,查询account表所有行,结果拷贝入isolation.txt文档中,用序号标识出数据来自于窗口二。
窗口一的数据更新是否生效?
为什么?
将解释部分写入isolation.txt文档中。
9.第二个窗口,提交事务。
10.两个窗口都开始一个新事务。
11.第二个窗口设置事务隔离等级为串行化,将SQL语句写入isolation.txt文档中。
12.第一个窗口,设置活期储蓄账户余额为1400。
13.第二个窗口,设置定期储蓄账户余额为1。
14.在两个窗口内查询account关系的所有行。
用序号标识出数据来源于窗口一或二。
15.第一个窗口,提交事务。
16.第二个窗口,查询account关系所有行。
活期储蓄账户值是否更新?
为什么?
第一个窗口的定期储蓄账户值是否更新?
为什么?
将解释语句写入isolation.txt文档中。
17.第二个窗口提交事务。
在两个窗口查询数据。
将结果拷贝入isolation.txt文档中,用序号标识出数据来源,并解释产生为何会产生此结果。
将答案拷贝入isolation.txt文档中。
第三部分阻塞和死锁
1.运行SQLscript建立一个小的银行数据库,account关系包含两列,用户id和账户余额。
有两行数据,定期储蓄账户(id为1)和活期储蓄账户(id为2)。
2.开始两个PostgreSQL窗口会话。
3.两个窗口都开始一个新事务。
4.第二个窗口中将活期储蓄账户余额更新为455.75.
5.第一个窗口中将活期储蓄账户余额更新为1400,更新能否成功,解释说明,将答案写入deadlock.txt文档中。
6.第二个窗口提交事务,观察第一个窗口变化,解释说明,答案写入deadlock.txt文档中。
7.第一个窗口提交事务。
8.两个窗口开始一个新事务。
9.第二个窗口中将定期储蓄账户余额更新为2400.
10.第一个窗口中将活期储蓄账户余额更新为2000.
11.第一个窗口中将定期储蓄账户余额更新为1400.
12.第二个窗口中将活期储蓄账户余额更新为1000.50.
13.观察结果,试着解释原因。
结果写入deadlock.txt文档中。
14.在每个窗口中查询表的数据,你观察到了什么?
试做说明,将答案写入deadlock.txt文档中。
练习十索引选择及查询优化
背景
在这次联系中,你将亲自动手实验用索引进行查询优化。
你操作的数据由一个简单实时评估信息系统组成,该系统存储了用户,地段,用户所拥有的地段的信息。
这些表格的SQL框架如下:
Customer(customer_id,customer_first_name,customer_last_name)
Lot(lot_id,lot_description,lot_size,lot_district,lot_value,lot_street_address)
Customer_lot(lot_id,customer_id)
你必须设计数据库的访问方法以便在各种操作条件下,能够获得最可能的效果。
这些操作条件是运行在你的系统上的不同类型的查询。
这些在系统上运行的不同查询如下:
1.给定一个大小范围,选出所有范围内的地段号lot_id。
该类查询的实例应该是selectlot_idfromlotwherelot_sizebetween300and15000;
2.给定一个值的范围,选出所有范围内的地段号lot_id。
该类查询的实例应该是selectlot_idfromlotwherelot_valuebetween300and15000;
3.选出一个指定用户的所有信息。
该类查询的实例应该是select*fromcustomerwherecustomer_id=12;
4.插入新的用户或地段数据。
该类查询的实例应该是insertintocustomervalues(250001,'Vince','Smith');
5.删除一行用户或地段数据。
该类查询的实例应该是deletefromcustomerwherecustomer_id='250001';
6.更新一行用户或地段数据。
该类查询的实例应该是updatecustomersetcust