查看: 1212|回复: 3

[讲义] 辽宁专升本 数据库系统原理 知识结构

[复制链接]

该用户从未签到

网站编辑

Rank: 8Rank: 8

UID
3
威望
0
贡献
8
在线时间
10 小时
注册时间
2013-9-25

立即登陆查看全部内容

您需要 登录 才可以下载或查看,没有帐号?立即注册   扫一扫,用微信登录

x
辽宁专升本《数据库系统原理》知识结构
1 基础概念
1.1数据库相关的4个基本概念
    数据
    数据库(有组织,可长久存放在计算机内,可共享)
    数据库管理系统(应用软件,举例:SQL SERVER系列软件)
    数据库系统(包括数据库,数据库管理系统等应用程序软件,应用系统,数据库管理员等构成)可结合P6的图1.1理解和记忆
   
1.2数据模型
    概念模型:主要用于数据库概念结构设计阶段,主要设计实体,实体结构的内容。
    逻辑模型:主要理解关系模型,主要设计实体间的关系,针对某个具体的DBMS,设计合理的关系。
   
1.3数据模型的三要素:
    数据结构
    数据操作
    完整性约束
   
1.4概念模型的基本概念
1.4.1 实体的构成
    实体,属性,域
   
1.4.2 实体的码
    主码:(1)能唯一标识某个实体的属性的集合(【注】可以为单个属性,也可以为多个属性的集合)
          例如:学生实体中,能唯一标识的属性是(学号),所以学生实体的主码是单个属性(学号)
               成绩实体中,能唯一标识的是属性的集合(学号,课程号),所以成绩实体的主码是一个集合(学号,课程号)
         (2)属于实体完整性的含义。
         (3)主码取值非空且唯一
    候选码:主码的集合
    外码:标识实体间的联系,属于参照完整性的含义。
   
1.4.3 实体的联系
    (1)联系的类型:1:1      1:n     m:n
    (2)联系的表现方式:实体关系图
    (3)图标
         矩形:实体
        椭圆:属性
        菱形:联系
        联系的类型:写在实体与联系连接的线上
    (4)【注】根据题目要求画出合理的实体关系图,同时写出如果建立相应的数据库系统,
               需要设计的具体的关系模式有哪些,同时给出每个关系模式的主码。
         练习1:学生选课的实体关系
              有学生成绩管理的一个数据库设计,包含2个实体集,分别是学生和课程。
              每个学生有属于自己的学号,姓名,年龄,性别和专业的特征;
              每门课程有课程号,课程名,课程的学分,课程的学时等特征;
              每个学生可以选择多门课程学习,没门课程可以被多个学生选择,同时产生了该学生该门课程的成绩。
              
         练习2:学生借阅的实体关系
              有学生借阅图书的一个数据库设计,包含2个实体集,分别是学生和图书。
              每个学生有属于自己的学号,姓名,年龄,性别和专业的特征;
              每本书有书的编号,书名,书的作者,出版社,ISBN号的特征;
              每个学生可以借阅多本图书,每本图书可以被多个同学借阅,同时产生了借阅时间,还书时间及是否超期的信息。
              
        练习3:工厂模型的实体关系
              参考P17的实体关系图。
        
1.5关系模型的知识
1.5.1 各种等价的概念
      关系==实体==表
      属性列==属性
      元组==记录
      
1.5.2 关系模式
      关系名(属性1,属性2,属性3,...)
      
1.6数据库系统结构
1.6.1 三级模式结构
     外模式:局部数据的逻辑结构和特征的描述,一个数据库可以有多个
     模式:  全体数据的逻辑结构和特征的描述,一个数据库只有一个
     内模式:全体数据的物理结构和特征的描述,一个数据库只有一个
     
1.6.2 二级映像
     外模式和模式的映像:可以有多个,每个外模式包括一个与模式的映像,保证数据与程序之间的逻辑独立性
     模式和内模式的映像:只有一个,保证数据与程序之间的物理独立性
     
2SQL语言的应用
2.1SQL语言的构成
    数据定义语言
    数据操纵语言
    数据控制语言【可参考P81的表3.1理解】
2.2数据库的创建和删除
2.2.1 数据库的结构
     (1)文件的类型
          数据文件:每个数据库至少一个数据文件, 默认是主数据文件
                   主数据文件(mdf)
                    辅助数据文件(ndf)
          日志文件:每个数据库至少一个日志文件(ldf)
         
     (2)文件组
          包括不同的数据文件,默认文件组是PRIMARY
         
2.2.2 SQL SERVER 2000中的系统数据库
      master:主数据库
     msdb:   有关警报等信息的管理数据库
     tempdb: 存储临时信息的数据库
     model:  用户模板数据库
      
2.2.3 使用SQL语言创建数据库
     (1)基本语句结构
      create database 数据库名
      Onprimary
      (数据文件的创建过程)
      logon
      (日志文件的创建过程)
      
      (2)文件的创建过程
      逻辑名        name='逻辑名'
      物理名        filename='物理存储位置+逻辑名'
      初始大小      size
      最大大小      maxsize
      文件增长方式  filegrowth=百分比/nMB
      
      (3)举例:创建一个名为test1的数据库,
          包括一个主数据文件test1_data,初始大小为10mb,按照10%的比例增长,最大大小为100MB
          一个日志文件test1_log,初始大小为5mb,按照5MB增长,最大大小为50MB。
          文件都存储在d:\data这个路径下。
         
          【参考答案】
         create database test1
         on primary
         (name=test1_data,
         filename='d:\data\test1_data.mdf',
         size=10,
         filegrowth=10%,
         maxsize=100)
         log on
         (name=test1_log,
         filename='d:\data\test1_log.ldf',
         size=5,
         filegrowth=5,
         maxsize=50)
         
2.2.4 删除数据库
   
      语法结构:drop database 数据库名
   
2.3常用数据类型
2.3.1 整型
      Bigint(8)    int(4)   smallInt(2)   tinyint(1)
      【注】tinyint只能取0--255这个范围之内的整数
2.3.2 字符型
      固定长度字符型  char(n)  n表示可以取的最大长度
      可变长度字符型   varchar(n)
      
2.3.3 数值类型
      decimal(p,s)等价于numeric(p,s)
      p表示整数和小数的位数之和,默认值18
      s表示小数的位数,默认值0
      
      可以表示为decimal,decimal(5),decimal(5,1)三种模式
      
2.3.4 时间日期类型
      datetime:长度为8个字节,表示“年,月,日,小时,分钟,秒,毫秒”
               在sqlserver 2000中的默认是在1900年1月1日零点
              操作系统时间的类型就是DATETIME型
              
     smalldatetime:长度为4个字节
      
2.4创建数据表
2.4.1 基本语法结构
      create table 表名
      (列名1  数据类型(长度) 空/非空,
        列名2  数据类型(长度) 空/非空,
       ...
      
      
2.4.2 举例,创建学生表
      create table student
      (sno char(8) not null,
       sname varchar(10) not null,
       ssex char(2),
       sage tinyint,  //对于系统固定长度的数据类型,在创建表时不能写长度
       sdept varchar(50)
      
      
2.4.3 约束
    (1)主码==主键(primary key)
         【创建1】在创建课程表的同时建立主键
               create table course
               (cno char(9) primary key,
               cname varchar(50) not null,
               ccredit decimal(3,1) not null,
               cpno char(9) )
        【创建2】在创建选课表的同时建立主键
               create table sc
               (sno char(8) not null,
               cno char(9) not null,
               grade decimal(4,1),
               primary key(sno,cno)   )
        【创建3】在修改学生表的同时建立主键
                alter table student
               add constraint pks primary key(sno)
               
     (2)外码==外键(foreign key)
          【创建1】建立学生表和选课表之间的联系,也就是建立选课表的外码
                 alter table sc
                add constraint fks_sc foreign key(sno) references student(sno)
         【创建2】在建立选课表的同时,建立课程表和选课表之间的联系
                 create table sc
               (sno char(8) not null,
               cno char(9) not null,
               grade decimal(4,1),
               primary key(sno,cno),
               foreign key(cno) references course(cno)
               )
               
      (3)唯一值(unique)
          【创建1】定义课程表中的课程名取值唯一。
                   alter table course
                  add constraint unq1unique(cname)
                  
      (4)检查(check)
          【创建1】定义学生的性别取值为男或者女
                  alter  table student
                  add constraint chk1check(ssex='男' or ssex='女')
          【创建2】定义学生的成绩取值范围0--100之间
                   alter table  student
                  add constraint chk2check(grade>=0 and grade<=100)
                  
2.5数据的录入
    基本语句:insert into 表名(列1,列2,...) values(值1,值2,...)
   
    (1)录入一个学生的信息(s01,张琳,女,20岁,电子信息专业)
      insert into student values('s01','张琳','女',20,'电子信息')
    (2)录入一个学生的信息(s02,李阳,男)
      insert into student(sno,sname,ssex) values('s02','李阳','男')
      
2.6数据的查询
2.6.1 基本查询语句
      select 目标列表达式
      from数据表
     where 选择条件
     group by 列1,列2,...
        having 选择条件
     order By 列1 asc,列2 desc
      
2.6.2 目标列表达式
      (1)全部的列     *
      (2)别名         列名 as 别名
      (3)去掉重复行   distinct 列名1,列名2
      (4)聚集函数    sum(),avg(),max(),min()  主要针对某单个列进行统计运算
                        count()  主要用户计数,将某个列中符合条件的行的个数做统计
       【1】查询所有学生的基本信息
           select * from student
       【2】查询所有学生的最高成绩
           select max(grade) as '最高成绩'
           from sc
       【3】查询有多少学生选课了
           select count(sno) as '选课人数'
           from sc
           如果要去掉重复选课的情况的话,需要增加去掉重复行
           select count(distinct sno) as '选课人数'
           from sc
   
2.6.3 选择条件
      (1)比较运算符   :列名 比较运算符 值
                          包括:>,<,>=,<=,=,<>,!=
      (2)多条件连接符 :同时成立       条件1 and 条件2
                          其中一个成绩   条件1 Or 条件2
                       
       【4】查询所有成绩在60到79之间的学生的学号,课程号及成绩
            select sno ,cno ,grade  
           from sc
           where grade>=60 and grade<=79
       【5】查询所有男同学的学号和姓名
            select sno ,sname
            from student
            where ssex='男'     
       【6】查询电子信息专业或者计算机专业的学生的基本信息
            select * from student
            where sdept='电子信息' or sdept='计算机'
           
      (3)在某个范围之内   :列名 between 值1 and 值2
      
       【7】查询所有成绩在60到79之间的学生的学号,课程号及成绩
            select sno ,cno ,grade  
           from sc
           where grade between 60 and 79      
      
      (4)在某个集合之内   :列名in(值的集合)
      
       【8】查询电子信息专业或者计算机专业的学生的基本信息
            select * from student
            where sdept in('电子信息' ,sdept='计算机')
           
      (5)是否为空         :列名 is null
      
       【9】查询没有成绩的学生的学号和选择课程的课程号
          select sno ,cno   from sc
           where grade is null
           
      (6)模糊查询        :列名 like '匹配串'
                             通配符主要内容:
                              %:代表0个或者多个字符或者字
                             _:下划线,代表单个字符或者字
           
       【10】查询姓张的男同学的基本信息
           select * from student
            where ssex='男' and sname like '张%'
       【11】查询名字由两个字构成,且第二个字是阳的同学的基本信息
           select * from student
            where sname like '_阳'
       【12】查询名字第二个字是阳的同学的基本信息
           select * from student
            where sname like '_阳%'
2.6.4 分组查询
    【13】查询每个同学的平均成绩
          select sno ,avg(grade)
          from sc
          group by sno   //分组子句,按照某单个列或者多个列进行分组
         
    【14】查询每门课程的平均成绩
         select cno ,avg(grade)
          from sc
          group by cno
        
    【15】查询平均成绩在85分以上的同学的学号和平均成绩
         select sno ,avg(grade)
          from sc
          group by sno
           having avg(grade)>85   //分组后的条件选择,没有分组子句就没有having的筛选
            
    【16】查询每个同学的学号,姓名和平均成绩
         select student .sno,sname,avg(grade)
        from student,sc
        where student.sno=sc.sno
        group by student.sno,sname  //存在分组的子句,那么select后的属性列在聚集函数中或者在分组子句中
         
2.6.5 排序
     
      默认是升序排列(ASC),降序排列表示DESC
     【17】按照成绩降序排列显示每个学生的学号,选择课程的课程号和对应的该门课程的成绩
          select sno,cno ,grade
         from sc
         order by grade desc
         
2.6.6 连接查询
    (1)等值或者非等值连接
        from 表1,表2
        where 连接条件
        其中,连接条件可以表示为:表1.列比较运算符 表2.列
        
        【18】查询所有选课学生的学号和姓名
             select student.sno,sname
             from student,sc
              where student.sno=sc.sno
        【19】查询所有选课学生的学号,姓名,选择课程的课程名
             select student.sno,sname,cname
             from student,sc,course
             where student.sno=sc.sno and sc.cno=course.cno
            
    (2)内连接
        from 表1 inner join 表2 On(连接条件)
        
        【20】查询所有选课学生的学号和姓名
             select student.sno,sname
             from student inner Join sc
               on(student.sno=sc.sno)
        【21】查询所有选课学生的学号,姓名,选择课程的课程名
             select student.sno,sname,cname
             from student inner join sc on(student.sno=sc.sno)
                   inner join course on(sc.cno=course.cno)
                  
    (3)外连接
        from 表1 left outer join 表2 On(连接条件)
        其中:表1是主表,保留所有数据行
             表2是副表,保留符合连接条件的行信息,如果没有符合连接条件的,系统会默认分配值为NULL
            
       【22】查询没有选课的学生的学号,姓名
            select student.sno,sname
            from student left outer join sc on(student.sno=sc.sno)
            where cno is null
            
    (4)嵌套查询
         子查询作为父查询的查询条件
        连接谓词为“=”,则子查询的返回结果是一个值
               为“in”,则子查询的返回结果可以是一个集合
               
       【23】查询学分与操作系统课程学分相同的课程的基本信息
            select * from course
            where ccredit =(select ccredit from course where cname='操作系统')
            
2.7数据更新
  
    基本语句:update 数据表
                set  列名=值/运算表达式
                where 选择条件
    注:一次只能修改某个列的值
    【24】将学生的年龄增加1岁
          update student
             set sage=sage+1
    【25】将所有男同学的年龄增加1岁
          update student
             set sage=sage+1
            where ssex='男'
2.8数据删除
    基本语句:delete from 数据表
                where 选择条件
    【26】删除所有学生的信息
          delete from student
    【27】删除所有不及格学生的选课信息
          delete from student
            where grade <60
2.9视图的操作
2.9.1 视图与基本表的区别
    (1)基本表是实表,是有结构也有数据的。
    (2)视图是虚表,只有结构,没有数据。
              视图是在基本表或者视图的基础上建立的。
              不是所有的视图都可以更新,因此视图是受限更新的。
              
2.9.2 视图的建立
    基本语法:create view 视图名(列1,列2,...)
              as
              select语句
    【28】创建视图v1,其功能是查询所有电子信息专业的学生的信息
          create  view v1
          as
            select * from student
            where sdept='电子信息'
    【29】创建视图v2,其功能是查询电子信息专业男同学的信息
          create  view v2
          as
            select * form v1
            where ssex='男'
    【30】创建视图v3,其功能是查询每个学生的学号和平均成绩。
          create view v3(学号,平均成绩)
          as
             select sno,avg(grade)
             from sc
             group by sno
3 规范化过程
3.1由于关系模式具备以下的问题,需要进行规范化:
        数据冗余太大
        更新异常
        插入异常
        删除异常
3.2函数依赖关系
        部分函数依赖:参考p173定义6.2
                      如果已知的关系模式的主码是单个列构成,不会有部分函数依赖。
        传递函数依赖:参考p173定义6.3
                      至少要有3个以上的属性列,才会有传递关系存在。
                      如果已知的关系模式只有2个属性列,不会有传递函数依赖。
3.3范式的级别
        1NF(每个列都是不可分割的)
              
       2NF(都是完全函数依赖)
      
       3NF(都是直接函数依赖)
      
       (1)1NF-->2NF
           需要消除非主属性与码的部分函数依赖
            
       (2)2NF-->3NF
           需要消除非主属性与码的传递函数依赖
            
       以上两个转换的方法-->将已知的关系模式进行“分解”
      
3.3举例:已知一个关系模式:R(sno,sdept,mname,cno,grade)
          【问1】R属于第几范式?为什么?并规范化为上一级范式。                    
    (1)主码是(sno,cno)
    (2)非主属性是sdept,mname,grade
    (3)存在以下的函数依赖
        (sno,cno)-->sdept
        (sno,cno)-->mname
        (sno,cno)-->grade
        sno-->sdept
        sno-->mname
    (4)由(3)可知,非主属性sdept部分函数依赖于码;非主属性mname部分函数依赖与码。
         因此R是1NF.
        
    (5)将R分解,规范化为2NF:
         R1(sno,cno,grade)
        R2(sno,sdept,mname)
         
        【问2】将R2规范化为上一级范式。
        
    (1)主码是(sno)
    (2)非主属性是sdept,mname
    (3)存在以下的函数依赖
        sno-->sdept
        sno-->mname
        sdept-->mname
        同时,sdept不能决定sno  
    (4)由(3)可知,非主属性mname传递函数依赖于码。
         因此R2是2NF.      
    (5)将R2分解,规范化为3NF:
          R21(sno,sdept)
        R22(sdept,mname)
        
4 数据库设计的过程
4.1设计的6个阶段
      需求分析
      概念结构设计阶段
      逻辑结构设计阶段
      物理结构设计阶段
      数据库实施
      数据库运行和维护
4.2哪些可以独立于DBMS?
      需求分析
      概念结构设计阶段
      
4.3每个阶段的具体任务
      概念结构设计阶段(完成实体关系图的设计)
      逻辑结构设计阶段(完成实体关系图的转换,转换规则在P225,其中多对多联系一定需要转换为一个关系模式)
      物理结构设计阶段(根据选取的DBMS,进行具体的设计)
      
5 事务的概念
5.1事务是并发控制的基本单位,这些操作要么都做,要么都不做,是一个不可分割的工作单位。
5.2事务的4个特性
      (1)原子性(Atomicity)
       事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
      (2)一致性(Consistency)
       事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
      (3)隔离性(Isolation)
       一个事务的执行不能被其他事务干扰。
      (4)持续性(Durability)
       一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
      
5.3并发操作带来的数据不一致现象
     (1)丢失修改
           事务1修改数据
                              事务2修改数据
                           
           事务1的修改丢失了
     (2)不可重复读
           事务1读取数据
                              事务2对数据进行了修改
           事务1读取数据验证结果,错误
           
           事务1无法再次读取刚刚的数据
     (3)读脏数据
           事务1读取数据
                              事务2读取数据
           事务1回滚
           
           事务2的读取的是不正确的数据
           
6 关系代数
6.1传统的集合运算
      (1)并 RUS   属于R或者属于S的元组的集合
      
      (2)交  R S   既属于R又属于S的元组的集合
      
      (3)差  R-S   属于R不属于S的元组的集合
      
      (4)笛卡尔积 R*S
      
6.2选择
       相当于where中的内容,P55
6.3投影
       相当于select中的内容,P55
6.4连接
       相当于from中的内容,P57

回复 百度谷歌雅虎搜狗搜搜有道360奇虎 关闭延时

举报

wx1749 该用户已被删除
wx1749 发表于 2014-5-14 21:51:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
  • TA的每日心情
    奋斗
    2015-5-28 20:33
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    新手上路

    Rank: 1

    UID
    6810
    威望
    0
    贡献
    10
    在线时间
    2 小时
    注册时间
    2015-4-11
    hello111 发表于 2015-4-15 21:07:10 | 显示全部楼层
    淡定,淡定,淡定……
  • TA的每日心情
    开心
    2015-11-4 11:55
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    新手上路

    Rank: 1

    UID
    8473
    威望
    0
    贡献
    10
    在线时间
    0 小时
    注册时间
    2015-11-4
    lianghuweizhiai 发表于 2015-11-4 12:05:15 | 显示全部楼层
    看到这帖子真是高兴!
    您需要登录后才可以回帖 登录 | 立即注册   扫一扫,用微信登录

    本版积分规则

     
     
    技术支持
    在线客服
    点击这里给我发消息
    2015年辽宁专升本总群:
    辽宁专升本论坛
    辽宁专升本论坛交流群:
    辽宁专升本论坛交流群
    工作时间:
    8:00-22:00
    官方微信扫一扫

    站点信息

    站点统计| 举报| Archiver| 手机版| 小黑屋

    Powered by Discuz! X3.2 © 2001-2014 Comsenz Inc.

    GMT+8, 2019-2-22 11:49

    意见建议|联系我们 |关于我们|广告合作||

    (辽ICP备13005365号-2) 辽宁专升本论坛

    快速回复 返回顶部 返回列表