被大数据杀熟也要看的——数据库基础概念入门
数据库是我们在学习后端开发相关内容时不得不品的重要环节,今天我们就来梳理一下学习数据库操作前需要掌握的基本概念:
目录
数据库
基本概念
分类
关系型数据库基础
基本构成
表(table)/ 关系(Relation)
行(row)/ 元组(tuple)/ 记录(record)
列(column)/ 字段(field)/ 属性(attribute)
关键约束
主键(Primary Key,PK)
外键(Foreign Key,FK)
候选键(Candidate Key)
关系运算(数据操作的基础)
选择(Selection)= 行过滤
投影(Projection)= 列过滤
连接(Join)=表关联
并(Union)
交(Intersect)
差(Except)
范式(Normal Form,NF)
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
数据库
基本概念
数据库(DB)的简单定义:一个虚拟的文件仓库
数据库管理系统(DBMS)的简单定义:用来管理这个仓库的软件系统
结构化查询语言(SQL)的简单定义:一种专为管理和操作关系型数据库设计的标准化编程语言
而后端开发时与数据库有关的场景一般为:用 SQL语言 通过 数据库管理的软件系统 来操作 相关的 数据库 及其中的数据
分类
数据库管理系统大致可以分为两种类型:关系型和非关系型
关系型DBMS:核心是将数据存储在结构化的表当中,表见提供主键-外键建立联系,有着很强的一致性,相比非关系型DBMS而言扩展性较差(代表:MySQL,PostgreSQL,Oracle,SQL Server)
非关系型DBMS:不使用固定的表结构(NoSQL = Not Only SQL),模式灵活,扩展性强,但事务支持比如关系型DBMS完善(代表:Redis,MongoDB)
一般新手在学习数据库相关知识时都先从关系型数据库开始,所以这里我们详细介绍一下关系型数据库中的概念:
关系型数据库基础
基本构成
表(table)/ 关系(Relation)
数据库下的最大存储单位,类似于一个表格
行(row)/ 元组(tuple)/ 记录(record)
表中的一行记录,记录了一个表下对象的相关信息
列(column)/ 字段(field)/ 属性(attribute)
表中的每一列,代表实体的一个特征
关键约束
主键(Primary Key,PK)
能唯一识别表中某一行的属性(或组合)
特性:唯一性(不能存在相同的两个主键值),非空性(主键值不能为NULL)
外键(Foreign Key,FK)
表中用于关联另一张表的属性,其值要匹配另一张表的主键值
特性:可以为NULL(此时表示暂未关联其他表),但非NULL时必须关联其他表的主键
候选键(Candidate Key)
能唯一标识元组的属性(或组合),但未被选为主键的属性
主键与外键的关系:
外键所在的表称为\"从表\",被关联的表称为\"主表\"
关系运算(数据操作的基础)
选择(Selection)= 行过滤
从表中筛出满足条件的元组(行)
SELECT * FROM 学生表 WHERE 年龄 > 18
投影(Projection)= 列过滤
从表中选择部分属性(列)
SELECT 姓名,年龄 FROM 学生表
连接(Join)=表关联
根据两个表的共同语句,将它们的元组合并为一个新表
并(Union)
保留两个表的元组(需结构相同,自动去重)
交(Intersect)
保留两个表中共同的元组
差(Except)
保留表A有但表B没有的元组
范式(Normal Form,NF)
范式是关系模型中设计表结构的准则,目的是减少数据冗余,避免更新异常
第一范式(1NF)
所有属性值具有原子性(不可再分)
反例:“地址” 字段存储 “北京市海淀区 XX 路”(可拆分为 “省”“市”“区” 等,违反 1NF)
第二范式(2NF)
在满足1NF的前提下,非主键属性完全依赖于主键(不能只依赖主键的一部分)
反例:若 “学生选课表” 主键为(学号,课程号),但 “课程名” 只依赖 “课程号”(不依赖 “学号”),则违反 2NF
第三范式(3NF)
在满足2NF的前提下,非主键之间不能存在依赖关系
反例:“学生表” 中若有 “学院编号” 和 “学院名称”,且 “学院名称” 依赖 “学院编号”,则 “学院名称” 传递依赖于主键 “学号”,违反 3NF(需拆分出 “学院表”)