数据库设计的三座金矿:三范式原则白话指南
创作时间:
作者:
@小白创作中心
数据库设计的三座金矿:三范式原则白话指南
引用
CSDN
1.
https://blog.csdn.net/zhu719224032/article/details/146143029
一、开篇:为什么你的数据库总在闹脾气?
最近在技术社群里看到个段子:程序员小张设计的用户表里同时存着用户地址和邮政编码,结果每次用户搬家他都要哭着改200多个字段。这其实就是典型的"数据库设计翻车现场"。今天我们就用最接地气的方式,聊聊数据库设计的三大黄金准则——三范式原则。
二、知识图谱:三范式全景路线图
三、庖丁解牛:三范式逐层拆解
3.1 第一范式(1NF):你的数据"掰"开了吗?
核心口诀:字段要像俄罗斯套娃,但只能拆到最小那个
常见翻车现场:
CREATE TABLE 用户信息 (
用户ID INT PRIMARY KEY,
联系方式 VARCHAR(200) -- 存着"电话:13800138000,邮箱:test@csdn.com"
);
改造方案:
CREATE TABLE 用户信息 (
用户ID INT PRIMARY KEY,
手机 VARCHAR(20),
邮箱 VARCHAR(50)
);
避坑指南:
- 字段值要像玻璃珠子,不能再拆分
- 禁止用逗号分隔的魔法字符串
- 每列保持单一数据类型
3.2 第二范式(2NF):主键的"完全占有欲"
核心口诀:不是主键亲生的字段,都要被逐出家门
典型问题表结构:
CREATE TABLE 订单明细 (
订单ID INT,
产品ID INT,
产品名称 VARCHAR(50),
单价 DECIMAL,
数量 INT,
PRIMARY KEY (订单ID, 产品ID)
);
这里产品名称只依赖产品ID,是典型的"部分依赖"
解决方案:
-- 订单主表
CREATE TABLE 订单 (
订单ID INT PRIMARY KEY,
下单时间 DATETIME
);
-- 产品表
CREATE TABLE 产品 (
产品ID INT PRIMARY KEY,
产品名称 VARCHAR(50),
单价 DECIMAL
);
-- 订单明细表
CREATE TABLE 订单明细 (
订单ID INT,
产品ID INT,
数量 INT,
PRIMARY KEY (订单ID, 产品ID),
FOREIGN KEY (订单ID) REFERENCES 订单(订单ID),
FOREIGN KEY (产品ID) REFERENCES 产品(产品ID)
);
3.3 第三范式(3NF):斩断依赖的"食物链"
核心口诀:不允许存在"主键->A->B"的依赖链条
问题案例:
CREATE TABLE 员工 (
员工ID INT PRIMARY KEY,
姓名 VARCHAR(20),
部门ID INT,
部门名称 VARCHAR(30),
部门经理 VARCHAR(20)
);
这里部门名称和部门经理都依赖部门ID,而部门ID又依赖员工ID
优化方案:
CREATE TABLE 员工 (
员工ID INT PRIMARY KEY,
姓名 VARCHAR(20),
部门ID INT,
FOREIGN KEY (部门ID) REFERENCES 部门(部门ID)
);
CREATE TABLE 部门 (
部门ID INT PRIMARY KEY,
部门名称 VARCHAR(30),
部门经理 VARCHAR(20)
);
四、实战进阶:什么时候该打破范式?
反范式化常见场景:
- 高频查询报表:用户行为统计表
- 读多写少场景:商品详情页缓存表
- 数据仓库建设:星型模型设计
平衡技巧:
- 80/20法则:满足前两个范式,第三范式酌情处理
- 读写分离:主库范式化,从库反范式
- 版本控制:记录schema变更历史
五、检验学习成果:三范式闯关挑战
- 判断以下表结构是否符合三范式:
CREATE TABLE 图书借阅 (
借阅ID INT PRIMARY KEY,
图书ISBN VARCHAR(20),
图书名称 VARCHAR(100),
读者ID INT,
读者院系 VARCHAR(50),
借阅日期 DATE
);
- 设计一个符合三范式的电商订单系统ER图
(答案可在评论区讨论)
六、避坑指南:新手的十二时辰
- 警惕过度设计:不是所有表都要三范式
- 注意性能代价:连接查询的成本
- 留好扩展空间:适度的冗余字段
- 版本迭代策略:先满足业务,再优化结构
七、总结:三范式的正确打开方式
三范式就像数据库设计的"宪法",但实际操作中要像《大明律》一样灵活运用。记住这三个关键数字:
- 1个核心:确保数据最小冗余
- 2种平衡:范式严格性与查询效率
- 3层验证:逐级检查依赖关系
热门推荐
一杯牛奶搞定减重:乳制品帮你健康瘦身!
应急演练的实战模拟
揭秘化学世界的“密码”:如何理解分子式?
如何进行有效的团队讨论
数据库如何同步优化
外资流入怎样进行准确查看?这种准确查看有哪些途径?
手抖不用慌,合理饮食来帮忙
新研究:用这种常见姿势量血压,读数会大幅偏高!导致误诊高血压
行业|强情节快节奏立足当下 《宿敌》带来谍战内容新表达
推拿、拔罐、刮痧后多久可以洗澡?一文详解注意事项
买房子要交哪些税?新房和二手房交税标准全解析
中国成人教育学历如何认证
为什么《无畏契约》有这么多女性玩家?
不只是恋爱,女性向游戏开始洗牌
如何测量液体的密度
身上有鲜红色的小血点很多
越来越黑暗宝藏地精的击杀技巧
舌头有裂纹,是大病前兆?真相其实是……
樱花:品种、生长周期与文化内涵
怎样有效提升水冷式冷水机的制冷效率,同时又实现能耗的降低?
如何确保公司请假制度公平合理?
在深圳坪山,优质教育在“家门口”绽放
汽车机油多少正常标尺
深入探讨指数趋势分析的实用技巧与方法
第76集团军某旅鼓励发扬军事民主畅通创新路径
口干舌燥一般是什么原因引起的
科学备孕:寻找最佳备孕时间
测量血压,两臂数值为何会“唱反调”丨科普时间
劳动仲裁去劳动局申请吗?一文详解申请地点、费用及北京仲裁时长
道医和中医到底哪里不同,这篇文章讲得最清楚