Mysql:范式
概念
范式,指的是数据库表和字段设计,要遵循的规范。
范式类型
范式分为:第一范式,第二范式,第三范式,巴斯范式,第四范式,第五范式
越往后范式越高,数据库结构设计冗余度,合理性越好。但是实际大部分开发中,用的最多还是第二范式和第三范式
基本名词
超键:可以理解为【候选键】或 【候选键 + 其他字段】或 【非唯一字段 + 非唯一字段】,只要字段组成能构成唯一标识的,就是超键
候选键:具有唯一标识的【最小组成字段】。比如用户表的【用户编码】、【身份证】,成绩表的【学号 + 课程号】都是
主键:主键是从超键中确定下来要当做该行数据的唯一标识的键。比如用户表,可以用【用户编码】或【用户编码 + 年龄】作为主键
第一范式
- 字段必须具有原子性。以用户表为例:
反例:
用户编码 | 姓名 | 职业 |
---|---|---|
001 | 张三 | 男法师 |
正例:
用户编码 | 姓名 | 职业 | 性别 |
---|---|---|---|
001 | 张三 | 法师 | 男 |
第二范式
- 所有非主键字段,必须完全依赖于主键,不能只依赖主键的一部分。这个可能有点官方,说简单点,一行数据非主键字段,都可以通过主键来找到它。
以成绩表为例子,有(学号,课程号,成绩)。
反例:
以【学号】或者【课程号】作为主键,是找不到学生哪门课程唯一的成绩的
正例:
以【学号 + 课程号】作为主键,是可以找到哪个学生哪门课程的具体成绩
第三范式
- 其他非主键字段,必须直接依赖主键,不能依赖其他非主键字段。可能说得有点懵,还是以员工表和部门表举例。
反例:
员工表:(员工编码,员工姓名,部门编码,部门名称)
部门表:(部门编码,部门名称,部门简介)
错在部门名称不应该出现在员工表里
正例:
员工表:(员工编码,员工姓名,部门编码)
部门表:(部门编码,部门名称,部门简介)
注:虽然反例不符合第三范式,但实际开发中为了性能而经常这样做的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2020-05-31 springmvc-validation校验