数据库基础知识
基础概念介绍
数据库:
数据库(DataBase 简称 DB)就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。
数据库管理系统:
数据库管理系统(Database Management System 简称 DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。 常见的数据库系统包括 MySQL、PostgreSQL、Oracle、SQL Server 等
数据库系统:
数据库系统(Data Base System,简称 DBS)通常由软件、数据库和数据管理员(DBA)组成。
数据库管理员:
数据库管理员(Database Administrator, 简称 DBA)负责全面管理和控制数据库系统。
元组:
元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
码:
码就是能唯一标识实体的属性,对应表中的列,即属性列
候选码:
若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。
主码:
主码也叫主键。主码是从候选码中选出来的。 一个实体集中只能有一个主码,但可以有多个候选码。
外码:
外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
主属性:
候选码中出现过的属性称为主属性。比如关系 工人(工号,身份证号,姓名,性别,部门). 显然工号和身份证号都能够唯一标示这个关系,所以都是候选码。工号、身份证号这两个属性就是主属性。如果主码是一个属性组,那么属性组中的属性都是主属性。
非主属性:
不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生(学号,姓名,年龄,性别,班级)中,主码是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。
图中上下两种划分方式并不是对立的,只是为了帮助大家划分概念这么画的,毕竟主属性的定义是候选码中出现过的属性称为主属性 ,说明他们是不存在概念上的绝对切割的。
ER图:
全称是 Entity Relationship Diagram(实体联系图),提供了表示实体类型、属性和联系的方法
由以下三个要素组成:
- 实体:通常是现实世界的业务对象,使用逻辑对象也可以。比如一个校园管理系统,会涉及学生,教师,班级,课程等实体。在ER图中用矩形框表示
- 属性:即某个实体拥有的属性,属性用来描述组成实体的要素,对于产品设计来说可以理解为字段。在 ER 图中,属性使用椭圆形表示。
- 联系:即实体与实体之间的关系,在 ER 图中用菱形表示,这个关系不仅有业务关联关系,还能通过数字表示实体之间的数量对照关系。例如,一个班级会有多个学生就是一种实体间的联系。
下图是一个学生选课的 ER 图,每个学生可以选若干门课程,同一门课程也可以被若干人选择,所以它们之间的关系是多对多(M: N)。另外,还有其他两种实体之间的关系是:1 对 1(1:1)、1 对多(1: N)。
学生与课程之间联系的E-R图
数据库范式
数据库范式有三种:
- 1NF(第一范式):属性不可再分。
- 2NF(第二范式):在1NF 的基础之上,消除了非主属性对于码的部分函数依赖。
- 3NF(第三范式):3NF 在 2NF 的基础之上,消除了非主属性对于码的传递函数依赖
三大范式是用于设计数据库表结构的规范,旨在减少数据冗余、避免异常并保证数据的一致性。随着范式级别的提高,数据结构会更加规范和优化。主要针对的是关系型数据库
1NF(第一范式):
属性,即表中字段,必须是不可再分割的原子值,也就是说这个字段只能是一个值,不能包含数组、集合或复合数据类型。1NF是所有关系型数据库的基本要求,也就是说关系型数据库创建的表一定满足第一范式。
2NF(第二范式):
2NF 在 1NF 的基础之上,消除了非主属性对于码的部分函数依赖。第二范式在第一范式的基础上增加了一个列,这个列称为主键,非主属性都依赖于主键。
商品名称 | 供应商名称 | 价格 | 重量 | 供应商电话 | 有效期 | 分类 |
可乐 | 饮料一厂 | 3.00 | 250g | 88888888 | 2024.11.1 | 饮料 |
可乐 | 饮料二厂 | 3.00 | 250g | 33334444 | 2024.12.1 | 饮料 |
现在这个表中就存在部分函数依赖,你能看出来吗?
答案是:供应商电话部分依赖于(商品名称,供应商名称),原因在于供应商名称本身就可以确定供应商电话,不需要组合属性,该表不符合2NF
商品ID | 名称 | 价格 | 重量 | 有效期 | 分类 |
1 | 可乐 | 3.00 | 250g | 2024.11.1 | 饮料 |
2 | 可乐 | 3.00 | 250g | 2024.12.1 | 饮料 |
供应商ID | 供应商名称 | 供应商电话 |
1 | 饮料一厂 | 88888888 |
2 | 饮料二厂 | 33334444 |
记录ID | 商品ID | 供应商ID |
1 | 1 | 1 |
2 | 2 | 2 |
修改为这样就符合2NF了。
一些重要概念(只举例子,详细定义请自己了解):
- 函数依赖:若在一张表中,在属性(或属性组)X 的值确定的情况下,必定能确定属性 Y 的值,那么就可以说 Y 函数依赖于 X,写作 X → Y。
- 部分函数依赖:部分函数依赖是指一个非主属性仅依赖于组合属性的一部分,而不是依赖整个组合属性。如果通过组合属性的某个部分(而不是整个组合)就可以唯一地确定那个非主属性,那么这个属性就是部分依赖于组合属性的这一部分。例如学生基本信息表 R 中(学号,身份证号,姓名)当然学号属性取值是唯一的,在 R 关系中,(学号,身份证号)->(姓名),(学号)->(姓名),(身份证号)->(姓名);所以姓名部分函数依赖于(学号,身份证号)。
- 完全函数依赖:在一个关系中,若某个非主属性数据项依赖于全部关键字称之为完全函数依赖。比如学生基本信息表 R(学号,班级,姓名)假设不同的班级学号有相同的,班级内学号不能相同,在 R 关系中,(学号,班级)->(姓名),但是(学号)->(姓名)不成立,(班级)->(姓名)不成立,所以姓名完全函数依赖与(学号,班级)
- 传递函数依赖:传递函数依赖会导致数据冗余和异常,比如在关系 R(学号 , 姓名, 系名,系主任)中,学号 → 系名,系名 → 系主任,所以存在非主属性系主任对于学号的传递函数依赖,可以将 系名,系主任 放在同一个表中,然后就变成了R1(学号,姓名,系名),R2(系名,系主任)
3NF(第三范式):
3NF 在 2NF 的基础之上,消除了非主属性对于码的传递函数依赖,符合 3NF 要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。
什么是存储过程
是数据库中一组预先编写并存储的SQL语句的集合,可以在数据库服务器端执行。简单来说,存储过程就是一系列SQL语句的集合,中间加了一些逻辑控制语句,是开发人员提前准备好的,用于处理复杂业务时直接调用的,以提高数据库操作的效率和可维护性。
有点类似于编程语言中的函数,可以接收输入参数、执行操作,并返回结果。存储过程一旦调试完成通过后就能稳定运行,另外,使用存储过程比单纯 SQL 语句执行要快,因为存储过程是预编译过的。
但是也有缺点,缺点在于存储过程难以调试和扩展,而且没有移植性,还会消耗数据库资源。
数据库设计步骤
- 需求分析:分析用户的需求,包括数据、功能和性能需求。
- 概念结构设计:主要采用 E-R 模型进行设计,包括画 E-R 图。
- 逻辑结构设计:通过将 E-R 图转换成表,实现从 E-R 模型到关系模型的转换。
- 物理结构设计:主要是为所设计的数据库选择合适的存储结构和存取路径。
- 数据库实施:包括编程、测试和试运行
- 数据库的运行与维护:系统的运行与数据库的日常维护。
MySQL基础
什么是关系型数据库
顾名思义,关系型数据库(RDB,Relational Database)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。
关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一行就存放着一条数据(比如一个用户的信息)。
关系型数据库表关系
大部分关系型数据库都使用 SQL 来操作数据库中的数据。并且,大部分关系型数据库都支持事务的四大特性(ACID)。
常见的关系型数据库有:MySQL、PostgreSQL、Oracle、SQL Server等
什么是SQL
SQL 是一种结构化查询语言(Structured Query Language),专门用来与数据库打交道,目的是提供一种从数据库中读写数据的简单有效的方法。
几乎所有的主流关系数据库都支持 SQL ,适用性非常强。并且,一些非关系型数据库也兼容 SQL 或者使用的是类似于 SQL 的查询语言。
什么是MySQL
MySQL 是一种关系型数据库,主要用于持久化存储我们的系统中的一些数据比如用户信息。
由于 MySQL 是开源免费并且比较成熟的数据库,因此,MySQL 被大量使用在各种系统中。任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL 的默认端口号是3306。
MySQL的优点
MySQL 主要具有下面这些优点:
- 成熟稳定,功能完善。
- 开源免费。
- 文档丰富,既有详细的官方文档,又有非常多优质文章可供参考学习。
- 开箱即用,操作简单,维护成本低。
- 兼容性好,支持常见的操作系统,支持多种开发语言。
- 社区活跃,生态完善。
- 事务支持优秀, InnoDB 存储引擎默认使用 REPEATABLE-READ 并不会有任何性能损失,并且,InnoDB 实现的 REPEATABLE-READ 隔离级别其实是可以解决幻读问题发生的。
- 支持分库分表、读写分离、高可用。
总结:
本期博客介绍了很多基础知识,并没有深入介绍MySQL这个开源的关系型数据库,下期再深入介绍,关于这些基础知识,当提及时大家知道是什么东西,怎么回事就行了,不必一字不差的记住,好了,我们下期再见。
标签:关系,非主,范式,数据库,MySQL,属性 From: https://blog.csdn.net/qq_65754164/article/details/142643573