关系型数据库(RDBMS)核心知识:CURD 操作、约束与三大范式

在关系型数据库(RDBMS)的日常使用中,数据操作、约束机制和规范化设计是支撑数据有效性与完整性的三大支柱。本文将深入解析 CURD 操作的实现方式、常见约束的作用原理,以及数据库设计的三大范式,帮助开发者构建健壮、高效的数据库系统。

目录

一、数据操作:CURD 的实现与应用

1.1 创建(Create):插入数据​

1.2 读取(Read):查询数据

1.3 更新(Update):修改数据

1.4 删除(Delete):移除数据

二、约束:保障数据完整性的核心机制​

2.1 主键约束(PRIMARY KEY)

2.2 外键约束(FOREIGN KEY)

2.3 唯一约束(UNIQUE)

2.4 非空约束(NOT NULL)

2.5 检查约束(CHECK)

2.6 默认值约束(DEFAULT)

三、三大范式:数据库设计的规范化准则​

3.1 第一范式(1NF):确保字段原子性​

3.2 第二范式(2NF):消除部分依赖​

3.3 第三范式(3NF):消除传递依赖​

总结​


一、数据操作:CURD 的实现与应用

        CURD 是创建(Create)、读取(Read)、更新(Update)、删除(Delete)四种基本数据操作的缩写,是与数据库交互的核心动作,均通过 SQL 语句实现。

1.1 创建(Create):插入数据​

INSERT语句用于向表中添加新记录,语法分为全字段插入和指定字段插入两种:

全字段插入:需按表定义的字段顺序填写所有值,例如向users表插入一条完整记录:

INSERT INTO users VALUES (0, '张三',101);

指定字段插入:可灵活选择需要赋值的字段,未指定的字段将使用默认值(如NULL):

INSERT INTO users (id, name, teacher_id) VALUES (2, '李四', 101);

批量插入:通过一条语句插入多条记录,减少与数据库的交互次数:

INSERT INTO student (id, name, teacher_id) VALUES (7, '李四', 101),(8, 'ww', 102);

1.2 读取(Read):查询数据

SELECT语句用于从表中提取数据,是 SQL 中最灵活的操作,支持多条件筛选、排序、分组等:

基础查询:查询表中所有字段或指定字段

-- 查询所有字段​
SELECT * FROM student;​
-- 查询指定字段​
-- SELECT name FROM student;

条件查询:使用WHERE子句过滤数据

-- 查询id大于3的学生
SELECT * FROM student WHERE id > 3;

排序与分页:ORDER BY用于排序,LIMIT用于限制返回条数(分页常用)

-- 按id降序排列,取前3条​
SELECT * FROM student ORDER BY id DESC LIMIT 3;

1.3 更新(Update):修改数据

UPDATE语句用于修改表中已有记录,必须配合WHERE子句使用(否则会更新全表数据):

-- 将ID为7的学生名字改为小明
UPDATE student SET name = "小明" WHERE id = 7;

1.4 删除(Delete):移除数据

-- 删除ID为102的学生
DELETE FROM student WHERE id = 102;

注意:DELETE仅删除数据,表结构保留;若需清空表并重置自增 ID,可使用TRUNCATE TABLE users;(速度更快,但无法回滚)。

二、约束:保障数据完整性的核心机制​

        约束(Constraint)是数据库对数据的规则限制,用于防止无效或不一致的数据进入表中,确保数据的准确性和可靠性。常见约束包括以下 6 种:

2.1 主键约束(PRIMARY KEY)

作用:唯一标识表中的每条记录,确保记录唯一性,且不允许NULL值。

特性:一个表只能有一个主键,可由单个字段或多个字段组合(复合主键)构成。

示例:

CREATE TABLE users (​

id INT PRIMARY KEY, -- 主键约束​

name VARCHAR(50)​

);

2.2 外键约束(FOREIGN KEY)

作用:建立两个表之间的关联关系,确保从表的记录在主表中存在,维护数据的参照完整性。

示例:student表的teacher_id关联teacher表的id,确保学生必须属于已存在的:

CREATE TABLE `student` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `teacher_id` int NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_teacher_id` (`teacher_id`),
  CONSTRAINT `fk_teacher_id` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

2.3 唯一约束(UNIQUE)

作用:确保字段值唯一(允许NULL,但NULL只允许出现一次),与主键的区别是一个表可有多个唯一约束。

示例:确保用户邮箱不重复:

CREATE TABLE users (

id INT PRIMARY KEY,

email VARCHAR(100) UNIQUE -- 唯一约束

);

2.4 非空约束(NOT NULL)

作用:限制字段值不能为NULL,强制必须输入数据。

示例:用户姓名不能为空:

CREATE TABLE users (

id INT PRIMARY KEY,

name VARCHAR(50) NOT NULL -- 非空约束

);

2.5 检查约束(CHECK)

作用:限制字段值必须满足指定条件(如范围、格式等)。

示例:确保年龄为正数:

CREATE TABLE users (

id INT PRIMARY KEY,

age INT CHECK (age > 0) -- 检查约束

);

2.6 默认值约束(DEFAULT)

作用:当字段未输入值时,自动使用预设的默认值。

示例:用户状态默认为 “正常”:

CREATE TABLE users (

id INT PRIMARY KEY,

status VARCHAR(20) DEFAULT '正常' -- 默认值约束

);

三、三大范式:数据库设计的规范化准则​

数据库规范化(Normalization)是通过遵循范式(Normal Form)减少数据冗余和异常(插入、更新、删除异常)的过程。三大范式是设计关系型数据库的基础准则。​

3.1 第一范式(1NF):确保字段原子性​

  • 定义:表中所有字段的值都是不可再分的原子值,即每个字段只能存储单一信息。​

  • 反例:在user_info表中用 “地址” 字段存储 “省 - 市 - 区”(如 “广东省 - 深圳市 - 南山区”),该字段可拆分为 “省份”“城市”“区” 三个原子字段。​

  • 作用:避免同一字段存储多类信息导致的查询和更新混乱。​

3.2 第二范式(2NF):消除部分依赖​

  • 前提:满足第一范式。​

  • 定义:表中非主键字段必须完全依赖于主键(不能仅依赖主键的一部分),适用于复合主键的表。​

  • 反例:在student_course表(复合主键为student_id+course_id)中,若包含 “学生姓名” 字段,“学生姓名” 仅依赖student_id(主键的一部分),违反 2NF。​

  • 解决:拆分表,将 “学生姓名” 移至students表(主键为student_id),student_course表仅保留与复合主键完全相关的字段(如 “成绩”)。​

3.3 第三范式(3NF):消除传递依赖​

  • 前提:满足第二范式。​

  • 定义:表中非主键字段不能依赖于其他非主键字段(即不存在传递依赖)。​

  • 反例:在orders表(主键order_id)中包含 “用户姓名” 字段,而 “用户姓名” 依赖于user_id(非主键字段),user_id又依赖于order_id,形成传递依赖。​

  • 解决:拆分表,orders表保留user_id,“用户姓名” 存储在users表中,通过user_id关联查询,避免数据冗余(如同一用户的所有订单无需重复存储姓名)。​

范式的平衡:反规范化的必要性​

  • 过度规范化可能导致表数量激增,关联查询复杂,性能下降。实际设计中,可根据业务需求适当 “反规范化”(如冗余部分字段)提升查询效率(例如在订单表中冗余 “商品名称”,避免频繁关联商品表)。​

总结​

        CURD 操作是与数据库交互的基础,约束机制保障了数据的完整性,三大范式则为合理设计表结构提供了准则。在实际开发中,需结合业务场景灵活运用这些知识:既通过约束和范式确保数据可靠,又通过适度反规范化优化性能,最终构建高效、可维护的关系型数据库系统。​

若需进一步深入,可学习更高阶的范式(如 BCNF、4NF)或数据库性能优化技巧(索引设计、查询优化等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值