【数据库原理】快速入门关系型数据库

什么是数据库?以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。--wikipedia.org


Table of Contents

为什么要有数据库

数据库类型

关系型数据库

非关系型数据库

关系型数据库设计范式

1NF(第一范式)

2NF(第二范式)

3NF(第三范式)

多表关系


为什么要有数据库

根本原因:数据保存问题

数据保存到内存:

       优点:读写非常快

       缺点:程序关闭导致数据丢失

数据保存到文件:

       优点:数据可以永久保存

       缺点:频繁地IO操作,效率不高!数据管理不方便。例如查询某个数据需要全部读取出来,再匹配。

数据保存到数据库软件:

1)数据永久保存下来

2)数据管理非常方便。(例如查询非常快速和方便)

数据库:俗称数据的仓库。方便管理数据的软件(或程序)。

数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。

 


数据库类型

数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库。

数据库类型的主要分类:

  1. 网络数据库:是指把数据库技术引入到计算机系统中,借助于网络技术将储存于数据库中的大量信息及时发布出去。而计算机网络借助于成熟的数据库技术对网络中的各种数据进行有效管理,并实现用户与网络中的数据库进行实时动态数据交互。
  2. 层级数据库:层次结构模型实质上是一种由根节点的定向有序树(在数学中 " 树 " 被定义为一个无回的联通图)
  3. 关系数据库:是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
  4. 数据库的另外一种区分方式:基于存储介质,存储介质分为两种:磁盘和内存。关系型数据库:存储在磁盘中。非关系型数据库,存储在内存中。

 

关系型数据库

什么是关系型数据库:指使用了关系模型来组织的数据库。

什么是关系模型:关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织

关系模型由:关系数据结构 + 关系操作集合 + 关系完整性约束 三部分组成.

  1. 关系数据结构:指的数据以什么方式来存储,是一种二维表的形式存储。行决定了表里面放什么数据,列决定了这一列里面只能放哪一种数据。每个关系都具有一个关系明,也就是表名。
  2. 关系操作集合:如何来关联和管理对应的存储数据和SQL指令。获取张三年龄,已知条件为姓名:select * from 二维表 where 姓名 = 张三 。我们把这种语句通过已知条件获取信息的方式就叫做关系操作集合.
  3. 关系完整性约束:数据内部有对应的关联关系,以及数据与数据之间也有对应的关联关系。
    1. 表内约束 : 对应的具体列只能放对应的数据(不能乱放)
    2. 表间约束 : 自然界各实体都是有着对应的关联关系(外键)

 

关系模型中常用的概念:

  1. 关系:一张二维表,每个关系都具有一个关系名,也就是表名
  2. 元组:二维表中的一行,在数据库中被称为记录
  3. 属性:二维表中的一列,在数据库中被称为字段
  4. 域:属性的取值范围,也就是数据库中某一列的取值限制
  5. 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
  6. 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, … … ,属性N),在数据库中成为表结构

 

关系型数据库的优点:

  1. 容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
  2. 使用方便:通用的SQL语言使得操作关系型数据库非常方便
  3. 易于维护丰富的完整性(实体完整性、参照完整性和用户自定义完整性)大大减低了数据冗余和数据不一致的概率

 

典型的关系型数据库:

  • 小型关系型数据库:Microsoft Access ,SQLite.
  • 中型关系型数据库:SQL Server ,MySQL.
  • 大型关系型数据库:Oracle , DB2.

 

非关系型数据库

简单理解非关系型数据库:

  1. NoSQL(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。
  2. 非关系型数据库以键值对<Key, Value>存储,每一个元组(行)可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。

 

特性:

  1. 支持高并发的读写;
  2. 对海量数据的高效存储和访问;
  3. 灵活的数据模型;

 

NoSQL数据库的四大分类:

  1. 键值(Key-Value)存储数据库
    1. 相关产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
    2. 典型应用:内容缓存,主要用于处理大量数据的高访问负载·
    3. 数据模型:一系列键值对
    4. 优势:快速查洵
    5. 劣势:存储的数据缺少结构化
  2. 列存储数据库
    1. 相关产品:Cassandra, HBase, Riak
    2. 典型应用:分布式的文件系统
    3. 数据模型:以列簇式存赌,将同一列数据存在一起
    4. 优势:查找速度快,可扩展性强,更容易进行分布式扩展
    5. 劣势;功能相对局限
  3. 文档型数据厍
    1. 相关产品:CouchDB、MongoDB
    2. 典型应用:web应用(与Key-Value类似,Value是结构化的)
    3. 数据模型:一系列值对
    4. 优势:数据结构要求不严格
    5. 劣势:杳询性能不高,而且缺乏统一的查询语法
  4. 图形(Graph)数据库
    1. 相关数据库:Ne04J、InfoGrid、Infinite Graph
    2. 典型应用:社交网络
    3. 数据模型:图结构
    4. 优势:利用图结构相关算法·
    5. 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案·

关系型数据库设计范式

范式定义:

  1. 为了建立冗余较小、结构合理的数据库,数据库设计的规范原则,即规定数据库的某些设计只能在这样的规矩下进行。
  2. 在关系型数据库中这种规则就称为范式。
  3. 范式是符合某一种设计要求的总结。
  4. 要想设计一个结构合理的关系型数据库,必须满足一定的范式。

 

范式的目的:

  1. 范式可以指导我们更好地设计数据库的表结构,减少冗余的数据,借此可以提高数据库的存储效率,数据完整性和可扩展性。
  2. 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小

 

目前关系数据库有六种范式:

  1. 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
  2. 满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
  3. 越高的范式数据库的冗余度就越低

 

三范式简介:

  1. 第一范式(1NF)如果数据表中每个字段都是不可再分的最小数据单元,则满足第一范式。即,每一列都是一种基础数据类型。
  2. 第二范式(2NF):满足第一范式的前提下,不能出现部分依赖。如果一个关系满足第一范式,并且除了主键之外的其他列,都依赖于该主键,则满足第二范式。即,能区别对待每一行(一般用主键)。
  3. 第三范式(3NF)唯一性:要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。即,所有表的列名都不重复

 

1NF(第一范式)

第一范式是:

  1. 指数据库表中的每一都是不可分割基本数据项,不能是集合、数组等非原子项;
  2. 同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
  3. 简而言之,第一范式就是每个列的内容都是不重复的!

 

例如,下图由于住址列还可以再继续划分成为省、市、区等属性,因此下表设计不符合第一范式的要求:

不符第一范式的影响:

  1. 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
  2. 一般来说,第一范式是存在大量的数据冗余、插入异常、删除异常和更新异常的,因此我们有更高级别的第二范式。

 

2NF(第二范式)

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

 

2NF特性:

  1. 一行的其他列完全依赖主键列。
  2. 第二范式(2NF)要求数据库表中的每个实例或记录(即每一行)必须可以被唯一地区分
  3. 选取一个能区分其他每个实体的属性或属性组(也就是主键),作为实体的唯一标识

 

2NF要求:

  1. 一个表必须有主键;
  2. 其他的列必须是和主键有直接的依赖关系,并且只依赖于主键(这句话不理解?请看下例);

 

例如,表中 ( 学号,课程名称 ) 是联合主键,但是学分字段只和课程名称有关,和学号无关,相当于只依赖联合主键的其中一个字段,不符合第二范式。

 

所以,当数据表中是联合主键,但是有的列只依赖联合主键中的一个或一部分属性组成的联合主键,此时需要拆表才能符合第二范式。

若要使其满足第二范式,那么我们应该将(课程名称,学分)两个字段单独划出一个课程信息表,将(学号, 课程名称, 成绩)划分为选课关系表。

 

修改为符合2NF的表如下:

  1. 学生:Student(学号, 姓名, 年龄)
  2. 课程:Course(课程名称, 学分)
  3. 选课关系:StudentCourse(学号, 课程名称, 成绩)

 

不符合第二范式的影响:

  1. 数据冗余,每条记录都含有相同信息
  2. 删除异常:删除所有学生成绩,就把课程信息全删除了;
  3. 插入异常:学生未选课,无法记录进数据库
  4. 更新异常:调整课程学分,所有行都调整

 

3NF(第三范式)

第三范式是在第二范式基础上,更进一层,第三范式的目标就是确保表中各列与主键列直接相关,而不是间接相关。即各列与主键列都是一种直接依赖关系(非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况,则满足第三范式。

 

理解直接依赖:假设张三是李四的兵,王五则是张三的兵,这时王五是不是李四的兵呢?从这个关系中我们可以看出,王五也是李四的兵,因为王五依赖于张三,而张三是李四的兵,所以王五也是。这中间就存在一种间接依赖的关系,而非我们第三范式中强调的直接依赖。

 

例如,表中员工id能够唯一确定员工信息,但是部门名称、部门电话可由部门id唯一确定,则部门信息传递依赖于员工id,此时,该表不符合第三范式。

若要使上表满足第三范式,那么我们应该将(部门id,部门名称,部门电话)三个字段单独划出一个部门信息表,并在上表中把部门名称,部门电话删除即可。此时上表中部门id成为外键,因为在部门信息表中部门id为主键。


多表关系

多实体关系:

  1. 一对一:一个人只有一个身份证,一个身份证只能对应一个人
  2. 一对多:一个部门有多个员工,一个员工只能对应一个部门
  3. 多对多:一个学生可以选择很多门课程,一个课程也可以被很多学生选择


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值