《数据库技术(SQL Server2000)》 课程设计 答辩拟提出的问题及回答要点 答辩过程:答辩时答辩老师先让学生陈述课题情况,然后针对学生自己开发的系统有针对性地提出下面所列问题中的2个或多个,当学生回答不出或不能完成所规定的操作时,适当提示一下。如果经过提示后学生仍不会,则该题作为不会处理。 创建数据库时能否定义多个主文件或次文件? 主文件只有1个,而次文件可有0个或多个。 创建数据库时能否不定义日志文件?若能,则系统会不会自动创建? 可以。会自动创建。 创建表时定义约束包含有 表级约束和字段级约束有什么区别? 创建表时定义约束,包括字段级约束(定义时紧跟在待约束的字段后,中间无逗号分隔)或表级约束(定义时放在所有字段定义的最后,前面有逗号分隔,可使用于多个字段)。 借书卡、图书、借书记录这三个表如何关联? 通过借书卡中的卡号、图书卡中的书号均定义为主键分别和借书记录表中的借书卡号和书号(均定义为外键)相连。 能否将借书卡中的姓名定义为主键? 不能,因为主键要求唯一、非空,而姓名可以相同。 图书表中的price单价字段应该用哪种数据类型?为什么? Float 或价格型,最好不要用int型,因为单价可以有小数。 借书卡中卡号用什么数据类型? 最好用char型,因为若用整型则不能显示开始的’‘0’,而且卡号定义为主键也是此原因。 如何执行或创建存储过程? 分别用‘exec存储过程名 实参表’和‘create proc 存储过程名 形参表 as……..’ 视图有什么作用? 隔离用户与基本表以保存基本表,并只显示所需要的数据,还可以节省空间。 10、存储过程执行中常用‘GO’语句,有何作用? 表示批处理已经结束。 11、能否从视图中提取出数据或对视图执行update? 都可以。 12、说说第三题的思路:其中分组条件和HAVING的使用条件和功能 先按卡号分组,然后统计没组的记录条数,将记录条数>=5的显示出来。 HAVING:通常和 GROUP BY一起使用,指定组或聚合的搜索条件。 13、说说EXISTS的使用方法: EXISTS,代表存在,EXISTS之后的子查询只查找满足条件的第一条记录,如果找到则立即停止。它只返回找到或未找到(逻辑值:真-找到/假-未找到),不返回具体的数据。执行过程:对外查询的每一条记录,根据它与子查询相关的字段均执行一次子查询来测试是否为真,若为真,则将此记录放入结果表中。 14、说说any和all函数的使用方法,和含义。 ANY即某一个(可用min改写),ALL即所有的(可用max改写)。它们前面必须要有比较运算符。 15、说说GETDATE()函数的意义 GETDATE()—获取系统当前的日期和时间,函数返回值类型为datetime。 16、说说第6题中,模糊查找的使用方法, 条件中可以用like表示模糊查找。 17、上题中’%’+@x+’%’是什么意思,加号能否省略。 %表示通配符,+号表示字符串相连,这里的+不能省略,因为@x是变量而不是字符。 18、说说多表相连的语句。 Where 借书卡.卡号=借书记录.借书卡号 and 图书.书号=借书记录.书号 19、说说dateadd( )函数的意义和使用方法。 求日期olddate加上额外日期number后得到的新日期 DATEADD (<datepart>,<number>,<olddate>) datepart:用来指定构成日期增量(减量)的类别。number:可正可负。 例:print dateadd(year,1,'2003-5-4') print dateadd(month,1,'2003-5-4') print dateadd(day,1,'2003-5-4') print dateadd(week,1,'2003-5-4') print dateadd(hour,1,'2003-5-4') print dateadd(minute,1,'2003-5-4') print dateadd(second,1,'2003-5-4') print dateadd(millisecond,1,'2003-5-4') print dateadd(quarter,1,'2003-5-4') -- quarter指季度(3个月) print dateadd(quarter,-1,'2003-5-4') 20、说说DATEDIFF() DATEDIFF()—求两个日期之间的日期时间差:date2-date1 DATEDIFF (<datepart>,<date1>,<date2>) 例1: print datediff(day,'2002-5-4','2003-6-5') print datediff(month,'2002-5-4','2003-6-5') print datediff(year,'2002-5-4','2003-6-5') print datediff(week,'2002-5-4','2003-6-5')  21、说说触发器的功能和作用 触发器(Trigger)是一种特殊类型的存储过程,只要对它所保护的数据进行修改,它就会自动触发。 当对被保护的数据修改时,系统会自动调用相关的触发器。 触发器有3种类型:insert触发器、update触发器和delete触发器。 22、说说删除触发器的方法,并做一些解释。 drop trigger tc 对于同一类(如delete属于一类)触发器,同一时刻一个表只能有一个触发器发挥作用。所以为表创建同类 (如delete类或insert类或update类) 的其它名称触发器时,会自动替换掉原有的同类触发器。 当一个表被删除时,该表的所有触发器均同时被删除。 23、若想在借书记录中根据还书日期自动计算出借书日期,该如何进行。 在定义借书记录时定义一个借书日期字段再加上as 还书日期-30 24、说说第17题借书功能程序的思路。 1、先判断图书表中有没有该书,如果图书表中没有该书则提示不能借该书 2、如果图书表中有该书,且该书册数不为0,借书纪录表中插入一条纪录且借书纪录中册数要减一。 25、说说第17题借书功能程序中变量@x的作用。 @x表示书号,要根据书名求出书号。 26、说说第18题还书功能程序的思路 1、先判断如果过期则不允许还书,给出提示要罚款多少钱(过期一天罚1毛钱) 2、 如果不过期则允许还书,删除借书纪录,图书纪录中册数加1。 27、说说第18题还书功能程序中变量@x,@y,@z的作用。 @x----表示过期天数 @y----表示书号,要根据书名求出书号 @z----表示罚款的价格 28、如要根据罚款的价格添加上名次(罚款最高者放在最前面),该如何在查询分析器中改写或编写代码? 可通过嵌套查询进行:1+超过当前价格的人数。 或用select….into…..orderby 罚款价格 desc,同时加上自动编号字段。 29、存储过程有何作用? 模块化编程:可反复被调用。 快速执行:第一次执行时进行分析优化并驻留内存,以后直接执行。 减少网络通信量:只要一条调用语句就可执行存储在服务器上的存储过程。 安全机制:可只能执行而不让修改。 30、给借书记录表中的还书日期加上非空约束。 可通过企业管理器或用alter语句进行。 31、在查询某班的借书信息语句 SELECT?a.NAME,b.BNAME FROM?BORROW?ab,CARD?a,BOOKS?b 为什么不能简单写一个name而用a.name 呢? 因为2个表中有同名name存在。 32、如何将某些信息保存到某个新表中? 可用select …..into …..from …..实现。 33、数据库操作语言一般有哪些? 数据操作语言(Data Manipulation Language,DML)用来在数据库中对各种数据进行操作:检索(SELECT)、插入(INSERT)、删除(DELETE)、修改(UPDATE)数据。 34、对于计算字段,允许用户修改它的值吗? 不允许。 35、DISTINCT是什么意思,有什么作用? DISTINCT短语去掉重复记录(“重复”指选出的记录信息中所选字段值均对应相同)。当表中没有定义主键时,很有可能存在重复的记录(内容完全相同的记录)。即使表中定义了主键,使用SELECT查询选择部分字段时,也有可能存在完全相同的值