《软件开发技术--数据库 - 复习》由会员分享,可在线阅读,更多相关《软件开发技术--数据库 - 复习(57页珍藏版)》请在金锄头文库上搜索。
1、数据库 第三章 数据库设计过程 E R图到关系模式的转换 关系模式的规范化 需求分析 概念模式设计 逻辑模式设计 数据库实施 E R图UML RDBMS模式 存储模式 数据库运行和维护 概念模式设计 ER图 实体联系模型 Entity RelationshipModel 简称E R模型 E R模型的基本概念 实体 entity 客观存在 可以相互区别的事物称为实体 实体集 entityset 性质相同的同类实体的集合 称实体集 属性 attribute 实体有很多特性 每一个特性称为属性 每一个属性有一个值域 其类型可以是整数型 实数型 字符串型等 实体标识符 identifier 能惟一标识
2、实体的属性或属性集 称为实体标识符 有时也称为关键码 key 或简称为键 联系 relationship 是实体之间的相互关系 数据模型 能表示实体类型及实体间联系的模型称为 数据模型 E R图的基本组成部分 E R图有四个主要部分 1 实体集 用矩形表示 2 属性 用椭圆形表示 3 联系 用菱形表示 4 直线 表示联系的类型及实体与实体之间的联系 数据联系 联系 relationship 是实体之间的相互关系 二元联系有以下三种类型 一对一联系 实体集E1中每个实体至多和实体集E2中的一个实体有联系 反之亦然 那么实体集E1和E2的联系称为 一对一联系 记为 1 1 一对多联系 实体集E1中
3、每个实体可以与实体集E2中任意个 零个或多个 实体间有联系 而E2中每个实体至多和E1中一个实体有联系 那么称E1对E2的联系是 一对多联系 记为 1 N 多对多联系 如果实体集E1中每个实体可以与实体集E2中任意个 零个或多个 实体有联系 反之亦然 那么称E1和E2的联系是 多对多联系 记为 M N 三种联系的E R图 三种联系的E R图 E R图实例 例 设计一个学生选课数据库 要求包括学生 student 课程 course 和教师 teacher 的信息 实体中存在如下联系 一个学生可以选修多门课 而每门课也能由多个学生选修 一位教师可以教多门课 每门课也可以由多个教师讲授 用E R图
4、来描述此数据库 学生信息 学号 sNo 学生姓名 sName 年龄 age 地址 sAddress 课程信息 课程号 cNo 课程名 cName 课程学分 credit 教师信息 工号 tNo 姓名 tName 教师的地址 tAddress 学生 课程 教师E R图 注意 如果一个联系具有属性 则这些属性也与该联系连接起来 TeachCourseNo 概念模式设计 UML 从用例图分析出对象 概念模式设计 UML 对象之间的关系 工作 概念模式设计 UML 对象之间的关系分类 一元关系 概念模式设计 UML 对象之间的关系分类 工作 二元关系 概念模式设计 UML 关系的重数 1 n 1 重数
5、1 n 重数1 概念模式设计 UML 关联 2个对象关联产生属性 关系模型的结构 数据模型三要素之一 一个关系的逻辑结构是一张二维表 它由行和列组成 关系 关系名 元组 表中的一行即为一个元组或记录 字段 表中的一列 列值称为字段值 列名称为字段名值域 字段值的取值范围 主键 能唯一标识一个元组的属性集合 外键 若属性组F不是关系R1的主键 但它是关系R2的主键 则F称是关系R1的外键 关系的完整性 域完整性实体完整性参照完整性 1 第一范式 FirstNormalForm 1NF 定义 如果一个关系模式R的所有属性都是不可分的基本数据项 则关系R属于第一范式 p 2 第二范式 SecondN
6、ormalForm 2NF 定义 若关系模式R属于第一范式 且每个非主属性都完全函数依赖于主键 则R属于第二范式 t 3 第三范式 定义 如果一个关系R是第二范式的 并且每个非主属性都不传递依赖于主键 则R属于第三范式 4 E R UML 模型到关系模式的转换 1 实体 对象 到关系模式的转换2 联系 关系 到关系模式的转换 1 实体到关系模式的转换 规则 将实体的名称作为关系的名称 将实体的属性作为关系的属性 并用下划线标识出主属性 student sNo sName sex age 表示student关系 其中sNo为主键 course cNo cName credits 表示course
7、关系 其中cNo为主键 2 联系到关系模式的转换1 1 若实体间联系是1 1 可以在两个实体转换成的两个关系模式后 然后在其中任意一个关系模式的属性集中加入另一个关系模式的主键和联系自身的属性 也就是说1 1联系不单独转换为一个独立的关系 2 联系到关系模式的转换1 N 若实体间联系是1 N 则在N端实体转换成的关系模式中加入1端实体的主键和联系的属性 同样1 N联系也不独立构成一个关系 工作 二元关系 2 联系到关系模式的转换M N 若实体间联系是M N 则将联系转换成一个关系模式 其属性为两端实体的主键加上联系自身的属性 而联系关系的主键为一复合键 通常是两端实体主键的组合 对于 学生选课
8、 E R图的课程和学生之间的多对多的联系 可转换成关系模式 take sNo cNo grade 主键为复合键 sNo cNo 例 关系数据库的组织 表1表2表3 DB ColumnorField Record SQL2000字段类型 CharvarcharintdateTime 字段的属性请与Insert 字段长度对于字符类型 例如char和varchar 定义字段的同时可以指定字段存放的字符的个数 例如定义姓名字段为namevarchar 20 表示该字段最多存放20个字符 数值型的字段 除了decimal由用户自己定义长度和小数位数外 其他的如int float等 系统自定义其占用的字节
9、数 小数位数用于decimal和货币类型的字段标识种子用于数据库表的记录号的自动增加 经常用于做表中记录的主键 用于整型数值 默认值当表中新增加一个记录时 又不想具体指定某个字段的值 可以给它一个默认的值 非空限制用于限制字段的值不能为空 例如学生的姓名字段 每一个记录都必须有值 因为学生不能没有名字 索引对字段进行索引 可以通过设定该字段为查询条件来加快数据的检索速度和统计 分组的速度 关键字关系模式中的主键 用于唯一标识数据库表中的记录 简单的SQL查询语句Select SELECT字段1 字段2 FROM表名WHERE条件表达式 结构化查询语言 SQL SQL语言是一种关系数据库语言 是
10、结构化查询语言 StructuredQueryLanguage 的缩写 它包括查询定义操纵控制SQL的使用方法有两种用户交互的方式联机使用 称为交互式SQL 另一种是作为子语言嵌入到其他程序设计语言中使用 称为嵌入式SQL SQL表达式 SQL的表达式可分为两类 值表达式逻辑表达式 值表达式包括几种 数值表达式 实现数值型数据的算术运算 字串值表达式完成了字串的操作 日期时间值表达式处理日期时间数据 逻辑运算包括与 AND 或 OR 否 NOT SQL还提供了比较谓词 范围谓词 IN LIKE IS 和存在谓词 EXIST 函数 SQL内置函数有三类 统计函数 COUNT SUM AVG MA
11、X和MIN字串处理函数len substring studentName 1 2 大小写转换函数 Upper Lower 时间日期处理函数 时间日期处理函数用于返回当前的日期与时间 常用的有三个 getDate 返回当前日期时间 Year Month Day函数 数据检索语句 select 语法格式为 SELECT ALL DISTINCT 目标列FROM基本表 或视图 as表别名 WHERE条件表达式 GROUPBY列名 HAVING条件表达式 ORDERBY列名 ASC DESC 说明 DISTINCT为去掉查询结果中重复的行 默认为ALL 既列出所有的记录 目标列的格式可以写为 列名1
12、as别名1 列名n as别名n 省略别名 返回的结果集中以列名标记 否则以别名标记 如果目标列用 表示 则返回表中的所有的列 From子句指明了从那些表或视图中得到数据 所有的列名都必须存在于From后的表中 或出现于leftjoin innerjoin fullouterjoin之后的表 如果列名存在于From后的多个表中 则必须标明该列来源于哪个表 格式为表名 列名 目标列可以是SQL中的库函数或常数表达式 如Sum Count Avg等函数 Select语句 Where子句有双重作用 一是返回需要的记录 另一种是建立多表之间的内连接联合查询 GROUPBY用来对查询结果进行分组 把某一列
13、值相同的记录分成一组 与统计函数如Sum Count等联合使用 在有Group子句时 可以进一步使用HAVING子句对分组后的记过进行过滤显示 是分组提取条件 ORDERBY是查询结果的排序方式 后面跟ASC为升序 DESC为降序 默认为升序 关系实例 学生表tblStudent课程表tblCourse学生修课表tblSelectCourse SQL例 例1 查看学生表中的全部数据 即列出所有的学生Select fromtblStudent这里 代表表中所有的列 上述的语句等价如下的语句 SelectstudentNo studentName birthday sexFromtblStuden
14、t这时 表中有多少条记录 数据库系统就列出多少条记录 Where子句子 例2 查询学生表tblStudent中的全部女生的学号 姓名和年龄SelectstudentNo studentName birthdayfromtblStudentwheresex 女 例3 查询学生修课表中成绩大于80分的学生 Select fromtblSelectCoursewherescore 80在where条件中 可以使用逻辑运算符和比较关系符 包括 也可以使用关键字 如 between like in等 注意 如果值是字符串或者字符 日期类型的 就要用单引号把它括起来 例如例2中的where条件 例4查询操
15、作系统成绩在70到80之间的学生的学号selectstudentNofromtblSelectCoursewherescorebetween70and80andcourseNo J003 日期型数据处理 罗列出每个同学的年龄现在有了生日 当前日期可以用getDate 函数获得 日期型字段的年份可以用Year函数获得Selectyear getDate year birthday FromtblStudent orderby子句 例5 查询02级学生的选课信息 按学号从小到大排列 由于学号的头两位代表学生的年级 所以可以这么完成SQL语句的编写 SelectstudentNo courseNof
16、romtblSelectCoursewherestudentNolike 02 orderbystudentNo这里 代表任意个字符 groupby和Having子句 例6 求每个学生的课程总分 大于260分的同学罗列 Selectsc studentNo studentName sum score astotfromtblSelectCoursesc tblStudentswheres studentNo sc studentNogroupbysc studentNo studentNamehavingsum score 260改为havingtot 260对不对 例7 列出选修课程大于等于三门课程的学生 并按学号排序selects studentName sc studentNo count ascoursesfromtblStudents tblSelectCoursescwheresc studentNo s studentNogroupbysc studentNo s studentNamehavingcount 3orderbysc studentNo 内连接查询 例8查找