数据库三大范式 + 四大数据完整性, 企业建表必学!

数据库三大范式 + 四大数据完整性, 企业建表必学! 前言痛点引入很多零基础学 SQL、做开发和数据分析的朋友只会抄别人的表结构自己不会设计表。 工作中自己建表经常遇到这些问题数据重复冗余严重改一条数据要改好多地方容易数据不一致表结构混乱字段乱放、重复建字段后期维护巨难插入、修改数据出现s 非法值、乱码、关联数据错乱面试被问三大范式、四大数据完整性完全答不出来不懂企业建表规范做项目设计表全凭感觉不符合职场标准。其实企业里正规建表都遵循两套硬性标准三大范式控制数据冗余、四大数据完整性保证数据合法准确。 本篇用大白话 通俗举例不讲晦涩理论只讲职场能用、面试必考的核心内容零基础也能一次吃透。分层知识点精讲一、什么是数据库范式范式是关系型数据库表结构设计的规范标准级别越高表设计越合理、冗余越少、数据越规整。 职场常用只需要掌握前三范式1NF 第一范式、2NF 第二范式、3NF 第三范式企业建表默认满足3NF。核心作用 减少数据冗余、避免插入异常、更新异常、删除异常让表结构易维护、易关联、易扩展。二、三大范式逐层精讲1. 第一范式 1NF原子性最基础底线核心规则字段具有原子性不可再拆分一个单元格只能存单一值不能放多个数据。禁止一个字段里放多个值比如用逗号分隔存多个手机号、多个爱好所有字段必须是不可拆分的最小单元所有企业表必须强制满足 1NF是建表最低门槛2. 第二范式 2NF完全依赖消除部分依赖核心规则 在满足 1NF 的基础上所有非主键字段必须完全依赖于整张主键不能只依赖主键的一部分。 适用场景复合主键表、多字段联合做主键的业务表。 作用拆分冗余字段避免部分依赖带来的数据重复。3. 第三范式 3NF传递依赖企业标准核心规则 在满足 2NF 基础上非主键字段之间不能存在传递依赖不能通过其他字段推导出来。 简单说一张表只干一件事不存放其他业务的冗余字段。用户表只存用户信息不要冗余存所属部门名称部门名称放到部门表通过外键关联查询即可3NF 是企业项目建表默认标准日常开发、设计表都按 3NF 来三、四大数据完整性职场建表核心约束1. 实体完整性规则主键约束主键不能为空、不能重复一张表必须有主键唯一标识每一条记录保证每条数据都是独立、唯一的实体2. 域完整性规则限制字段本身合法有效包含数据类型、长度、非空、默认值、枚举限制等。 作用限制单元格只能存规定类型的数据防止乱填非法值。3. 引用完整性参照完整性规则外键约束子表外键值必须在主表主键中存在不能随便删除主表被关联的数据保证多表之间关联关系不乱、数据不脱节4. 自定义完整性规则根据业务自己定义的校验规则 常用CHECK 约束、触发器、业务逻辑判断举例年龄必须大于 0、成绩 0~100、性别只能男 / 女等按业务自定义规则限制。通俗类比 实例表格通俗类比三大范式好比档案归档规范规定怎么分类、怎么拆分档案不让信息重复乱放四大完整性好比档案录入规矩规定编号不能重复、信息不能为空、关联档案不能乱填、内容要符合业务规则。反例不满足 1NF 的错误表结构表格id姓名联系方式1张三13800,13900问题联系方式一个字段放两个手机号不满足原子性违反 1NF。正例满足 1NF 拆分后表格id姓名手机号1张三138002张三139003NF 规范设计拆分表、消除冗余错误设计违反 3NF冗余订单表id、用户名、部门名、订单金额规范设计满足 3NF分表关联用户表用户 id、用户名、部门 id部门表部门 id、部门名订单表订单 id、用户 id、订单金额 通过外键关联查名称不冗余存放。SQL 代码演示1. 实体完整性主键设置sql-- 主键约束保证唯一非空实体完整性 CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL );2. 域完整性非空 默认值 数据类型sql-- 域完整性限制类型、非空、默认值 CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL, age INT DEFAULT 18 );3. 引用完整性外键关联sql-- 外键实现引用完整性 CREATE TABLE order_info ( order_id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, FOREIGN KEY (user_id) REFERENCES user(id) );4. 自定义完整性CHECK 约束sql-- 自定义完整性年龄必须大于0 CREATE TABLE person ( id INT PRIMARY KEY AUTO_INCREMENT, age INT CHECK (age 0) );新手易错 / 职场避坑点❌ 一个字段存多个值用逗号、斜线分隔违反1NF✅ 正解拆分成多行或者拆分成多个字段保证原子不可拆分。❌ 为了省事一张表塞所有字段大量冗余违反3NF✅ 正解按业务拆分表用外键关联遵循一表一事原则。❌ 不设主键随便建表违反实体完整性✅ 正解企业所有业务表必须设置主键。❌ 随便填外键不存在的值、随意删主表数据破坏引用完整性✅ 正解关联数据要合法主表有关联数据不能随意删除。❌ 忽略业务规则不做范围限制出现年龄负数、成绩超范围 ✅ 正解用 CHECK、业务代码双重保证自定义完整性。全文核心小结1NF字段原子性不可拆分是建表最低强制要求2NF消除部分函数依赖针对复合主键设计3NF消除传递依赖一表只做一件事企业标准建表规范四大完整性实体完整性 → 主键域完整性 → 类型、非空、默认值引用完整性 → 外键关联自定义完整性 → CHECK、业务规则学完可以看懂企业现有表结构也能独立按规范设计业务表面试必背、工作必用。思考题思考题 1第一范式 1NF 的核心要求是什么答案 字段具备原子性每个字段数据不可再拆分一个单元格只能存储单一独立数据不能存放多个拼接值。思考题 2第三范式 3NF 的设计原则是什么有什么好处答案 原则在满足 2NF 基础上消除非主键字段的传递依赖一张表只负责一个业务实体不冗余存放其他业务字段。 好处减少数据冗余、避免更新删除异常、表结构更清晰易维护。思考题 3四大数据完整性分别是什么各自靠什么约束实现答案实体完整性主键约束域完整性数据类型、非空、默认值等引用完整性外键约束自定义完整性CHECK 约束、触发器、业务逻辑校验