数据库第三章
《数据库原理与应用》(第三版) 课件 第3章 数据库设计技术

分析的方法。
2023/9/9
8
3.2需求分析
2.数据流图(data flow diagram)
◆ SA方法只是对问题分析的一种思想,在具体的分析过程中还需要借助其他 的分析工具,这样才能完成对分析过程和结果的记录、对用户需求的表达
系统调研也称项目调研,即把系统开发当作项目来运作,其主要目的是通过接 触用户以了解并最终明确用户的实际需求。这个过程是一个系统分析人员理解
和掌握用户业务流程的过程,是一个需要不断与用户进行沟通和磋商的过程。
系统调研方法比较灵活,因人、因系统而异。大致过程可以分为以下几个步骤
来完成:
2023/9/9
3.2需求分析
第3章数据库设计技术
· 3.1数据库设计概述
·3.2需求分析
· 3.3数据库结构设计 · 3.4数据库的实施、运行和维护
2023/9/9
第三章数据库设计技术
3.1数据库设计概述
◆数据库设计是指在现有的应用环境下,从建立问题的概念模型开始,
逐步建立和优化问题的逻辑模型,最后建立其高效的物理模型,并据 此建立数据库及其应用系统,使之能够有效地收集、存储和管理数据 ,满足用户的各种应用需求。
的。所有这些结果都应该跟用户确认后予以书面形式确定下来。
2023/9/9
3.2需求分析
3.2.2需求分析的方法
1.SA方法
针对数据库设计,形成用户需求的有效表达,这种表达在说明书中多以数据流图、数
据字典等形式来描述。
为建立用户需求的表达,可以采用多种分析方法来完成。这些方法主要包括自顶向下
和自底向上两种方法,其中常采用的方法是自顶向下的结构化分析方法(structured analysis,SA)。
第3章 数据库的基本操作(1)

■若在文件名前指定了驱动器标识符,则文件建立在指定的 驱动器上,否则建立在当前驱动器上。 ■不指定文件扩展名时,缺省扩展名为.DBF。 ■若磁盘上存在这个文件或文件重名,系统显示一个警告对 话框,提示是否要改写表。如果需要改写,则选择【是】, 否则选择【否】。 ■不要用A-J单个字母作为表文件名,因为它们是专门用于工 作区别名的。
记录的总字节数=各个字段的宽度+ 1
LIST STRU和DISP STRU命令的区别:
DISP STRU:在每显示一屏信息后暂停,等待用户按任 意一键后继续显示; LIST STRU:显示信息时没有周期性暂停,而是连续 向下显示,直到显示完毕。
二. 显示表中的记录
格式:LIST ︱ DISPLAY
• 逻辑型字段:只允许输入下列字母中的一个: y, Y, t, T, n, N, f, F
• 日期型字段:mm-dd-yy mm取值范围01~12 dd取值范围01~31
• 备注型字段的输入:
Ctrl+PgDn: 弹出字段编辑窗口
Ctrl+W: 保存该字段内容到备注文件中。 输入数据后,该字段栏显示为Memo
指针定位就是将记录指针移到指定的记录上,记录指针指向的记 录称为当前记录。VFP提供了绝对定位和相对定位两类命令。
(1)记录指针的绝对定位
格式: GOTO [RECORD <数值表达式> ]∣TOP∣BOTTOM 功能:将记录指针直接定位到指定的记录上。
钮,所改变的设置仅在本次系统运行期间有效,退出系统 后,所做的修改将丢失。
二. 建立表前的准备
在建立表结构以前,首先应该根据用户的需求,明确所要创建 的表中应该包含哪些字段,每个字段的名称、类型和宽度。
《数据库》第三章参考答案

(1)检索 检索LIU老师所授课程的课程号、课程名。 老师所授课程的课程号、 检索 老师所授课程的课程号 课程名。
π CNO,CNAME(σTNAME =‘LIU’(C)) ,
(2) 检索年龄大于 岁的男学生的学号与姓名。 检索年龄大于23岁的男学生的学号与姓名 。 岁的男学生的学号与姓名
πsno,sname
[例 3.11]设有三个关系: 例 设有三个关系: 设有三个关系 学生关系: 学生关系 S(SNO,SNAME,AGE,SEX,SDEPT) ( , , , , ) 学习关系: 学习关系 SC(SNO,CNO,GRADE) ( , , ) 课程关系: 课程关系 C(CNO,CNAME,CDEPT,TNAME) ( , , , ) 试用关系代数表达式表示下列查询语句。 试用关系代数表达式表示下列查询语句。
(7)检索全部学生都选修的课程的课程号与 ) 课程名。 课程名。
πcno
(S))) )
,CNAME
(C
∞ ( πSNO,CNO(SC) , )
÷
π
SNO
(8)检索选修课程包含 )检索选修课程包含LIU老师所授 老师所授 课程的学生学号。 课程的学生学号。
π sno,CNO(SC)
÷πCNO(σTNAME =‘LIU’(C))
(σAGE>’23’ ∧ SEX=‘M’(s)) >
(3)检索学号为 学生所学课程的课程名与 )检索学号为S3学生所学课程的课程名与 任课老师名。 任课老师名。
πCNAME,TNAME(σSNO =‘S3’ ( sc∞c)) ,
( 4) 检索至少选修 ) 检索至少选修LIU老师所授课程中一门 老师所授课程中一门 课的女学生姓名。 课的女学生姓名。
πSNAME(σSEX=‘F’∧TNAME=‘LIU’ (s∞sc ∞c))
数据库第三章习题参考

5.求至少用了供应商S1所供应的全部零件的工程号JNO。 即查找:不存在这样的零件y,供应商S1供应了y,而工程x为选用y。 Select distinct jno From spj z Where not exists (select * from spj x where sno=‘S1’ and not exists (select * from spj y where y.pno=x.pno and y.jno=z.jno));
习题三 第5题
1. 找出所有供应商的姓名及其所在城市。 Select sname, city from s; 2. 找出所有零件的名称、颜色、重量。 Select pname, color, weight from p; 3.找出使用供应商S1所供应零件的工程项目代码。 Select jno from spj where sno=‘S1’;
7. 找出没有使用天津产的零件的工程项目代码。 Select jno from j where not exists (Select * from spj where spj.jno=j.jno and sno in (Select sno from s where city=‘天津’) );
3.求供应工程J1零件为红色的供应商号码。 Select sno from spj, p Where spj.pno=p.pno and jno=‘J1’ and color=‘红’; 或: Select sno from spj Where jno =‘J1’ and pno in (Select pno from p Biblioteka where color=‘红’ );
6. 找出使用上海产的零件的工程项目名。 Select jname from j,spj,s where j.jno=spj.jno and spj.sno=s.sno and s.city=‘上海’; 或: Select jname from j where jno in (Select jno from spj, s where spj.sno=s.sno and s.city=‘上海’);
数据库第3章习题参考答案

第3章习题解答1.选择题(1)表设计器的“允许空”单元格用于设置该字段是否可输入空值,实际上就是创建该字段的(D)约束。
A.主键B.外键C.NULL D.CHECK(2)下列关于表的叙述正确的是(C)。
A.只要用户表没有人使用,则可将其删除B.用户表可以隐藏C.系统表可以隐藏D.系统表可以删除(3)下列关于主关键字叙述正确的是( A )。
A.一个表可以没有主关键字B.只能将一个字段定义为主关键字C.如果一个表只有一个记录,则主关键字字段可以为空值D.都正确(4)下列关于关联叙述正确的是( C )。
A.可在两个表的不同数据类型的字段间创建关联B.可在两个表的不同数据类型的同名字段间创建关联C.可在两个表的相同数据类型的不同名称的字段间创建关联D.在创建关联时选择了级联更新相关的字段,则外键表中的字段值变化时,可自动修改主键表中的关联字段(5)CREATE TABLE语句(C )。
A.必须在数据表名称中指定表所属的数据库B.必须指明数据表的所有者C.指定的所有者和表名称组合起来在数据库中必须唯一D.省略数据表名称时,则自动创建一个本地临时表(6)删除表的语句是(A)。
A.Drop B.Alter C.Update D.Delete (7)数据完整性不包括(B )。
A.实体完整性B.列完整性C.域完整性D.用户自定义完整(8)下面关于Insert语句的说法正确的是(A )。
A.Insert一次只能插入一行的元组B.Insert只能插入不能修改C.Insert可以指定要插入到哪行D.Insert可以加Where条件(9)表数据的删除语句是( A )。
A.Delete B.Inser C.Update D.Alter (10)SQL数据定义语言中,表示外键约束的关键字是(B )。
A.Check B.Foreign Key C.Primary Key D.Unique2.填空题(1)数据通常存储在表中,表存储在数据库文件中,任何有相应权限的用户都可以对之进行操作。
数据库第3章习题

(一)选择题1.关系数据库管理系统应能实现的专门关系运算包括____。
A.排序、索引、统计B.选择、投影、连接C.关联、更新、排序D.显示、打印、制表2.在一个关系中如果有这样一个属性或属性组存在,它的值能唯一地标识关系中的每一个元组,称这个属性或属性组为____。
A.关键字B.数据项C.主属性D.主属性值3.同一个关系模型的任两个元组值____。
A.不能全同B.可全同C.必须全同D.以上都不是4.一个关系数据库文件中的各条记录____。
A.前后顺序不能任意颠倒,一定要按照输入的顺序排列B.前后顺序可以任意颠倒,不影响库中的数据关系C.前后顺序可以任意颠倒,但排列顺序不同,统计处理的结果就可能不同D.前后顺序不能任意颠倒,一定要按照关键字段值的顺序排列5.在关系代数的传统集合运算中,假定有关系R和S,运算结果为W。
如果W中的元组属于R,或者属于S,则W为____运算的结果。
如果W中的元组属于R而不属于S,则为____运算的结果。
如果W中的元组既属于R又属于S,则W为____运算的结果。
A.笛卡尔积B.并C.差D.交6.在关系代数的专门关系运算中,从表中取出满足条件的属性的操作称为____;从表中选取满足某种条件的元组的操作称为____;将两个关系中具有共同属性值的元组连接到一起构成新表的操作称为____。
A.选择B.投影C.连接D.扫描7.自然连接是构成新关系的有效方法。
一般情况下,当对关系R和S使用自然连接时,要求R和S含有一个或多个共有的____。
A.元组B.行C.记录D.属性8.等值连接与自然连接是____。
A.相同的B.不同的9.如图所示的关系R,经操作ΠA,B(σB=b(R))(Π为“投影”运算符,σ“选择”运算符)的运算结果是____。
D10.设有属性A,B,C,D,以下表示中不是关系的是____。
A.R(A)B.R(A,B,C,D)C.R(A×B×C×D)D.R(A,B)11.关系运算中花费时间可能最长的运算是____。
数据库 第三章习题参考答案

三、设计题1.(1)SELECT BAuth FROM Book, PublishWHERE Book.PNo= Publish.PNo AND BName=’操作系统’ AND PName=’高等教育出版社’(2)查找为作者“张欣”出版全部“小说”类图书的出版社的电话。
SELECT PTel FROM Book, PublishWHERE Book.PNo= Publish.PNo AND BType =’小说’ AND BAuth=’张欣’(3)查询“电子工业出版社”出版的“计算机”类图书的价格,同时输出出版社名称及图书类别。
SELECT BPrice, PName, BType FROM Book, PublishWHERE Book.PNo= Publish.PNo AND PName =’电子工业出版社’ AND BType =’计算机’(4)查找比“人民邮电出版社”出版的“高等数学”价格低的同名书的有关信息。
SELECT * FROM BookWHERE BName =’高等数学’AND BPrice<ANY(SELECT BPrice FROM Book,PublishWHERE Book.PNo= Publish.PNo AND PName =’人民邮电出版社’ AND BName =’高等数学’)AND PName <>’人民邮电出版社’(5)查找书名中有“计算机”一词的图书的书名及作者。
SELECT BName, BAuth FROM BookWHERE BName LIKE’%计算机%’(6)在“图书”表中增加“出版时间”(BDate)项,其数据类型为日期型。
ALTER TABLE BookADD BDate datetime(7)在“图书”表中以“作者”建立一个索引。
CREATE INDEX Name ON Book(BAuth) desc2.(1)建立存书表和销售表。
数据库第3章 SQL Server Management Studio 操纵数据库和表

3.2.2 数据库表的创建 使用企业管理器创建表 利用企业管理器提供的图形界面来创建表,步骤如 下: (1)在树形目录中展开【数据库】→【MyDb】。 (2)选择【表】,单击鼠标右键,在弹出的快捷菜单 中选择【新建表...】命令,打开设计表对话框。
(3)如图所示,设计表对话框的上半部分有一个表 格,在这个表格中输入列的列名、数据类型、长度 (有的数据类型不需要指定长度,如datetime类型 的长度为固定值8)、是否可以为空,在允许空域 中单击鼠标左键,可以切换是否允许为空值的状态, 打勾说明允许为空值,空白说明不允许为空值,默 认状态是允许为空值的。 (4) 图所示的设计表对话框的下半部分是特定列的 详细属性,包括是否是标识列、是否使用默认值等。
数据库文件组 为了方便管理、提高系统性能,将多个数据库文 件组织成一组,即称为数据库文件组。数据库文件组 控制各个文件的存放位置,常常将每个文件建立在不 同的硬盘驱动器上。这样可以减轻单个硬盘驱动器的 存储负载,提高数据库的存储效率,从而实现提高系 统性能的目的。 在使用数据库文件和文件组时,应该注意以下几点: 1)每个文件或文件组只能用于一个数据库。 2)每个文件只能属于一个文件组。 3)日志文件是独立的。数据库的数据和日志信息不 能放在同一个文件或文件组中,数据文件和日志文件 总是分开的。
使用Transact—SQL命令修改数据库 ALTER DATABASE <数据库名> {ADD FILE <文件格式>[,…n] [TO FILEGROUP <文 件组名>] |ADD LOG FILE <文件格式>[,…n] |REMOVE FILE <逻辑文件名> |ADD FILEGROUP <文件组名> |REMOVE FILEGROUP <文件组名> |MODIFY FILE <文件格式> |MODIFY FILEGROUP <文件组名> <文件组属性> }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宋林锐2011060090019 例3-1 数据库的创建本地生成Sql server2008对象资源管理器上出现HIS数据库:3-2 数据库的修改本地磁盘上保存的文件HIS_DATA2被删除,修改HIS_DATA1的大小为12M,增加了HIS_DATA3:例3-3 数据库的删除例3-4数据表的操作,表的建立通过sql server2008可视化查看表Medicine中各个数据对象的类型:例3-5数据表的操作,表的建立通过sql server2008可视化查看表Medicine及表RecipeMaster中各个数据对象的类型:例3-6数据表的操作,表的建立通过sql server2008可视化查看表Patient中各个数据对象的类型:例3-7数据表的操作,表的建立通过sql server2008可视化查看表RecipeDetail及表Doctor中各个数据对象的类型:例3-8数据表的操作,表的修改(增加一列)例3-9数据表的操作,表的修改(删除一列)通过sql server2008可视化查看表Patient中删除一列后的特征,下图中没有了列Pino:例3-10数据表的操作,表的删除由上图结果可知删除表RecipeMaster出现错误,原因是因为该表中的药品编号(Mno)是一个外键,其含约束的从表是RecipeDetail,所以因先删除表RecipeDetail,再删除表RecipeMaster:Drop Table RecipeDetail;Drop Table RecipeMaster;例3-11表中数据操作,SQL语言基本查询(无条件查询)查询医生基本信息表中所有医生的信息:select *from Doctor查询结果如下:例3-12表中数据操作,SQL语言基本查询(无条件查询)查询医生基本信息表中所有医生的姓名和专业职称:select Dname医生姓名,Dlevel专业职称from Doctor查询结果如下:例3-13表中数据操作,SQL语言基本查询(无条件查询)在医生基本信息表中,查询有医生的部门编号,要求不重复显示:select distinct Ddeptno from Doctor查询结果如下:例3-14表中数据操作,SQL语言基本查询(条件查询)查询医生基本信息表中所有男医生的基本信息:select *from Doctor where Dsex='男'查询结果如下:例3-15表中数据操作,SQL语言基本查询(条件查询)在医生基本信息表中查询职称为副的医生信息:select *from Doctor where Dlevel like '副%'查询结果如下:例3-16表中数据操作,SQL语言基本查询(条件查询)在医生基本信息表中查询查询年龄小于或等于40岁的男医生信息:select *from Doctor where Dsex='男'and Dage<=40查询结果如下:例3-17表中数据操作,SQL语言基本查询(条件查询)在医生基本信息表中,查询部门编号为102,103和201的医生信息:select *from Doctor where Ddeptno in('102','103','201')查询结果如下:例3-18表中数据操作,SQL语言基本查询(ORDER BY字句查询)在医生基本信息表中,按照年龄升序查询男医生信息:select *from Doctor where Dsex='男' order by Dage ASC查询结果如下:例3-19表中数据操作,SQL语言基本查询(ORDER BY字句查询)在医生基本信息表中,按部门编号升序及年龄降序查询医生信息:select *from Doctor order by DdeptnoASC,Dage DESC查询结果如下:例3-20表中数据操作,SQL语言基本查询(带表达式的查询)在药品信息表中,查询药品单价提高15%后超过30元的药品信息:select Mno编号,Mname药品名,Mprice单价,Mprice*1.15 调整价格,Munit单位,Mtype类型from Medicine where Mprice*1.15>=30查询结果如下:例3-21表中数据操作,SQL语言基本查询(带聚集函数的查询)在医生基本信息表中,按部门编号统计不同部门的医生人数:select Ddeptno部门编号,count(Dno) 人数from Doctor group by Ddeptno查询结果如下:例3-22表中数据操作,SQL语言基本查询(带聚集函数的查询)在医生基本信息表中,按部门统计男医生的平均年龄不超过40岁的部门编号,并按平均年龄升序显示:select Ddeptno部门编号,AVG(Dage) 平均年龄from Doctorwhere Dsex='男' group by Ddeptno having AVG(Dage)<=40order by AVG(Dage)查询结果如下:例3-23表中数据操作,多表间的连接查询(内连接)查询患者的每个处方用药信息:selectRecipeDetail.*,Medicine.* from RecipeDetail,MedicinewhereRecipeDetail.Mno=Medicine.Mno查询结果如下:例3-24表中数据操作,多表间的连接查询(内连接)查询开出处方的医生信息:selectRno,Pno,D.Dno,Dname,Dsex,Dage,Ddeptno,DlevelfromRecipeMasterR,Doctor DwhereR.Dno=D.Dno查询结果如下:例3-25表中数据操作,多表间的连接查询(内连接)查询医院的各部门名称及其上级部门名称:select First.DeptName部门名称,Second.DeptName上级部门fromDeptFirst,Dept SecondwhereFirst.ParentDdeptNo=Second.DdeptNo查询结果如下:例3-26表中数据操作,多表间的连接查询(外连接)查询医院的各部门名称和该部门医生姓名:select DeptName部门名称,Dname医生姓名from Dept left outer join DoctoronDept.DdeptNo=Doctor.Ddeptno查询结果如下:例3-27(为ORACLE数据库上实现,故此处没实现)例3-28表中数据操作,嵌套查询(不相关子查询)查询与医生刘伟有诊断关系的患者:SELECT Pname FROM PatientWHERE Pno IN (SELECT Pno FROM RecipeMasterWHERE Dno = (SELECT Dno FROM DoctorWHERE Dname='刘伟'))查询结果如下:例3-29表中数据操作,嵌套查询(不相关子查询)查询所开处方不包含药品“胃立康片”的医生:SELECT Dname FROM DoctorWHERE Dno IN ( SELECTDno FROM RecipeMasterWHERE Rno IN ( SELECTRno FROM RecipeDetailWHERE Mno NOT IN ( SELECTMno FROM MedicineWHERE Mname='胃立康片')))查询结果如下:例3-30表中数据操作,嵌套查询(不相关子查询)查询比任何女医生年龄都大的男医生姓名和年龄:SELECT Dname姓名,Dage年龄FROM DoctorWHERE Dsex='男' AND Dage>ANY(SELECT Dage FROM DoctorWHERE Dsex='女')查询结果如下:等价于:SELECT Dname姓名,Dage年龄FROM DoctorWHERE Dsex='男' AND Dage> (SELECT MIN(Dage) FROM DoctorWHERE Dsex='女')查询结果如下:例3-31表中数据操作,嵌套查询(不相关子查询)查询小于任何男医生年龄的女医生姓名和年龄:SELECT Dname姓名,Dage年龄FROM DoctorWHERE Dsex='女' AND Dage<ALL(SELECT Dage FROM DoctorWHERE Dsex='男')查询结果如下:等价于:SELECT Dname姓名,Dage年龄FROM DoctorWHERE Dsex='女' AND Dage< (SELECT MIN(Dage) FROM DoctorWHERE Dsex='男')查询结果如下:例3-32表中数据操作,嵌套查询(相关子查询)在医院数据库中,查询部门编码为101,103和201等部门的医生姓名和年龄:SELECT Dname姓名,Dage年龄FROM DoctorWHERE Ddeptno IN (101,103,201)查询结果如下:例3-33表中数据操作,嵌套查询(相关子查询)查询给姓名为“刘景”的患者开过处方的医生:SELECT Dno医生编号,Dname姓名,Dsex性别,Dage年龄,Dlevel职称FROM Doctor WHERE EXISTS ( SELECT * FROM RecipeMasterWHERE RecipeMaster.Dno=Doctor.DnoAND EXISTS(SELECT * FROM PatientWHERE Patient.Pname='刘景' AND Patient.Pno=RecipeMaster.Pno )) 查询结果如下:当采用不相关子查询实现时,等价于:SELECT Dno医生编号,Dname姓名,Dsex性别,Dage年龄,Dlevel职称FROM Doctor WHERE Doctor.DnoIN(SELECT Dno FROM RecipeMasterWHERE RecipeMaster.PnoIN(SELECT Pno FROM PatientWHERE Patient.Pname='刘景'))查询结果如下:例3-34表中数据操作,联合查询在医院数据库中,为了提高系统处理效率,需要定期对患者的诊断信息归档,假定患者诊断归档信息表为Diagnosis,如果医生要查询患者“刘景”的近期和历史诊断信息,以便分析患者的病因。