6段SQL语句,轻松掌握4种数据库范式

软考数据库中级-复习笔记

1. 数据库范式

  • 第一范式满足更多要求的称为第二范式,其余范式依次类推;

  • 数据库事务的四大特征:原子性、一致性、隔离性、持久性;

  • 一般来说数据库满足第三范式就可以了。

1.1第一范式(1NF)

  • 在关系模型中,所有的域都是原子性的,数据库每一列都是不可分割的原子数据项,而不能是集合、数组、记录等非原子数据项。

  • 不合格示例

sql 复制代码
CREATE TABLE students (
id INT AUTO_INCREMENT,
name_and_age VARCHAR(100) NOT NULL,
PRIMARY KEY (id),
);
  • 合格示例
sql 复制代码
CREATE TABLE students (
id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
age INT NOT NULL,
PRIMARY KEY (id)
);

1.2 第二范式(2NF)

  • 在1NF基础上,非码属性必须依赖于候选码(主码)

    • 科普:主码:主键;外码:外键
  • 例如在学生表中,身份证号可以作为每个学生的区分,该身份证号就可以被选作主键;

  • 在学生成绩表格中,未添加身份证号,而学生姓名可能重复,无法区分出实体时,可以添加ID等不重复的编号实现区分,被添加的ID作为主键;

  • 简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

  • 不合格示例

sql 复制代码
CREATE TABLE students (
name VARCHAR(100) NOT NULL, //只用姓名存储学生信息,遇到姓名重复的学生,可能无法区分
);
  • 合格示例
sql 复制代码
CREATE TABLE students (
name VARCHAR(100) NOT NULL,
card_id INT NOT NULL,  // 身份证号唯一,可以作为主键使用
PRIMARY KEY (card_id)
);

1.3 第三范式(3NF)

  • 根据范式层层递进,所以3NF是全部满足2NF的;

  • 在2NF基础上,增加了任何非主属性不依赖于其他非主属性;

  • 简单来说:一个表中含有外键的,则不能含有这个外键所在表格中的其他属性;

  • 错误示例

sql 复制代码
CREATE TABLE students (
name VARCHAR(100) NOT NULL,
card_id INT NOT NULL ,
PRIMARY KEY(card_id),
);
CREATE TABLE class(
class_name VARCHAR(100) NOT NULL,
students.card_id,
students.name //班级表中除了学生身份证号还有姓名
);
  • 合格示例
sql 复制代码
CREATE TABLE students (
name VARCHAR(100) NOT NULL,
card_id INT NOT NULL PRIMARY KEY,
);
CREATE TABLE class(
class_name VARCHAR(100) NOT NULL,
FOREIGN KEY (card_id) REFERENCES student(card_id),//班级表中只有学生身份证号这一个外键
//st_id int(50) references student(id),//这种方式也可以添加
);

1.4 反范式

  • 反范式的优点是明显的,它避免了大量的数据冗余,节省了存储空间,保持了数据的一致性。
  • 使用场景:连表查询数据量特别庞大时,连表查询大大降低了系统性能,这时候反范式的数据库设计,就提高了查询效率。(对于没采用反范式的离线数据分析,也有基于反范式思路,新建中间表宽表然后再做数据分析的)
相关推荐
AllData公司负责人3 分钟前
AI大模型数据开发底座系列说明书,AllData集成Chat2DB开源项目建设AI 数据库分析底座,涵盖AI 洞察/对话SQL/智能视图!
数据库·人工智能·sql·开源·ai 洞察·对话sql
xixingzhe233 分钟前
数据库备份的分类与特点
数据库
时间的拾荒人4 小时前
Redis 主从复制详解:配置实操 + 原理机制
数据库·redis·面试
隔窗听雨眠4 小时前
MySQL三表JOIN执行内核与优化器决策机制
数据库·mysql·sql优化
Decay__5 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
笃行3507 小时前
【金仓数据库产品体验官】订单增量同步实战:MERGE、OUTPUT 与 IDENTITY 的兼容验证
数据库
星恒随风10 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
无奈笑天下11 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
xiaoye-duck12 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
AllData公司负责人13 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析