第一部分第1讲要点关系数据库应用举例及主要概念1Word文档下载推荐.docx
《第一部分第1讲要点关系数据库应用举例及主要概念1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第一部分第1讲要点关系数据库应用举例及主要概念1Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
![第一部分第1讲要点关系数据库应用举例及主要概念1Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/2/f1652f80-f2e6-45c9-ab6b-e76a460ecf22/f1652f80-f2e6-45c9-ab6b-e76a460ecf221.gif)
删除:
右击要删除的数据库,在弹出的快捷菜单中点击删除。
(2)使用命令(SQL命令)建立数据库
新建查询,输入命令并保存为文件【或打开已经保存的命令文件】,执行建立或删除数据库
建立数据库命令:
CREATEDATABASEjsj
ON(NAME='
jsj_Data'
--数据库文件名称
FILENAME='
\SQLServer2008_db\jsj_Data.MDF'
SIZE=3,--数据库大小,至少M
FILEGROWTH=10%)
LOGON(NAME='
jsj_Log'
--数据库日志文件名称
FILENAME='
\SQLServer2008_db\jsj_Log.LDF'
SIZE=3,--2008至少M
COLLATEChinese_PRC_CI_AS--指定数据库的默认排序规则
删除数据库命令:
Usemaster
DROPDATABASEjsj
3)在数据库中建立(定义)表SQL命令
SQL建表命令为:
usejsj--选择数据库
createtables
(
snochar(8)primarykey,
snamechar(20)null,
ssexchar
(2),
sageint,
sdeptchar(20)
)
说明:
primarykey主码约束(非空唯一)
null空约束,notnull非空约束
4)对表进行增、删、改、查询操作SQL命令
*见命令文件
*增加(插入)记录
insertintosvalues('
1001'
'
n1'
f'
20,'
信电系'
1002'
n2'
21,'
1003'
n3'
1004'
n4'
m'
1005'
n5'
*查询(例如:
查找女同学信息)
usejsj
select*fromswheressex='
*删除表中的记录
deletefroms
*修改记录
usetest
updatessetssex='
wheresno='
*修改、删除、查询可以加入条件(问题:
删除女同学记录?
5)关于完整性约束条件的实现
*在建表语句中定义完整性约束条件,DBMS自动维护完整性约束条件。
*主键约束【即非空唯一】定义【任何表需要】:
primarykey【可定义在行级,也可以定义在列级】
(列级级约束与行级约束)(P152实体完整性)。
*用户自定义完整性定义(P156):
**检查约束:
check(sage>
=15andsage<
=36);
**空否:
notnull;
**唯一否:
notunique;
**缺省:
default
*数据结构与完整性约束定义举例。
命令文件为:
操作【2】test中创建表s【加完整性】
snochar(8),--primarykey,
snamechar(20)unique,
sageintcheck(sage>
=36),
sdeptchar(20)notnull,
constraintPK_Sprimarykey(sno)–显式定义约束名
)
(重要考点:
不显式定义约束名,是否意味系统没有约束名?
)
*对数据库操作进行操作时完整性约束条件维护
6)建表语句产生的结果(P85)(重要考点!
*建表语句产生的结果:
建立空表,将表定义以及完整性约束条件存放到数据字典(系统表)中。
*学生表中的主键约束,既可以定义在列级(列级约束)也可以定义在表级(称表级约束)
*学生选课表中的主键约束是否可以定义在列级?
(不可以)
7)P30术语对比(非规范关系即表中套表)(P45关系模型要求关系必须是规范化的即满足一定的规范条件,这些规范条件中最基本的一条是关系的每一个分量必须是一个不可分割的数据项,即分量必须取原子值)(例子学生表中的属性“入校毕业年份”)(重要考点!
例一要点总结:
关系【表】,关系模式【表结构或表头】,属性,主码,数据模型的三要素,完整行约束条件【实体、参照(后述)、用户自定义】,SQL命令的使用【建立(删除)数据库、建立(删除)表(包括完整性约束条件定义)、对表的增加、删除、修改、查询操作】。
再次理解图1.2图1.7。
上机作业(实验一):
安装DBMS,建立数据库、建立表、表中记录的增删改查询、命令文件的保存以及打开。
第二、三、四讲【20110317/第四周(2节课*2),第五周(3节课)/教室C1-206】
例二基于关系数据库的学生选课信息管理
1、需求分析(P205):
信息(数据)要求、处理要求、安全性与完整性要求
2、需求描述(数据流图、数据字典)
3、关系模型数据结构即一组表(不同方案优劣比较)
*需要描述的信息有:
学生、课程、选课
*描述成几张表【讨论】?
讨论以下两个方案哪个好?
方案一:
三个关系模式
学生(学号,姓名,性别,年龄,系,)
课程表(课程号,课程名,先修课,学分)
选课(学号,课程号,成绩)
方案二:
一个关系模式
学生选课(学号,姓名,性别,年龄,系,课程号,课程名,先修课,学分,成绩)
不同方案优劣比较基于以下四个方面考虑:
**数据冗余度:
方案二学生信息【一学生学修多门课程】、课程信息【一门课程被多个学生选修】
**更新异常:
修改冗余信息时会面临数据不一致性问题
**插入异常:
方案二学生未选修课程时不能将学生信息存入表中,课程未被学生选时课程信息不能存入表中。
即需要保存的信息保存不了。
**删除异常:
方案2中,如果学生删除全部选课信息时,学生自己的信息也被删除;
同样如果某课程的选课信息被全部删除,此课程的信息也被删除。
即不该删除的信息被删除。
4、规范的数据库设计过程【设计E-R图,将E-R图转变为关系模式】
1)设计E-R图【概念模型】P14(必考点!
*现实世界有两类信息:
实体型,实体型之间的联系
实体型指用实体名及其属性来抽象和刻画同类实体
*学生选课的E-R图【P224三个要素:
实体型,实体属性,实体型间的联系、联系属性、联系类型(三类)】
mn
补充1:
1及1:
n联系
*信息世界涉及的概念主要有P14【实体、属性、码、域、实体型、实体集、联系】
2)将E-R图向关系模型的转换【转换结果同方案1】
(必考点!
*(P224)E-R图向关系模型的转换要解决的问题是如何将实体型和实体间的联系转换为关系模式,如何确定这些关系模式的属性和码。
*将实体型、实体的属性和实体间的联系转换为关系模式的主转换原则(P225):
一个实体型转换为一个关系模式;
联系转换(1:
1,1:
n,m:
n)?
*根据转换规则(P224-225)将学生选课E-R图转换为一组关系模式的结果:
正好是方案一(规范设计过程得到的规范结果)
*方案二不是规范设计过程得到的规范结果
问题:
如何对方案二进行规范化?
使用目前已经学的知识进行规范化。
以后将介绍别的规范化知识:
关系数据库设计理论(规范设计过程)
*问题:
分析去年规范化考题。
考题要求使用规范化理论进行规范化,现在还没有学规范化理论,该如何规范化?
(规范设计过程)
3)学生选课E-R图中增加班级实体型及学生与班级联系(1:
n)
*E-R图(实体型个数,实体的联系个数)(班级的属性有班号、班名、人数)
*与ER图相对应的一组关系模式
学生(学号,姓名,性别,年龄,系,班号)
课程表(课程号,课程名,先修课,学分)
选课(学号,课程号,成绩)
班级(班号,班名,人数)
(关系模式既描述了实体型,也描述了实体间的联系)(问题:
只描述了实体型的关系模式?
只描述了实体间联系的关系模式?
既描述了实体型又描述了实体间联系的关系模式?
学生(学号,姓名,性别,年龄,系,班号)--实体及联系
课程表(课程号,课程名,先修课,学分)--实体
选课(学号,课程号,成绩)--联系
班级(班号,班名,人数)--实体
人数是否一定需要描述?
(是否是冗余数据?
即此数据是否可以从其它数据中导出?
)(重要考点!
教材中的P222图7.28ER消除冗余中冗余数据的理解?
教材P19图1.14工厂物资管理ER图(c)完整的实体-联系图中如果零件实体型中加上数量属性你认为是否有必要?
(课后结合P222内容辩证考虑)(重点!
*课堂练习:
去年考题数据库设计(设计ER图,设计关系模式)(应特别注意ER图中的冗余属性!
5、外码及参照完整性(P50、51)
*外码概念的引出:
描述联系的属性,非主码
找出4-3)中各关系模式的外码。
班号是外码,学号是外码的说法是否正确?
*参照完整性(对外码取值的约束)
【外码或者取空值,或者取以此外码作为主码表的某个元组的主码值】【P51】
a)选课(学号,课程号,成绩)关系模式中外码是否可以取空值?
b)外码取空值的含义?
6、建立学生选课项目数据库、表、往表中插入数据(元组)
1)建立数据库(几个项目可以使用一个数据库,或一个项目一个数据库)
*考虑目录,数据库文件(数据文件、日志文件、文件大小、是否自动增长等)(如数据库已存在先删除,可基于图形化界面的菜单,先关闭所有查询窗口)
--删除并建立数据库jsj
IFEXISTS(SELECTnameFROMmaster.dbo.sysdatabasesWHEREname='
jsj'
DROPDATABASEjsj
GO
2)在数据库中建立表(表及完整性约束条件定义,约束显式命名,表级及列级约束)
/*Table:
course*/
createtablec(
cnochar(8)constraintPK_Cprimarykey,--列级显式定义约束名
cnamechar(20),
cpnochar(8)constraintfk_c_cpnoreferencesc(cno),--列级显式定义约束名
ccreditint
student*/
createtables(
snochar(8)primarykey,--未给出约束名,DBMS自动命名
snamechar(10)null,
sc*/
createtablesc(
snochar(8),
cnochar(8),
gradeintegernull,
primarykey(sno,cno),--问题:
是否可以定义在列级?
foreignkey(sno)referencess(sno),
foreignkey(cno)referencesc(cno)--问题:
3)往表中插入元组
usejsj;
deletefroms;
deletefromc;
deletefromsc;
insertintosvalues(97001,'
aa'
22,'
);
insertintosvalues(97002,'
bb'
insertintosvalues(97003,'
cc'
insertintosvalues(97004,'
dd'
insertintosvalues(97005,'
ee'
insertintosvalues(97101,'
ff'
18,'
化工系'
insertintocvalues('
1'
计算机语言_pascal'
null,null);
2'
操作系统_dos'
null,1);
3'
数据库原理'
2);
4'
编译原理'
insertintoscvalues(97001,1,90);
insertintoscvalues(97002,2,89);
insertintoscvalues(97002,3,89);
insertintoscvalues(97003,3,95);
insertintoscvalues(97003,1,null);
7、对学生选课数据库操作(增加、删除、修改、查询)
1)增加、修改参照表(如SC表)操作必须满足(不能违背)完整性约束条件(即SC表中元组的外码sno值必须取S表中元组的主码分量值,cno值必须取C表中元组的主码分量值)
*P155表5.1第1、2行
S表:
SC表:
--增加SC表记录(外码取值约束)
insertintoscvalues(98001,1,null);
--出错原因?
sno未取S表中元组的主码分量值?
--修改SC表记录(外码取值约束)
updatescsetsno='
98001'
97001'
问题:
sno改为'
97101'
是否可以?
2)删除被参照表(也称主表,如S或C)元组或修改被参照表元组的主码值,参照表(也称子表如SC)元组操作与参照完整性约束条件
--删除s表中未被引用记录(如97004)
deletefromswheresno='
97004'
--未被引用
--删除s表中已被引用记录(如97001)
–已被引用,无法删除
--修改S表中未被引用记录(允许,为什么?
updatessetsno='
98004'
--修改S表中已被引用记录(不允许,为什么?
98002'
97002'
*P155表5.1第3、4行
--droptablec;
createtablec
cnochar(8)constraintPK_Cprimarykey,--列级约束,显式定义约束名
cnamechar(20),
cpnochar(8)constraintfk_c_cpnoreferencesc(cno)ondeleteNOACTION,
--droptables;
createtables
(
snochar(8),--primarykey,
snamechar(20)unique,
sdeptchar(20),
constraintPK_Sprimarykey(sno),--表级约束显式定义约束名
constraintcheck_scheck(ssexin('
)andsage<
36)--元组级命名check约束
--或者
--check(ssexin('
36)--元组级非显式命名check约束【自动命名】
);
--注:
主键与唯一约束自动建立索引
--droptablesc;
createtablesc
snochar(8)referencess(sno)ondeletecascadeonupdatecascade,
--cascade表示当删除或修改主表中被引用列的数据时,级联删或修改子表中相应的数据行
--或者setnull表示当删除主表中被引用列的数据时,将子表中相应引用列的值设置为null
--或者noaction表示当删除主表中被引用列的数据时,如果子表中引用的列包含该值,则禁止操作执行【默认】
cnochar(8),--referencesc(cno)ondeletecascade,
primarykey(sno,cno),
constraintfk_sc_cnoforeignkey(cno)referencesc(cno)--列级显示命名约束定义
注:
先执行【4讲】删除并建立数据库jsj建表插入元组【级联】
--修改S表中已被引用记录(允许,且SC表中的相应值同时被修改即级联修改)
--改到原值
--删除s表中已被引用记录(如)
--已被引用,级联删除sc中相关记录
sc表在定义外码时是否可以使用setnull?
8、关系(表)数据结构及形式化定义(是笛卡尔乘积的子集)P42-43
*笛卡尔积举例及定义(P42)(一组域,一组域上的笛卡尔积)
(基数:
关系模式的所有元组数)
*关系定义(P43):
一组域上的笛卡尔积的子集称这组域上的关系
*候选码、主码、主属性、非码属性、全码(P44)
*有三种类型的关系(P44):
基本关系(也称基本表或基表)、查询表、视图表
**基本表是实际存在的表,它是实际存储数据的逻辑表示。
**查询表是查询结果对应的表(给出其关系代数的表达形式)
selectsno,snamefromswheressex='
**视图是由基本表或其它视图表导出的表,是虚表,不对应实际存储的数据(后讲述)
第五、六讲(第六周,周四2节*2,周五2节*2)
*基本关系具有六条性质(见P45):
特别重要的是第六条性质(1NF即第一范式)(P29、P45、P174)。
关系模型要求关系必须是规范化(normalization)的,即要求关系必须满足一定的规范条件。
这些规范条件中的最基本的一条就是第六条性质(P45)。
(问题:
不满足第一范式举例?
注意:
实际的关系数据库产品中,基本表并不完全具有6条性质。
例如:
有些数据库产品仍然区分属性和元组顺序;
有些允许表中存在完全相同的元组,除非用户定义了相应的约束条件。
如以下语句在SQLServer2008中能成功执行
--建表(未定义实体完整性即主键约束)
createtables5(
snochar(8),--未定义primarykey约束
snamechar(10),
ssexchar
(2),
sageint,
--往表中插入两个相同的元组
deletefroms5;
insertintos5values(97001,'