数据库基础

简介: 数据库基础

1. 数据库、数据库管理系统、数据库系统、数据库管理员

  • 数据库:DataBase,DB,就是信息的集合,或者说数据库是由数据库管理系统管理的数据的集合。
  • 数据库管理系统:DataBase Management System,DMS,是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。
  • 数据库系统:Data Base System,DBS,由软件、数据库和数据库管理员组成。
  • 数据库管理员:DataBase Administrator,负责全面管理和控制数据库系统。

2. 元组、码、候选码、主码、外码、主属性、非主属性

  • 元组:是关系数据库的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。在二维表中,元组也称为
  • 候选码:若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。
  • 主码:也叫主键,主码是从候选码中选出来的。一个实体集中只能有一个主码,但可以有多个候选码。
  • 外码:也叫外键。如果一个关系中的一个属性是另外一个关系中的主码,则这个属性为外码。
  • 主属性:候选码中出现过的属性成为主属性。比如关系工人(工号,身份证,姓名,性别,部门),显然工号和身份证号都能唯一标识这个关系,所以都是候选码。工号、身份证这两个属性就是主属性。如果主码是一个属性组,那么属性组中的属性都是主属性。
  • 非主属性:不包含在任何一个候选码中的属性称为非主属性。比如在关系学生(学号,姓名,年龄,性别,班级)中,主码是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。

3. ER图

Entity Relationship Diagram,实体联系图,提供了表示实体类型、属性和联系的方法。

ER图由3个要素组成:

  • 实体:通常是现实世界的业务对象,当然使用一些逻辑对象也可以。比如对于一个校园管理系统,会涉及学生、教师、课程、班级等等实体。在ER图中,实体使用矩形框表示。
  • 属性:即某个实体拥有的属性,属性用来描述组成实体的要素,对于产品设计来说可以理解为字段。在ER图中,属性使用椭圆形表示。
  • 联系:即实体与实体之间的关系,在ER图中用菱形来表示,这个关系不仅有业务联系关系,还能通过数字表示实体之间的数量对照关系。例如,一个班级会有多个学生就是一种实体间的联系。

下图是一个学生选课的 ER 图,每个学生可以选若干门课程,同一门课程也可以被若干人选择,所以它们之间的关系是多对多(M: N)。另外,还有其他两种实体之间的关系是:1 对 1(1:1)、1 对多(1: N)。

4. 数据库范式

数据库设计范式:数据库表的设计依据。

  1. 第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分。
  2. 第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖
  3. 第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖

按照以上范式设计数据库表,可以避免表中数据的冗余,空间的浪费。

第一范式

最核心,最重要的范式,所有表的设计都需要满足。

必须有主键,并且每一个字段都是原子性不可再分。

学生编号  学生姓名    联系方式
------------------------------------------
1001    张三    zs@gmail.com,1359999999
1002    李四    ls@gmail.com,13699999999
1001    王五    ww@163.net,13488888888

上表不满足第一范式

原因:第一,没有主键;第二,联系方式可以分为邮箱地址和电话:

学生编号(pk)     学生姓名   邮箱地址     联系电话
---------------------------------------------------------
1001        张三     zs@gmail.com  1359999999
1002        李四     ls@gmail.com  13699999999
1003        王五     ww@163.net    13488888888

第二范式

建立在第一范式的基础之上,要求所有非主键字段必须完全依赖主键,不要产生部分依赖

学生编号  学生姓名   教师编号  教师姓名
----------------------------------------------------
1001    张三    001   王老师
1002    李四    002   赵老师
1003    王五    001   王老师
1001    张三    002   赵老师

多对多关系!(1个学生可能有多个老师,1个老师有多个学生)

上表满足第一范式;修改

学生编号 教师编号,两个字段联合做主键,复合主键(PK: 学生编号+教师编号)

学生编号+教师编号(pk)   学生姓名      教师姓名
----------------------------------------------------
1001    001       张三      王老师
1002    002       李四      赵老师
1003    001       王五      王老师
1001    002       张三      赵老师

上表不满足第二范式:张三”依赖1001,“王老师”依赖001,显然产生了部分依赖。

修改:使用三张表来表示多对多的关系

学生表
学生编号(pk)    学生名字
------------------------------------
  1001        张三
  1002        李四
  1003        王五
    
教师表
教师编号(pk)     教师姓名
--------------------------------------
  001       王老师
  002       赵老师
学生教师关系表
id(pk)      学生编号(fk)      教师编号(fk)
------------------------------------------------------
1         1001          001
2         1002          002
3         1003          001
4         1001          002

总结:多对多设计,三张表,关系表两个外键!

第三范式

第三范式建立在第二范式的基础之上,要求所有非主键字典必须直接依赖主键,不要产生传递依赖。

学生编号(PK) 学生姓名     班级编号     班级名称
---------------------------------------------------------
 1001     张三    01      一年一班
 1002     李四    02      一年二班
 1003     王五    03      一年三班
 1004     赵六    03      一年三班

1对多关系!(一个教室中有多个学生)

满足第一范式,有主键(学生编号)。

满足第二范式,因为主键不是复合主键,没有产生部分依赖。主键是单一主键。

不满足第三范式:一年一班依赖01,01依赖1001,产生了传递依赖。

修改:

班级表:一
班级编号(pk)      班级名称
----------------------------------------
 01           一年一班
 02           一年二班
 03           一年三班
学生表:多
学生编号(PK)   学生姓名     班级编号(fk)
-------------------------------------------
 1001       张三      01      
 1002       李四      02      
 1003       王五      03      
 1004       赵六      03

总结: 一对多,两张表,多的表加外键!


目录
相关文章
|
6月前
|
存储 数据库
为什么需要数据库
为什么需要数据库。
41 4
|
6月前
|
SQL 关系型数据库 MySQL
盘点数据库中的一些坑(一)
盘点数据库中的一些坑(一)
59 0
|
6月前
|
XML SQL 数据库
数据库视频(三)
数据库视频(三)
30 0
|
6月前
|
Go 数据库
数据库的实现
数据库的实现
|
SQL 存储 NoSQL
数据库详解
数据库详解
66 0
|
SQL 数据库 Windows
数据库—耿建玲视频总结(二)
首先建库,就好比我们盖房子,我们可以自己盖(企业管理器建库),也可以包给别人让别人给盖(T语言建库)。
|
存储 缓存 关系型数据库
2、数据库相关
2、数据库相关
46 0
|
SQL 安全 数据库
【数据库视频】总结
【数据库视频】总结
|
存储 消息中间件 NoSQL
数据库常识课
数据库常识课
67 0
|
SQL 资源调度 关系型数据库
快速学完数据库
本来想写文章来复习的,后面发现越写越多,而且感觉本末倒置了,查询语句写的最少,其他倒是写的很详细,数据库知识真的太细太碎了,整理起来难度真的挺大的,如果是数据库小白,这篇文章肯定很有用,它没有过多的实战,带你了解数据库的基本框架和能够完成的任务,如果是数据库学过的话,那这篇文章可能对你而言只有前面数据库概述和设计数据库有用,数据库sql语句这部分非常的精简,几乎只是了解个框架,第一次写长文欢迎评论区大佬们的指正。
84 0
快速学完数据库