袁党生博客

  • 主页
  • linux基础
  • SHELL
  • WEB
  • 负载
  • 企业级应用
  • 数据库
  • KVM
  • Docker
  • K8S
  • 监控
  • 存储
  • 博客搭建问题
  1. 首页
  2. 数据库
  3. 正文

一、关系型数据库基础

2020年4月23日 1310点热度 0人点赞 0条评论


数据库的发展史

  • 萌芽阶段:文件系统
      使用磁盘文件来存储数据
  • 初级阶段:第一代数据库
      出现了网状模型、层次模型的数据库
  • 中级阶段:第二代数据库
      关系型数据库和结构化查询语言
  • 高级阶段:新一代数据库
      “关系-对象”型数据库

文件管理系统的缺点

  • 编写应用程序不方便
  • 数据冗余不可避免
  • 应用程序依赖性
  • 不支持对文件的并发访问
  • 数据间联系弱
  • 难以按用户视图表示数据
  • 无安全控制功能

数据库管理系统的优点

  • 相互关联的数据的集合
  • 较少的数据冗余
  • 程序与数据相互独立
  • 保证数据的安全、可靠
  • 最大限度地保证数据的正确性
  • 数据可以并发使用并能同时保证一致性

数据库管理系统及其基本功能和机构

  • 数据库管理系统
    数据库是数据的汇集,它以一定的组织形式存于存储介质上
    DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
    DBA:负责数据库的规划、设计、协调、维护和管理等工作
    应用程序指以数据库为基础的应用程序
  • 数据库管理系统的基本功能
    数据定义
    数据处理
    数据安全
    数据备份
  • 数据库系统机构
    单机架构
    大型主机/终端架构
    主从式架构(C/S)
    分布式架构

关系型数据库

  • 关系:关系就是二维表。并满足如下性质:
      表中的行、列次序并不重要
  • 行row:表中的每一行,又称为一条记录
  • 列column:表中的每一列,称为属性,字段
  • 主键(Primary key):用于惟一确定一个记录的字段
  • 域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值

关系数据库

  • RDBMS:关系数据库
      MySQL: MySQL, MariaDB, PerconaServer
      PostgreSQL: 简称为pgsql,EnterpriseDB
      Oracle
      MSSQL
      DB2
  • 数据库排名:
      https://db-engines.com/en/ranking

实体-联系模型E-R

  • 实体Entity
    客观存在并可以相互区分的客观事物或抽象事件称为实体。
    在E-R图中用矩形框表示实体,把实体名写在框内
  • 属性
    实体所具有的特征或性质
  • 联系
    联系是数据之间的关联集合,是客观存在的应用语义链
    实体内部的联系:指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间有一种关联关系
    实体之间的联系:指不同实体之间联系。例学生选课实体和学生基本信息实体之间
    实体之间的联系用菱形框表示

联系类型

  • 联系的类型

一对一联系(1:1)
  如:学员a的基本信息对应其就业信息
一对多联系(1:n)

示例:

学员a的信息表对应考试成绩表,成绩表包括月考成绩,期中考试成绩,期末考试成绩,两个表之间通过学员id号关联,学员的一个id号对应多个考试成绩
学员成绩表被学员信息表中的id号所约束,因此学员成绩表依赖于学员信息表

  外键 foreign key 简称FK
  主键 简称PK
  一对多用主外键来实现
  主键表:被外键表依赖的表,即学员信息表
  外键表:依赖于其他的表(主键表),即学员成绩表
  外键字段:外键表依赖于主键表的字段,即id号
  主键表中被外键表依赖的字段必须是主键
多对多联系(m:n)

示例:

课程与学员之间的关系就是多对多
学员表   student
课程表   class
使用第三张表student_class实现课程与学员之间的关系
student表
id   name  sex
1     a     f
2     b     m
3     c     f

class  课程表
id  classname
1    linux
2    python
3    java

student_class表
id   student_id   class_id
1       1           1
2       1           2
3       2           2
student_class表中的student_id、class_id属于外键,student表中的学员id号和class表中的课程id号属于相对应的主键
这样就实现了两张表的多对多的关系
对对多对的表操作进行查询,因为涉及到多个表,所以性能会差
  • 数据的操作:
      数据提取:在数据集合中提取感兴趣的内容。SELECT
      数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE
  • 数据的约束条件:是一组完整性规则的集合
      实体(行)完整性Entity integrity
      域(列)完整性Domain Integrity
      参考完整性Referential Integrity

简易数据规划流程

  • 第一阶段:收集数据,得到字段
    收集必要且完整的数据项
    转换成数据表的字段
  • 第二阶段:把字段分类,归入表,建立表的关联
    关联:表和表间的关系
    分割数据表并建立关联的优点
    节省空间
    减少输入错误
    方便数据修改
  • 第三阶段:
    规范化数据库

数据库的正规化分析

  • RDMBS设计范式基础概念
    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小
  • 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)即可

范式

  • 1NF:无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。除去同类型的字段,就是无重复的列
    说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库

示例:

1NF:
作者   书名1    书名2
a     linux   python
b     python
有属性相同的列:书名
作者   书名1   
a     linux,python
b     python
同一行有多个值
以上两种均不符合第一范式
解决方法:
a     linux  
a     oython
b     python
  • 2NF:属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK,非PK的字段需要与整个PK有直接相关性

示例:

员工信息表
name  city  sex  phone  citynumber(城市区号)
a      bj                010
b      sh                021
复合主键:把多个字段(name,city)纳入主键,两个字段其中一个字段可以重复,但是两个一起不能重复
这时,区号citynumber只依赖于city,而不依赖于name,该属性没有完全依赖于主键,这就违反了第二范式
解决方法:
name   city
a       1
b       2
b       2
cityid  city   citynumber
1        bj       010
2        sh       021
  • 3NF:属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系

示例:

id  name  city  sex  phone  citynumber(城市区号)
1    a      bj                010
2    a      sh                021
3    b      sh                021
这里使用id号作为主键
这时,citynumber城市区号依赖于city,而city不属于主键;其他属性依赖于非主属性,违反了第三范式
解决方法:构建第三张表
id  name   city
1    a       1
2    b       2
3    b       2
cityid  city   citynumber
1        bj       010
2        sh       021

缺点:多表操作,数据库性能会变差

SQL概念

  • SQL: Structure Query Language
      结构化查询语言
      SQL解释器:
      数据存储协议:应用层协议,C/S
  • S:server, 监听于套接字,接收并处理客户端的应用请求
  • C:Client
      客户端程序接口
        CLI
        GUI
      应用编程接口
        ODBC:Open Database Connectivity
        JDBC:Java Data Base Connectivity

约束

  • 约束:constraint,表中的数据要遵守的限制
      主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL,一个表只能有一个
      惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,一个表可以存在多个
      外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据
      检查:字段值在一定范围内

基本概念

  • 索引:将表中的一个或多个字段中的数据复制一份另存,并且按特定次序排序存储
  • 关系运算:
      选择:挑选出符合条件的行
      投影:挑选出需要的字段
      连接:表间字段的关联

数据模型

  • 数据抽象:
      物理层:数据存储格式,即RDBMS在磁盘上如何组织文件
      逻辑层:DBA角度,描述存储什么数据,以及数据间存在什么样的关系
      视图层:用户角度,描述DB中的部分数据
  • 关系模型的分类:
      关系模型
      基于对象的关系模型
      半结构化的关系模型:XML数据
标签: mysql
最后更新:2023年4月24日

袁党生

这个人很懒,什么都没留下

点赞
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 linux学习. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备18039507号-1