数据库原理及应用(MySQL版在线实训版)(第2版)-习题答案汇 陈业斌 第1-14章_第1页
数据库原理及应用(MySQL版在线实训版)(第2版)-习题答案汇 陈业斌 第1-14章_第2页
数据库原理及应用(MySQL版在线实训版)(第2版)-习题答案汇 陈业斌 第1-14章_第3页
数据库原理及应用(MySQL版在线实训版)(第2版)-习题答案汇 陈业斌 第1-14章_第4页
数据库原理及应用(MySQL版在线实训版)(第2版)-习题答案汇 陈业斌 第1-14章_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习题11.1选择题(1)B(2)B(3)C(4)B(5)D(6)D(7)C(8)C(9)A(10)A1.2填空题(1)数据 (2)数据结构、数据操作 (3)有组织、可共享 (4)外模式、内模式(5)逻辑、物理1.3简答题(1)简述数据库、数据库系统、数据库管理系统这几个概念。答:数据库是存放数据的仓库,是长期存储在计算机内有组织、可共享的大量数据的集合。数据库系统是指引入数据库后的计算机系统,一般由数据库、数据库管理系统、数据库应用系统和数据库管理员组成。数据库管理系统是位于用户与操作系统之间的数据管理软件,是计算机的基础软件之一,也是一类大型复杂的系统软件。(2)什么是数据模型,并列举其三个基本组成要素。答:数据模型是对现实世界数据特征的抽象,用来描述数据、组织数据和对数据进行操作。数据模型的基本组成要素包括数据结构、数据操作和完整性约束。(3)简述数据库系统的三级模式结构,并说明其作用。答:数据库系统的三级模式结构包括模式、外模式和内模式。模式是数据库的总框架,描述数据库中全体数据的逻辑结构和特征;外模式是模式的一部分,面向用户,描述用户数据的结构;内模式描述数据的物理结构和存储方式。这种结构使得数据的逻辑结构和物理存储可以分离,保证了数据的逻辑独立性和物理独立性。习题22.1选择题(1)A(2)B(3)B(4)B(5)B(6)C(7)B(8)B(9)C(10)A2.2填空题(1)相同(2)属性(3)外键(4)实体(5)相容2.3简答题(1)什么是关系的主键和外键?主键:在关系中,能够唯一标识一个元组的属性集称为该关系的主键。主键中的属性不能取空值(NULL),也不能取重复值。一个关系只能有一个主键。外键:如果一个关系R中的某个属性集X并非R的键,而是另一个关系S的键,则称X为关系R的外键。此时,关系R称为参照关系,关系S称为被参照关系。(2)等值连接、自然连接和外连接有什么区别?等值连接的连接条件通常指定两个关系中一个或多个属性之间的等值关系。等值连接的结果是一个新的关系,包含所有满足连接条件的元组。结果中的属性是参与连接的所有关系的属性的并集。自然连接是一种特殊的等值连接,它自动基于两个关系中所有同名属性上的等值关系进行连接。自然连接的结果是一个新的关系,包含所有满足连接条件的元组。与等值连接不同的是,自然连接的结果中只包含一次每个同名属性,即结果中的属性名在参与连接的关系中是唯一的。外连接是另一种连接操作,它返回至少在一个关系中找到匹配的元组。外连接的结果是一个新的关系,包含参与连接的所有关系的元组,以及可能的空值来填充不匹配的部分。(3)描述关系模型的完整性约束,并解释其中的实体完整性和参照完整性。关系模型的完整性约束是关系的某种约束条件,它主要包括三类:实体完整性、参照完整性和用户自定义的完整性。实体完整性:要求关系中的主键不能取空值(NULL),也不能取重复值。这是为了保证关系中的每个元组(即每行数据)都能被唯一地标识。参照完整性:如果关系R中的某个属性集X是外键,并且X与关系S的主键相对应,则R中的每个元组在X上的值必须满足以下条件之一:(1)为空值(NULL),表示R中的元组与S中的元组之间暂时没有关联。(2)非空值,且必须是S中某个元组的主键值,表示R中的元组与S中的某个元组之间存在关联。2.4综合题(1)检索学号为s1的学生的借书情况。πsno,bno,b_time,r_time,quantity,fee(σsno='s1'(sjb))(2)检索计算机系学生的借书情况。πsno,bno,b_time,r_time,quantity,fee(σdept='计算机系'(s)⨝sjb)(3)检索学生李明所借图书的图书名和出版社情况。πbname,publisher(σsname='李明'(s)⨝sjb⨝b)(4)检索李明借的《数据库》一书的欠费情况。πfee(σsname='李明'∧bname='数据库'(s⨝sjb⨝b))(5)检索至少借了王小川同学所借的所有图书的学生的学号。πsno,bno(sjb)÷πbno(σsname='王小川'(s⨝sjb))(6)检索12月31日归还的图书情况。πbno,bname,writer,publisher,quantity,price(σr_time='2024/12/31'(sjb)⨝b)(7)检索木华出版社出版的30元以下的图书情况。πbno,bname,writer,publisher,quantity,price(σpublisher='木华出版社'∧price<30(b))3.1选择题。(1)B(2)D(3)C(4)D(5)D(6)B(7)B(8)C3.2简答题(1)简要说明MySQL数据库的特点。答:易用性:与其他大型数据库相比,MySQL的复杂程度较低,易于学习和使用。可移植性:能够工作在不同的系统平台上,如Windows、Linux、UNIX、macOS等。接口丰富:提供了用于多种编程语言的API,如C、C++、Java、PHP、Python等。标准SQL:支持完整的标准SQL(结构化查询语言)。安全性:具有可靠的数据安全层,可提供高效的数据加密。(2)如何通过命令提示符窗口登录MySQL服务?答:1)通过命令提示符窗口登录MySQL服务,需要按照以下步骤进行:确保MySQL的bin目录(如“C:\ProgramFiles\MySQL\MySQLServer9.0\bin”)已添加到系统的环境变量中,或者可以直接在命令提示符中定位到该目录。2)打开命令提示符窗口,输入以下命令(以root用户为例):mysql-uroot-p然后按回车键,系统会提示输入root用户的密码。3)输入密码后,按回车键。如果密码正确,则登录成功,命令提示符窗口的提示符将变为“mysql>”,此时即可执行SQL语句。(3)Windows系统启动MySQL服务的方法有哪些?1)通过服务管理器(ServicesManager)启动按Win+R打开运行对话框。输入services.msc并按回车键打开服务管理窗口。在服务列表中找到MySQL相关的服务(例如MySQL90或者MySQL80,具体取决于你的安装版本),然后右键点击它。选择“启动”(Start)选项来启动服务。2)使用命令提示符(CommandPrompt)启动按Win+R打开运行对话框。输入cmd并按回车键打开命令提示符。输入以下命令并按回车键:netstartMySQL903)使用MySQL自带的程序启动打开MySQL的安装目录下的bin文件夹。运行mysqld.exe文件。如果需要作为服务启动,可以使用mysqld--install命令先安装为服务,然后再使用netstart命令启动。习题4答案4.1选择题。(1)D(2)D(3)C(4)B(5)A(6)C(7)B(8)C(9)D(10)A4.2填空题(1)数据操纵(2)NOTNULL/非空(3)ALTER/ALTERTABLE(4)TRUNCATETABLE(5)REFERENCES(6)UNIQUE4.3简答题(1)简述列约束和表约束的区别是什么?答:直接在列后面定义的约束为列级约束。在表定义时,单独一行定义的约束为表级约束。(2)简述如何解决汉字显示乱码问题?答:若把存储看成是服务器端行为,把显示看成是客户端行为,则服务器端和客户端必须使用相同的字符编码和解码规则才不会产生乱码。(3)MySQL的InnoDB存储引擎有哪些特点?答:InnoDB存储引擎支持事务处理、支持外键、支持崩溃恢复和并发控制,它还具有独立的缓冲池、支持行级锁定和外键完整性约束。(4)SQL的哪些核心功能可以用9个动词来概括?答:数据定义(CREATE、DROP、ALTER)、数据操纵(SELECT、INSERT、UPDATE、DELETE)、数据控制(GRANT、REVOKE)。习题55.1选择题。(1)D(2)C(3)C(4)C(5)A(6)A(7)A(8)D(9)(10)5.2填空题(1)*(2)!=(3)任意(4)SUM()(5)ASC5.3综合题创建数据库mytest,并设置字符集为UTF8。将所给某省质量工程项目案例数据导入数据库,存放在zlgc(pid,pname,shcool,category,head,grade)表中。其中pid[项目编号]、pname[项目名称]、school[项目单位]、category[项目类别]、head[项目负责人]、grade[项目等级],根据此表中的数据统计以下信息:(1)统计每个学校获批的项目数,并按降序排列;SELECTschool,COUNT(*)FROMzlgcGROUPBYschoolORDERBYCOUNT(*)DESCLIMIT1;(2)统计每个学校在不同类别的项目上分别获得的项目数;SELECTschool,category,COUNT(*)FROMzlgcGROUPBYschool,category;(3)查看获得"课程思政示范课程"项目数最多的学校;SELECTschool,COUNT(*)numberFROMzlgcWHEREcategory='课程思政示范课程'GROUPBYschoolORDERBYCOUNT(*)DESCLIMIT1;(4)查看获得"课程思政示范课程"项目50项以上的学校。SELECTschool,COUNT(*)numberFROMzlgcWHEREcategory='课程思政示范课程'GROUPBYschoolHAVINGCOUNT(*)>=50ORDERBYCOUNT(*)DESC;习题66.1选择题(1)C(2)B(3)B(4)A(5)A(6)C(7)A(8)B(9)B(10)A6.2填空题(1)自然(2)全(3)EXISTS(4)差(5)ALL(6)索引6.3综合题查询计算机系学生所借图书的学生名和书名。SELECTs.sname,b.bnameFROMstudentsJOINborrowbrONs.sno=br.snoJOINbookbONbr.bno=b.bnoWHEREs.dept='计算机系';查询哪个专业的学生借书次数最多。SELECTs.dept,COUNT(*)ASborrow_countFROMstudentsJOINborrowbrONs.sno=br.snoGROUPBYs.deptORDERBYborrow_countDESCLIMIT1;查询李明借的图书的图书名和出版社情况。SELECTb.bname,b.pressFROMstudentsJOINborrowbrONs.sno=br.snoJOINbookbONbr.bno=b.bnoWHEREs.sname='李明';查询学生的欠费情况,输出学号,姓名和欠费总数。SELECTs.sno,s.sname,SUM(br.fine)AStotal_fineFROMstudentsJOINborrowbrONs.sno=br.snoGROUPBYs.sno,s.sname;查询借阅次数最多的图书的书名和借阅次数。SELECTb.bname,COUNT(*)ASborrow_countFROMbookbJOINborrowbrONb.bno=br.bnoGROUPBYb.bnameORDERBYborrow_countDESCLIMIT1;查询未归还图书的学生名和图书名。SELECTs.sname,b.bnameFROMstudentsJOINborrowbrONs.sno=br.snoJOINbookbONbr.bno=b.bnoWHEREbr.return_dateISNULL;查询每本超期归还图书的学号、书号和超期天数。SELECTbr.sno,br.bno,DATEDIFF(br.return_date,DATE_ADD(br.borrow_date,INTERVALbr.loan_periodDAY))ASoverdue_daysFROMborrowbrWHEREbr.return_date>DATE_ADD(br.borrow_date,INTERVALbr.loan_periodDAY);查询至少借了王小川同学所借的所有图书的学生的学号和姓名。SELECTs.sno,s.snameFROMstudentsWHERENOTEXISTS(SELECT*FROMborrowbrWHEREbr.sno=(SELECTsnoFROMstudentWHEREsname='王小川')ANDnotexists (SELECTbr2.bnoFROMborrowbr2WHEREbr2.sno=s.snoandbr2.bno=br.bno))ands.sname<>'王小川';请删除借阅了“大学物理”且尚未归还的借阅记录DELETEFROMborrowWHEREbno=(SELECTbnoFROMbookWHEREbname='大学物理')ANDreturn_dateISNULL;习题77.1选择题。(1)D(2)B(3)D(4)C(5)D(6)C(7)A(8)C(9)C(10)D7.2填空题(1)视图(2)安全(3)B+树索引(4)叶子(5)哈希值7.3简答题(1)索引关键字的选取原则有哪些?查询条件中使用频繁的字段数字类型的字段存储空间较小的字段重复度较低的字段更新不频繁的字段尽量使用前缀来建立索引(2)普通索引、主键索引、唯一索引有何区别?普通索引:是最基本的索引类型,可以创建在任意一个字段上,索引列没有任何限制。主键索引:索引列值必须是唯一的且不能为空;每张表只能有一个主键索引,主键索引通常用作表的主键。唯一索引:索引列的值必须是唯一的,但允许有空值;一张表可以有多个唯一索引。(3)简述视图与基本表的区别。定义:基本表是数据库中的实际物理表,存储着实际的数据。而视图是一种虚拟表,它是根据基本表中的数据通过SQL查询语句创建的逻辑视图。存储:基本表存储实际的数据,而视图不存储实际的数据,它只存储定义视图的SQL查询语句。更新:基本表可以直接进行增删改查等操作。视图通常只能用于查询,虽然某些情况下可以更新视图,但这受到一定限制。7.4综合题。某质量工程项目表的结构为:zlgc(id[序号]int,pname[项目名称]varchar(255),school[单位]varchar(255),category[项目类别]varchar(255),head[负责人]varchar(255),grade[等级]varchar(255)),创建数据库mytest,导入项目数据到zlgc表中,并完成如下操作:在“序号”上创建主键索引primary;ALTERTABLEzlgcADDPRIMARYKEY(id);在“项目名称”上创建前缀索引idx_pname,并判断前缀字符个数;CREATEINDEXidx_pnameONzlgc(pname(15));在“负责人”上创建全文索引ft_head,并查找“曹慧平”参与的项目;CREATEFULLTEXTINDEXft_remarksONzlgc(head);SELECT*FROMzlgcWHEREMATCH(head)AGAINST('曹慧平');在“单位”和“项目类别”上创建联合索引idx_school_category;CREATEINDEXidx_school_categoryONzlgc(school,category);创建视图v_max_project保存查询获得项目最多的学校;创建视图v_school_categorys保存查询每个学校在不同的项目类别上分别获得的项目数;CREATEVIEWv_school_categorysASSELECTschool,category,COUNT(*)项目数FROMzlgcGROUPBYschool,category;(7)使用EXPLAIN分析(5)、(6)两个视图执行时,对索引idx_school_category的使用情况。EXPLAINSELECT*FROMv_max_project;EXPLAINSELECT*FROMv_school_categorys;(5)、(6)两个视图执行时都使用了索引idx_school_category;习题88.1选择题。(1)D(2)C(3)D(4)C(5)C(6)D(7)C(8)A(9)D(10)A8.2填空题(1)CALL(2)CONTINUE(3)用户变量(4)INOUT(5)游标8.3简答题(1)什么是游标?答:游标是指向内存的一快区域,保存查询返回的结果,用户可以使用游标从结果集中逐一读取、逐一处理。(2)简述存储过程和存储函数的区别是什么?答:1)存储过程的参数传递类型可以有IN、OUT和INOUT3种类型,而存储函数的参数传递类型只有IN类型;2)存储过程需要使用CALL语句调用,而存储函数不需要,可以直接使用存储函数,方法与内置函数相同;3)存储过程中不允许包含RETURN语句,不能有返回值,但可以通过OUT或INOUT参数带回多个值,而存储函数的函数体中必须包含一条RETURN语句,且只能返回一个值;4)存储函数不能调用存储过程,存储过程可以调用存储函数;5)存储过程主要用于执行并完成某个功能操作,而存储函数主要用于计算并返回一个函数值。(3)什么是触发器?触发器的作用是什么?答:触发器是一种特殊的存储过程,编译后存储在数据库服务器中。当特定事件发生时,由系统自动调用执行,无需显式执行。另外,触发器不接受任何参数,而存储过程需要显式调用,可以接收和传回参数。触发器与数据表紧密联系,主要用于实现复杂完整性约束以及对数据库中特定事件进行监控和响应。(4)简述触发器和事件的区别是什么?答:触发器基于永久性表创建,并且只能由数据库的特定操作事件触发。当操作影响到被保护的数据时,如进行插入(INSERT)、修改(UPDATE)和删除(DELETE)操作,数据库系统就会自动执行触发器中动作体,以保护数据完整性。事件是MySQL在相应时刻调用的数据库对象。它也是一种特殊的存储过程,用于定时执行某个任务,触发器是基于数据表上的操作,而事件是基于时间被调度的。8.4综合题(1)创建存储过程GetDetails,根据学生学号查询该学生所借书籍的详细信息。DELIMITER//CREATEPROCEDUREGetDetails(INp_snoVARCHAR(10))BEGINSELECTs.sname,b.bname,b.press,b.price,br.borrow_date,br.return_date,br.fineFROMstudentsJOINborrowbrONs.sno=br.snoJOINbookbONb.bno=br.bnoWHEREs.sno=p_sno;END//DELIMITER;(2)创建存储函数CalculateFine,计算一个学生的所有罚款总额。DELIMITER//CREATEFUNCTIONCalculateTotalFine(p_snoVARCHAR(10))RETURNSDECIMAL(10,2)READSSQLDATABEGINDECLAREtotal_fineDECIMAL(10,2)DEFAULT0.00;SELECTSUM(fine)INTOtotal_fineFROMborrowWHEREsno=p_sno;RETURNtotal_fine;END//DELIMITER;(3)创建存储触发器DecreaseInventory,当新借书记录插入到borrow表时,自动减少对应图书的库存量。DELIMITER//CREATETRIGGERDecreaseInventoryBEFOREINSERTONborrowFOREACHROWBEGINUPDATEbookSETinventory=inventory-1WHEREbno=NEW.bno;END//DELIMITER;(4)创建事件CheckOverdueBooks,每天自动检查是否有逾期未归还的图书。--先创建一个表用于保存逾期未归还的图书CREATETABLEoverdue_books(snoCHAR(2),bnoCHAR(2),overdue_daysINT);DELIMITER//CREATEEVENTCheckOverdueBooksONSCHEDULEEVERY1MINUTE//为了观察方便,将1天改1分钟DOBEGININSERTINTOoverdue_books(sno,bno,overdue_days)SELECTbr.sno,br.bno,DATEDIFF(CURDATE(),br.borrow_date+INTERVALbr.loan_periodDAY)ASoverdue_daysFROMborrowbrWHEREbr.return_dateISNULLANDCURDATE()>(br.borrow_date+INTERVALbr.loan_periodDAY);END//DELIMITER;习题99.1选择题(1)B(2)C(3)C(4)C(5)D(6)D(7)B(8)B(9)A(10)B9.2请设计一个图书管理数据库,对每个借阅者保存读者记录,包括:读者号、姓名、性别、年龄、单位;图书属性有:书号、书名、作者、出版社;对每本被借出的图书记录读者号、图书号、借出日期和应还日期。要求:画出E-R图,再将其转换为关系模式。读者(读者号,姓名,性别,年龄,单位)图书(书号,书名,作者,出版社)借阅(ID,读者号,书号,借出日期,应还日期)9.3

某公司在多个地区设有销售部经销本公司的各种产品,每个销售部聘用多名职工,且每名职工只属于一个销售部。销售部有部门名称、地区和电话等属性,产品有产品编码、品名和单价等属性,职工有职工号、姓名和性别等属性,每个销售部的销售产品有数量属性。(1)根据上述语义画出E-R图,要求在图中画出属性并注明联系的类型;(2)试将E-R图转换成关系模式,并指出每个关系模式的主码和外码。销售部(部门名称,地区,电话)产品(产品编码,品名,单价)职工(职工号,姓名,性别,部门名称)销售(ID,部门名称,产品编码,数量)9.4某商场可以为顾客办理会员卡,每个顾客只能办理一张会员卡,顾客信息包括顾客姓名、地址、电话、身份证号,会员卡信息包括号码、等级、积分。(1)若顾客具有多个地址和多个电话号码,地址包括省、市、区、街道,电话号码包括区号、号码根据上述语义分别画出E-R图,并将E-R图转换成关系模式,并指出每个关系模式的主码和外码。顾客(身份证号,姓名,会员卡号码)外码:会员卡号码地址(地址ID,省,市,区,街道,身份证号)外码:身份证号电话号码(区号,号码,身份证号)外码:身份证号会员卡(会员卡号码,等级,积分)(2)若顾客具有多个地址,每个地址具有多个电话号码,地址包括省、市、区、街道,电话号码包括区号、号码。会员卡(会员卡号码,等级,积分)顾客(身份证号,姓名,会员卡号码)外码:会员卡号码地址(地址ID,省,市,区,街道,身份证号)外码:身份证号电话号码(区号,号码,地址ID)外码:地址ID9.5某数据库中需要记录乐队、成员和歌迷信息,乐队有名称、多个成员、一个队长,成员信息包括姓名、性别,歌迷信息包括姓名、性别、喜欢的乐队、喜欢的成员。(1)画出基本的E-R图。(2)修改E-R图,使之能够表示成员在乐队的工作记录,包括进入乐队时间以及离开乐队时间。9.6某个T公司的数据库信息:(1)部门具有部门编号、部门名称、办公地点等属性;(2)部门员工具有员工编号、姓名、级别等属性,员工只在一个部门工作;(3)每个部门有一个部门员工作为部门经理;(4)实习生具有实习编号、姓名、年龄等属性,只在一个部门实习(5)项目具有项目编号、项目名称、开始日期、结束日期等属性;(6)每个项目由一名员工负责,由多名员工、实习生参与;(7)一名员工只负责一个项目,可以参与多个项目,参与每个项目具有工作时间比;(8)每个实习生只参与一个项目。画出E-R图,并将E-R图转换为关系模式。部门(部门编号,部门名称,办公地点,经理编号)外码:经理编号实习生(实习编号,姓名,年龄,部门编号,项目编号)外码:部门编号,项目编号员工(员工编号,姓名,级别,部门编号)外码:部门编号项目(项目编号,项目名称,开始日期,结束日期,负责员工)外码:负责员工员工参与项目(员工编号,项目编号,工作时间比)外码:员工参与,项目编号9.7设计一个采购、销售和客户管理数据库。其中,一个供应商可以供应多种零件,一种零件也可以有多个供应商。客户按订单采购商品,一个客户有多个订单,一个订单包含多个商品明细列表,一条明细记录的是某供应商供应某零件的信息。客户和供应商都分别属于不同的国家,而国家按世界五大洲分组。系统中有Part(零件)、Supplier(供应商)、Customer(客户)、Orders(订单)、Orderitem(订单明细)、Nation(国家)、Region(地区)等7个实体。每个实体的属性、键如下。Part:partID(零件编号)、name(零件名称)、mfgr(零件制造商)、type(类型)、size(大小)、retailprice(零售价格)、comment(备注)。Supplier:supperID(供应商编号)、name(供应商名称)、address(地址)、nation(国籍)、phone(电话)、comment(备注)等。Customer:custID(客户编号)、name(客户名称)、address(地址)、phone(电话)、nation(国籍)、comment(备注)。Orders:orderID(订单编号)、orderdate(订单日期)、orderpriority(订单优先级)、clerk(记账员)、comment(备注)。OrderItem:ItemID(订单明细编号)、partID(零件号)、supperID(零件供应商号)、quantity(零件数量)、extendedprice(零件总价)、retwinflag(退货标记)等。Nation:nationID(国家编号)、name(国家名称)、regionID(所属地区)。Region:regionID(地区编号)、name(地区名称)。(1)根据上述语义,使用MySQLWorkbench工具设计数据库物理结构;(2)根据数据库物理结构,使用“正向工程”功能生成SQL语句。答:(1)

(2)CREATEDATABASEorder_manamement;USEorder_manamement;CREATETABLERegion(regionIDINTPRIMARYKEY,rnameVARCHAR(255));CREATETABLENation(nationIDINTPRIMARYKEY,nnameVARCHAR(255),regionIDINT,--这里是外键,关联到Region表的regionIDFOREIGNKEY(regionID)REFERENCESRegion(regionID));CREATETABLESupplier(supperIDINTPRIMARYKEY,snameVARCHAR(255),addressTEXT,nationINT,--这里是外键,关联到Nation表的nationIDphoneVARCHAR(20),COMMENTTEXT,FOREIGNKEY(nation)REFERENCESNation(nationID));CREATETABLECustomer(custIDINTPRIMARYKEY,cnameVARCHAR(255),addressTEXT,phoneVARCHAR(20),nationINT,--这里是外键,关联到Nation表的nationIDCOMMENTTEXT,FOREIGNKEY(nation)REFERENCESNation(nationID));CREATETABLEPart(partIDINTPRIMARYKEY,pNAMEVARCHAR(255),mfgrVARCHAR(255),TYPEVARCHAR(255),sizeVARCHAR(255),retailpriceDECIMAL(10,2),COMMENTTEXT);CREATETABLEOrders(orderIDINTPRIMARYKEY,orderdateDATE,orderpriorityENUM('High','Medium','Low'),clerkVARCHAR(255),COMMENTTEXT);CREATETABLEOrderItem(itemIDINTPRIMARYKEY,orderIDINT,--这里是外键,关联到Order表的orderIDpartIDINT,--这里是外键,关联到Part表的partIDsupperIDINT,--这里是外键,关联到Supplier表的supperIDcustIDINT,--这里是外键,关联到Customer表的custIDquantityINT,extendedpriceDECIMAL(10,2),retwinflagENUM('Yes','No'),FOREIGNKEY(orderID)REFERENCESOrders(orderID),FOREIGNKEY(partID)REFERENCESPart(partID),FOREIGNKEY(supperID)REFERENCESSupplier(supperID),FOREIGNKEY(custID)REFERENCESCustomer(custID));习题1010.1选择题(1)C(2)C(3)D(4)A(5)B(6)D(7)C(8)B(9)B(10)B10.2填空题 (1)1NF/第一范式(2)部分、传递(3)传递(4)不同(5)反范式10.3简答题指出下列关系模式满足第几范式,并说明理由。(1)R(A,B,C),F={A→C,C→A,A→BC}。(2)R(A,B,C,D),F={B→D,AB→C}。(3)R(A,B,C),F={B→C,AC→B}。解答:(1)R(A,B,C),F={A→C,C→A,A→BC}。由于A→BC,A可以决定所有的属性,A是一个候选键。A→C→A是一个循环依赖,意味着A和C相互决定,不存在传递函数依赖因此,该关系模式满足3NF。(2)R(A,B,C,D),F={B→D,AB→C}。在这个关系模式中,C和D是非主属性,而AB是候选键。B→D表明D部分函数依赖于候选键,这违反了2NF的要求。因此,该关系模式满足1NF。(3)R(A,B,C),F={B→C,AC→B}。AC→B,AC可以决定B。B→C,AC是候选键。在F中,非主属性只有B,AC→B不是传递依赖,没有非主属性传递依赖于候选键。因此,该关系模式满足3NF。10.4综合题已知关系模式R(sno,cno,grade,tname,taddr),其属性分别表示学号、课程号、成绩、教师名、教师地址等。其语义为,每个学生每学一门课程只有一个成绩,每门课程只有一个教师任教,每个教师只有一个地址(教师不重名)。(1)求关系模式R的基本函数依赖。(2)求关系模式R的键。(3)关系模式R满足第几范式,为什么?(4)将R分解为3NF关系模式,并具体说明。解:(1)根据语义,其函数依赖集为:F={(sno,cno)→grade,cno→tname,tname→taddr}。(2)由于(sno,cno)能够决定所有的属性集合,且没有任一真子集能够决定所有的属性集合,所以R的码为(sno,cno)。(3)已知R的候选码为(sno,cno)。∵F中存在cno→tname,∴存在非主属性tname对候选码(sno,cno)的部分函数依赖,所以R∈1NF。(4)将R分解为R1,R2,R3:R1(sno,cno,grade),F1={(sno,cno)→grade};R2(cno,tname),F2={cno→tname}。R3(tname,taddr),F2={tname→taddr}。R1,R2,R3中不存在非主属性对候选码的部分函数依赖和传递函数依赖,所以R1,R2,R3∈3NF。10.5设计题在线商城的订单处理系统设计了三张表:订单表(订单编号、订单日期、总金额,客户ID),客户表(客户ID、姓名、地址),订单明细表(商品ID、数量、单价,订单编号)。为了提高查询订单的效率,考虑将客户详细信息保存到订单表中,请给出订单表详情,并说明这么做可能产生的问题及解决办法。答:将订单表设计为:订单表(订单编号,订单日期,总金额,客户ID,姓名,地址),即使用反范式设计思想,将客户的姓名和地址直接存储在订单表中,这种做法的好处是减少表连接,从而提高了查询性能。可能产生的问题是:若客户下单后更新了地址,则客户表中的地址与订单表中的地址不一致。解决办法:在客户表中设计更新触发器,当地址发生变化时修改该客户订单地址。习题1111.1选择题(1)A(2)C(3)A(4)B(5)D(6)D(7)D(8)A(9)D(10)D11.2填空题(1)一致性(2)原子(3)UNDO(4)活跃(5)未提交11.3简答题(1)并发操作可能会导致哪几类数据不一致性?用什么方法能避免各种不一致的情况?答:多个事务对数据库的并发操作会给数据库带来一些问题,主要有4类:丢失更新、脏读、不可重复读、幻读。避免并发操作导致的数据不一致情况,主要是通过数据库的事务隔离级别、锁机制(悲观锁、乐观锁)以及多版本并发控制(MVCC)等技术手段来实现的。(2)SQL标准定义了几种事务隔离级别?MySQL数据库支持其中的几种事务隔离级别?MySQL数据库默认隔离级别是什么?答:SQL标准定义了以下4种事务隔离级别,隔离级别从低到高的依次如下:READUNCOMMITTED:最低的隔离级别,允许事务读取未提交的数据(脏读)。READCOMMITTED:允许事务读取已经提交的数据,但可能会出现不可重复读的情况。REPEATABLEREAD:确保事务在整个生命周期内看到的数据是一致的,即在事务内重复读取相同的数据将得到相同的结果。但在这个级别下,仍然可能出现幻读。SERIALIZABLE:最高的隔离级别,确保事务之间完全串行化执行,可以避免脏读、不可重复读和幻读。SQL标准定义的默认事务隔离级别是SERIALIZABLE。MySQL数据库默认的隔离级别是REPEATABLEREAD。(3)什么是锁?试述锁的类型及含义。答:锁是实现并发控制的一个非常重要的技术。其基本思想是:当一个事务需要存取一个数据对象(基本表、若干记录或若干个字段)时,事务必须获得该对象的某种控制权,以避免来自其他事务的干扰,使得其他事务无法访问该对象,尤其是阻止其他事务更新该对象。采用的行级封锁类型有两种:排他锁(ExclusiveLocks,简记为X锁)和共享锁(ShareLocks,简记为S锁)。排他锁:又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。共享锁:又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A,但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。11.4综合题假设有一个emp表:emp(id,department_id,salary),用于存储员工信息。现有两个事务T1和T2并发执行。T1查询所有department_id=1的员工,T2在T1查询之后但在T1提交之前插入了一个新的员工记录,该记录也属于部门1。在READCOMMITED和REPEATABLEREAD两个隔离级别下,T1最终能否看到T2插入的新员工记录?为什么?答:在READCOMMITTED隔离级别下,如果T2提交了插入操作,那么T1会在后续查询中看到T2插入的新员工记录。在REPEATABLEREAD隔离级别下,无论T2是否提交了插入操作,只要T1没有结束(即没有提交或回滚),T1不会看到T2插入的新员工记录,因为REPEATABLEREAD保证了事务内重复读的一致性。习题1212.1选择题(1)C(2)D(3)D(4)D(5)C(6)A(7)D(8)B(9)A(10)C12.2填空题(1)存取控制(2)自主存取控制(3)单(4)审计(5)数据安全12.3简答题(1)简述实现数据库安全性控制常用的方法。答:数据库安全性控制常用的方法有用户标识与鉴别,存取控制,数据库的视图机制,数据库的审计,数据加密。(2)什么是数据库的审计功能,简述审计功能的得与失。答:审计就是犯罪侦破中的一个重要措施,它跟踪记录用户对数据库的所有操作,并把这些信息保存在审计日志中。技术人员可以利用这些信息,分析导致对数据库泄露或损坏的一系列时件,从而找出非法访问数据的人、时间、地点、内容等有关信息,以达到对犯罪人员惩戒的目的。审计通常是很耗费时间和空间的,所以这项功能一般是作为DBMS的可选项,主要用于安全性要求较高的部门或单位。(3)简述数据加密常用的两种方法。答:答:加密的基本思想就是根据一定算法将原始数据(明文)变换为不可直接识别的格式(密文)。具体的方法有两种:一种是替换法,该方法使用密匙将明文中的每一个字符转换为密文中的一个字符;另一种方法是排列法,该方法仅将明文中的字符按不同的顺序重新排列。单独使用这两种方法的任意一种都是不够安全的,但将这两种方法结合起来就能提供相当高的安全标准。12.4综合题根据提示,完成下列操作(1)创建一个用户user1,授权该用户查询数据库teaching_manage对象权限。CREATEUSERuser1IDENTIFIEDBY'user1';GRANTSELECTONteaching_manage.*TO'user1';(2)授予user1对student表的全部操作权限。GRANTALLPRIVILEGESONteaching_manage.studentTO'user1';(3)授予user1对score表grade字段的修改权限。GRANTUPDATE(grade)ONteaching_manage.scoreTO'user1';(4)回收user1在student表上的全部操作权限。REVOKEALLONteaching_manage.studentFROM'user1';(5)回收user1对score表grade字段的修改权限。REVOKEUPDATE(grade)ONteaching_manage.scoreFROM'user1';习题1313.1选择题(1)C(2)C(3)A(4)D(5)C(6)C(7)C(8)B(9)C(10)A13.2填空题(1)系统故障(2)日志文件(3)数据备份(4)热备份(5)差异备份13.3简答题答案1.答:事务故障:事务未能到达预期的终点(COMMIT或ROLLBACK),数据库可能处于不正确状态。系统故障:导致系统需要重启的事件,如硬件错误、操作系统故障、数据库管理系统代码错误、突然断电等。介质故障:指外存故障,如磁盘损坏、磁头碰撞、瞬时强磁场干扰等。计算机病毒:具有破坏性的、可以自我复制的计算机程序。人为错误:包括管理员或用户的误操作,如错误地删除或修改数据,或不当的配置更改。这些故障对数据库的影响主要有两种:一是数据库本身被破坏;二是数据库没有被破坏,但数据不正确。2.答: MySQL中二进制日志(binlog)的作用主要有两个方面:数据恢复:在数据库发生故障时,可以使用二进制日志来还原数据库到某个一致状态。主从复制:在主从复制架构中,二进制日志用于将从服务器上的数据与主服务器保持同步。答:分库分表的主要目的是为了提高数据库的性能和可扩展性。当单个数据库或表中的数据量过大时,会导致查询和写入性能下降,通过分库分表可以将数据分散到多个数据库或表中,从而减轻单个数据库或表的压力。13.4综合题1.答案:(1)删除teaching_manage中的score表,使用mysqldump完全备份teaching_manage。首先找到teaching_manage中的score表,并删除。其次在data目录下输入命令:Mysqldump-uroot-p--flush-logs--databaseteaching_manage>d:backup\bk_teaching_manage.sql.(2)新建score表结构;刷新日志;CreatetablescoreFlushlogs;(3)在score表中插入全部记录Insertintoscorevalues(null,’001101’,’101’,80),(null,’001101’,’102’,78);(4)误删除数据库teaching_manageDropdatabaseteaching_manage恢复数据过程:(5)刷新日志,将恢复过程写入新的日志中Flushlogs;Showbinarylogs;--显示日志(6)利用备份文件bk_teaching_manage.sql恢复数据库在DOS窗口mysql目录下的data目录下输入命令:Mysql-uroot-p<d:\backup\bk_teaching_manage.sql并运行。(7)查看binlog日志文件内容Showbinlogeventsin‘win102106231722-bin.0004’(8)利用二进制文件‘win102106231722-bin.0005’,恢复score表结构。在DOS窗口中,当前日志文件所在的路径下执行命令:Mysqlbinlogwin102106231722-bin.0005|mysql-uroot-prootteaching_manage(9)利用二进制文件‘win102106231722-bin.0006’,恢复score表中的数据。Mysqlbinlog--stop-position=13599win102106231722-bin.0006|mysql-uroot-prootteaching_manage答:电商公司面临的订单数据量增加导致查询效率下降的问题,可以通过以下优化措施进行改善:水平分表:将订单表按照订单ID进行哈希分表,减少单个表的数据量,提高查询和写入效率。表分区:如果水平分表后单个表数据量仍然很大,可以考虑对这些表进行分区,进一步减少单个分区的数据量,提高查询效率。索引优化:确保订单查询中常用的字段上有索引,并定期检查索引的使用情况和维护索引,以加速查询速度。主从复制:配置MySQL的主从复制,实现读写分离,提升查询性能,并增加系统的可用性。定期维护:定期清理历史数据,优化数据库表结构,检查并优化SQL查询语句,保持数据库的清洁和高效。习题1414.1选择题(1)A(2)C(3)A(4)C(5)D(6)B(7)B(8)C(9)C(10)A14.2填空题(1)数据层(2)数据库访问(3)应用服务器(4)ORM(5)ResultSet14.3简答题(1)答:Driver接口:Driver接口的实现类由数据库厂商提供,用以驱动自己的数据库。Connection接口:Connection接口与特定数据库连接,在连接上下文中执行SQL语句并返回结果。Statement接口:用于执行静态SQL语句并返回它所生成结果的对象。ResultSet接口:ResultSet接口提供了检索不同类型字段的方法。它还提供了对结果集进行滚动的方法。(2)答:使用Java访问MySQL数据库的步骤如下。1)加载MySQL驱动程序通过语句Class.forName("com.mysql.cj.jdbc.Driver")可加载MySQL8.0的数据驱动程序。如果访问MySQL5.0,则使用Class.forName("com.mysql.jdbc.Driver")。2)建立数据库连接驱动程序管理类DriverManager是JDBC驱动程序和Java程序的“桥梁”,通过调用它的getConnection()方法可以根据数据库的URL、用户名和密码创建数据库连接Connection对象。3)操作数据库Statement类主要用于操作数据库,向数据库传递要执行的SQL语句。通过Connection对象的createStatement()方法创建Statement对象,Statement对象有两个常用方法:executeUpdate()和executeQuery()。前者用于执行没有返回结果的SQL语句,如INSERT、UPDATE和DELETE语句。后者用于执行有返回结果的SQL语句,如SELECT语句。4)处理结果集5)关闭数据库连接14.4编程题(1)创建数据库book_trade;CREATEDATABASEbook_trade;(2)创建用户表usersCREATETABLEusers(student_idVARCHAR(20)PRIMARYKEY,nameVARCHAR(50)NOTNULL,passwordVARCHAR(50)NOTNULL,contact_infoVARCHAR(100));(3)插入测试数据INSERTINTOusers(student_id,name,password,contact_info)VALUES('20230001','张三','123456',),('20230002','李四','654321',);(4)编写Java程序,完成用户注册、登录、信息修改等模块代码,并进行测试。创建一个名为DBConnection的工具类,用于管理数据库连接:importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassDBConnection{privatestaticfinalStringURL="jdbc:mysql://localhost:3306/used_book_trade?useSSL=false&serverTimezone=UTC";privatestaticfinalStringUSER="root";privatestaticfinalStringPASSWORD="yourpassword";//请确保将yourpassword替换为你的MySQL数据库密码publicstaticConnectiongetConnection()throwsSQLException{returnDriverManager.getConnection(URL,USER,PASSWORD);}}实现用户注册功能创建一个名为UserRegistration的类,并实现用户注册功能:importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;publicclassUserRegistration{publicbooleanregisterUser(StringstudentId,Stringname,Stringpassword,StringcontactInfo){Stringsql="INSERTINTOusers(student_id,name,password,contact_info)VALUES(?,?,?,?)";try(Connectionconn=DBConnection.getConnection();PreparedStatementpstmt=conn.prepareStatement(sql)){pstmt.setString(1,studentId);pstmt.setString(2,name);pstmt.setString(3,password);pstmt.setString(4,contactInfo);intresult=pstmt.executeUpdate();returnresult>0;}catch(SQLExceptione){e.printStackTrace();returnfalse;}}}实现用户登录功能创建一个名为UserLogin的类,并实现用户登录功能:importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;publicclassUserLogin{publicbooleanloginUser(StringstudentId,Stringpassword){Stringsql="SELECT*FROMusersWHEREstudent_id=?ANDpassword=?";try(Connectionconn=DBConnection.getConnection();PreparedStatementpstmt=conn.prepareStatement(sql)){pstmt.setString(1,studentId);pstmt.setString(2,passwo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论