zoukankan      html  css  js  c++  java
  • 数据库系统原理

    数据库系统原理#

    概念

    一##

    • 数据:
      描绘事物的符号。
    • 数据库:
      长期储存在计算机内,有组织,可共享的大量数据的集合。
    • 数据库管理系统:
      位于用户与操作系统之间的一层数据管理软件。
    • 数据库系统(DBS)###

    是有数据库、数据库管理系统、应用程序、数据库管理员组成的储存,管理,处理,维护数据的系统。

    • 数据库系统的特点:
    • 数据结构化
    • 数据的共享性高
    • 冗余度低且易扩充
    • 独立性、数据有数据库管理系统统一管理控制
    • 物理独立性:

    指用户的应用程序和数据库中的数据的物理存储是相互独立的

    • 逻辑独立性:

    指用户的应用程序对数据库的逻辑结构是独立的。

    • 数据库管理系统(DBMS)###

    提供 数据的安全性保护、完整性检查、并发控制、数据库恢复

    二##

    • 实体:
      客观存在并可以相互区别的事件

    • 实体型:
      用实体名及其属性名集合来抽象和刻画同类实体

    • 实体集
      同一类型实体的集合成为实体集

    • 关系模型:###

    • 由关系数据结构、关系操作集合和关系完整性约束三部分组成。

    • 数据库系统采用关系模型作为数据的组织方式。

    关系:一个关系对应通常说就是一张表

    关系模式:关系名(table_name)(属性1,属性2,属性3。。。。)

    属性:表中的一列即为一个属性

    域:属性的取值范围;

    元组:表中的一行即为一个元组;

    主码:表中的某个属性组,它可以惟一确定一个元组;

    分量:元组中的一个属性值;

    • 关系完整性###

    • 实体完整性

    属性A是基本关系R的主属性,则A不能取空值。

    • 参照完整性

    若F是R的外码,它与关系S的主码相对应,则对于R中的每个元组在F上的值必须为:空值,或者S中某个元组的主码值。

    • 用户定义的完整性

    关系数据库#

    关系##

    • 域:
      是一组具有相同数据类型的集合
    • 笛卡尔积:
      是域上的一种集合运算
    • 元组:
      笛卡尔积的每一个元素

    • 全码:
      所有属性都是候选码,称为全码
    • 候选码:
      能唯一标识一个元组的某一个属性组,学生(姓名, 学号, 成绩) 则姓名和学号都是候选码
    • 主属性:
      候选码的各属性
    • 主码:
      候选码中选定一个作为主码

    连接##

    • 等值连接

    从两个关系的广义笛卡尔积中选取A,B属性值相等的那些元组出来。

    • 自然连接

    两个关系中比较的分量必须是相同的属性值,就是把 R 和 S中相同的部分保留下来,并要在结果总把重复的一列去掉。

    • 外连接

    把在自然连接中舍弃了的元组也保存到结果关系中,而其他的属性值填NULL

    • 左/右外连接:

    把自然连接中 左/右关系 R / S 舍弃的元组保留下来

    关系代数##

    • 选择
    • 投影 where
    • 连接
    • R / S = T, T包含在R,但不在S中的元组,且 T 元组与 S 元组的组合都在 R 中。

    SQL#

    级联、限制

    把限制词放在语句的后面
    cascade (级联) 表示在删除模式的同时,把模式下定义的对象也一并删除
    restrict (限制) 表示只有当没有下属对象时才可以执行删除语句,否则拒绝
    

    数据类型##

    模式

    • 数据库系统的三级模式结构由外模式、模式和内模式组成。
    • 模式的基本对象有:表、视图、索引

    也称逻辑模式,是数据库中去啊你数据的逻辑饥饿哦股和特征的描述,是所有用户的公共数据视图。

    • 外模式:模式与外模式映射保证逻辑独立性

    它是数据用户能看到和使用的局部数据和逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑关系。

    • 内模式:模式与内模式映射保证物理独立性

    一个数据库只有一个内模式,是数据物理结构和存储方式的描述,是数据在数据库的组织方式。

    create schema <模式名> authorization <用户名>;
    

    索引###

    unique () 每一个索引值只对应唯一的数据记录
    cluster () 
    
    create unique index Stusname on Student(Sname);
    

    查询###

    LOWER(Sdept)

    大写变小写

    select sname,2004-sage from Student;
    
    select sname,'Year of Birh:',2004 - sage,LOWER(Sdept) from Student;
    
    • 通过制定别名来改变查询结果的列标题。
    select sname NAME,'Year of Birh:'BIRTH,2004 - sage BIRTHDAY,LOWER(Sdept) DEPARTMENT from Student;
    
    • 消除取值重复的行
    select distinct sno from SC;
    
    • 确定范围between and
    select sname,sdept,sage from student where sage (not) between 20 and 23;
    
    • 确定范围in
    select sname,ssex from student where sdept in('cs','ma','is');
    
    • 字符匹配like
    • 通配符:

    % 代表任意长度
    _ 代表单个字符 一个汉字两个字符
    / 是转义字符

    select * from student where sname like '刘%';
    
    • 空值查询IS NULL
    select sno,cno from sc where grade is (not) null;
    

    ORDER BY###

    对查询结果进行升序、降序排列
    升序: asc
    降序:desc

    select sno,grade from sc where cno = '3' order by grade desc;
    

    GROUP BY###

    将查询结果分组

    select cno,count(sno) as 数量 from sc group by cno;
    
    select  图书分类,count(图书编号)  as 图书数量  from  图书采购表 group by  图书分类') ;
    ```
    ###having
    对分组结果进行筛选
    ```
    /*查询修了2门以上课程的学生*/
    select sno from sc group by sno having count(*)>2;
    ```
    
    ##连接查询
    ```
    ① 查询编号为300的客户通过的代理商的姓名和地址。
    select 代理商.姓名,代理商.地址 from 代理商,客户
    	where 客户.客户编号=300 and 客户.代理商编号=代理商.代理商编号;
    ```
    ##嵌套查询
    ```
    2.嵌套查询
    */
    ① 查询与“刘晨”在同一个系学习的学生。
    select * from 学生信息
    	where 专业 in(
    	select 专业 from 学生信息 where 姓名 = '刘晨')
    
    ② 查询选修了课程名为“操作系统”的学生。
    select 学生信息.* from 学生信息,课程信息 
    	where 学生信息.学号
    	in(select 成绩信息.学号 from 成绩信息 where 成绩信息.课程序号 
    	in(select 课程信息.课程序号 from 课程信息 where 课程信息.课程名称 = '操作系统'));
    ```
    #数据库安全#
    三类安全性问题:
    技术安全,管理安全,政策法律安全
    ##存取控制##
    > 定义用户权限,并将用户权限登记到数据字典中
    > 合法权限检查
    
    ###自主存取权限###
    > 定义各个用户对不同数据的**存取权限**,当用户访问数据时,首先检查用户的存取权限,防止不合法的用户对数据库的存取
    ###强制存取控制方法###
    > 每个数据对象被强制地**标以一定的密级**,每个用户也被强制地授予某一个级别的许可证,系统规定只有某一许可证级别的用户才能存取某一级别的数据对象。
    
    ##审计##
    > 审计功能把用户对数据库的所有操作自动记录下载放入审计日志中。DBA可以利用审计跟踪的信息,重现导致数据库先有状况的一系列事件,找出非法存取数据的人、事件和内容等。
    ##数据加密##
    > 替换法:把明文字符换位密文字符
    > 置换发:把明文字符重新排序
    > DES (数据加密标准) 秘钥加密技术 = 替换法 + 置换法
    
    #关系数据理论#
    ##函数依赖##
    ### 平凡函数依赖 & 非平凡函数依赖### 
    
     > * 是````一对一的关系```` X 中有属性值相同的元组,则对应的 Y 中的属性值也要相等,则称:X 函数决定 Y ,Y 函数依赖于X。
     > X称为决定属性组,或决定因素。
     > *  如果 Y 是X 的子集,则 X -> Y 为平凡函数依赖。
     
    ###完全函数依赖 & 部分函数依赖###
    > * 如果 X -> Y,但对于X的任何一个真子集 都不能函数确定Y,则对X完全函数依赖
    > *  X->Y,但是Y不函数决定于X,则为部分函数依赖。
    * 传递函数依赖
    > * X ->Y, Y->Z . X->Z
    
    * 多值依赖
    > * X -> -> Y
    
    ##范式
    三范式是为了避免数据冗余。
    ###第一范式###
     > 就是每一个列(属性)只有一个,没有重复。
    
    ###第二范式###
     > 每个非主属性完全依赖于主键
     > 反例: A -> C, B -> C ,存在部分函数依赖
     > 满足第一范式的前提下,````消除部分函数依赖````(拆分为两个表)。
    
    ###第三范式###
     > 每个非主属性不依赖于其它非主属性
     > ````消除部分和传递函数依赖````
     
    ###BC范式##
     > * BC范式:关系模式R属于第一范式,且每个属性都不传递依赖于键码。
     > * BC范式是第三范式的增强版,不过也有人说是直接从1NF发展过来的,````即每个属性,包括主属性或非主属性,都完全依赖于候选键,并且不存在传递依赖情况。````
    
    ##数据依赖的公理系统##
    ###Armstrong公理系统###
    * 自反性
    * 增广性
    * 传递性
    ###求X关于函数依赖集F的闭包###
    > 求属性集 X (X是U的真子集) 关于U 上的函数依赖 F 的壁报X(F)+;
    > *** 例子**:
    > U = {A,B,C,D,E},F = {AB-->C,B-->D,C-->E,EC-->B,AC-->B}求(AB)f+;
    > **解**:
    > 设:X(0) = AB;
    > X(1):找到左边A,B或AB的函数依赖,得到AB-->C,B-->D。于是X(1) = AB U CD = ABCD;
    > ......比较上下两次迭代(如:X(0),X(1))是否相等,如果不等则并进来
    > 继续,直到 上下两次迭代相等为止。
    
    ###最小函数依赖集###
    > A --> B ,B --> C ,A --> C
    > 则最小函数依赖集为:A --> B,B --> C;
    
    
    #数据库设计#
    **三分技术,七分管理,十二分基础数据**
    ##数据库设计的基本步骤##
    * 需求分析
    * 概念结构设计
    * 逻辑结构结构设计
    * 物理结构设计
    * 数据库实施
    * 数据库运行和维护
    
    
    ##查询处理和查询优化##
    * 总代价 = ````I/O 代价```` + CPU代价 +  内存代价 + 通信代价
    * 代数优化
     * 先做选择操作再做其他操作
    
    # 数据库恢复技术#
    ##事务##
     * 事务是用户一个完整的操作,是不可分割的工作单位。
     * 事务的特性
     ````可以联想一下印象笔记的笔记同步````
      > ACID特性(原子性、一致性、隔离性、持续性)
      > * 原子性:事务是最小的逻辑工作单位,要么做完一个事务,要么不进行事务
      > * 一致性:事务执行后数据库必须是从一个一致性的状态变为另一个一致性的状态的
      > * 隔离性:一个事务的执行不能被其他事务干扰,事务之间隔离。
      > * 持续性(永久性) :事务提交后对数据库中数据的影响是永久性的。
    
    #并发控制#
    ````可以联想一下印象笔记的多人协作````就是多人协作,对同一份笔记进项修改。
    *  并发操作所带来的数据不一致性主要包括:
     * 丢失修改
     * 不可重复读
     * 读“脏”数据
    
    
    ##封锁##
    ````可以联想一下印象笔记的````
    * 排它锁 X锁 (写锁) :
    * 共享锁 S锁 (读锁) :
    * 活锁:一直在等待上一个事务释放锁
     * 活锁的预防: 先来先服务
    * 死锁:多个事务各自占有部分资源等待另一部分资源,资源需求出现回路,导致事务停顿得不到执行
    两个人都要笔和纸来办事,一个人拿着笔等纸,一个人拿着纸等笔,谁都不愿说自己完成了任务。
     * 死锁的预防: 一次封锁法 + 顺序封锁法
  • 相关阅读:
    谷粒商城学习——P41vue组件化
    谷粒商城学习——P40计算属性、侦听器、过滤器
    谷粒商城学习——P38-39Vue-指令-单向绑定&双向绑定&v-onv-forv-if
    谷粒商城学习——P37vue基本语法——双向绑定、事件处理
    谷粒商城学习——P36Vue介绍与HelloWord
    谷粒商城学习——P35模块化
    谷粒商城学习——P34Promise异步编排
    Windows tcp/ip(CVE-2020-16898)远程代码执行蓝屏漏洞复现
    QQ群关系可视化3D查询搭建
    Skywalking 8.1 Docker 服务端部署
  • 原文地址:https://www.cnblogs.com/tianjintou/p/4673409.html
Copyright © 2011-2022 走看看