当前位置: 首页 > backend >正文

MySQL基础关键_010_数据库设计三范式

目  录

一、概述

二、三范式

1.第一范式(必须遵循)

2.第二范式

3.第三范式

 三、三范式设计

1.一对多

2.多对多

3.一对一

(1)主键共享

(2)外键唯一


一、概述

  1. 数据库设计三范式就是数据库表的设计原则,帮助有效、节省空间的设计表;
  2. 但是最终应该考虑实际需求,可能会以空间换取时间,不一定完全遵循三范式设计原则。

二、三范式

1.第一范式(必须遵循)

  1. 任何一张表都应该有主键
  2. 每个字段是原子性的,不可再分

2.第二范式

  1. 建立在第一范式基础之上
  2. 所有非主键字段完全依赖主键,不能产生部分依赖。 

3.第三范式

  1. 建立在第二范式基础之上
  2. 所有非主键字段不能传递依赖于主键字段

 三、三范式设计

1.一对多

  1. 方案:一对多,两张表,多的表,加外键
  2. 实例:表 3.1 与 表 3.2 是一对多关系,所以在 表 3.2 中添加外键。

表 3.1 schools 表

id(primary key)name
1山河四省实验中学
2山西省直属第二中学校
3山东省直属第三中学校
4河南省直属第四中学校
5河北省直属第五中学校

表 3.2 teachers 表

id(primary key)

nameageschool_id(foreign key)
1101王明232
1102邱钰红223
1103宋刚185
1104李志强171
1105胡建国194

2.多对多

  1. 方案:多对多,三张表,关系表,加外键
  2. 实例:表 3.3 与 表 3.4 是多对多关系,所以新增关系表(表 3.5),在表 3.5 中添加一个主键,两个外键。

表 3.3 students 表

id(primary key)nameage
20251613001赵东21
20251613002韩弘毅23
20251613003张冬雪22
20251613004郭芸21
20251613005陆洋19

表 3.4 courses 表

id(primary key)name
1001语文
1002数学
1003英语
1004物理
1005化学

表 3.5 student_course 表

id(primary key)

student_id(foreign key)course_id(foreign key)
1202516130011001
2202516130011005
3202516130021002
4202516130021003
5202516130031001
6202516130031004
7202516130041002
8202516130041005
9202516130051004
10202516130051005

3.一对一

  1. 方案:
    1. 主键共享
    2. 外键唯一

(1)主键共享

        实例:婚姻表。表 3.6 与 表 3.7 是一对一关系,所以在表 3.7 中 id 既是主键,又是外键。

表 3.6 men 表

idname
1张三
2李四
3王五

表 3.7 women 表

id(primary key + foreign key)name
2马六
1冯七
3赵八

(2)外键唯一

        实例:婚姻表。男性表与 表 3.6 相同,保持不变。对女性表进行修改,新增一列设置外键约束,保证对应 表 3.6 独一无二。

表 3.8 外键唯一的 women 表

id(primary key)nameman_id(foreign key + unique)
1马六2
2冯七1
3赵八3
http://www.xdnf.cn/news/4485.html

相关文章:

  • OC语言学习——面向对象(下)
  • 在 R 语言中,data$Age 是一种常见的语法结构
  • taro的学习记录
  • Leetcode 刷题记录 09 —— 链表第三弹
  • 通义读光系列文字检测+识别模型端到端OCR应用
  • 无网络环境下配置并运行 word2vec复现.py
  • tmpfs和普通文件系统相比有哪些优缺点
  • CentOS 安装 Zellij 终端复用器教程
  • Android 移动应用开发:点击按钮打开电话拨号界面
  • Object.defineProperty()
  • LC滤波电路使用TSMI一体成型贴片电感的好处
  • Python初学者笔记第十一期 -- (字符串编程练习题)
  • k8s高可用集群,自动化更新证书脚本
  • 2025-05-07 Unity 网络基础8——UDP同步异步通信
  • 111、二叉树的最小深度
  • 信息革命对经济、货币体系及权力结构的颠覆性影响
  • 数据结构——排序(万字解说)初阶数据结构完
  • 【Python爬虫电商数据采集+数据分析】采集电商平台数据信息,并做可视化演示
  • 【C/C++】虚函数
  • 某大型交通规划设计院转型实践:数智化破局复杂工程项目管理,实现高效人力资源一体化管理
  • 华为设备链路聚合实验:网络工程实战指南
  • 【LeetCode】高频 SQL 50题 题解
  • C语言编程--递归程序--Hanoi塔
  • 企业智能化第一步:用「Deepseek+自动化」打造企业资源管理的智能中枢
  • MEGA3:分子进化遗传学分析和序列比对集成软件
  • 检测内存条好坏有工具,推荐几款内存检测工具
  • github+ Picgo+typora
  • OpenCV提取图像中的暗斑/亮斑
  • IvorySQL 再次走进北京大学研究生开源公选课
  • onenet连接微信小程序(mqtt协议)