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

从0开始回顾MySQL --- 三范式与表设计

什么是数据库设计三范式

数据库表设计的原则。教你怎么设计数据库表有效,并且节省空间。

三范式

  1. 第一范式:任何一张表都应该有主键,每个字段是原子性的不能再分
    1. 以下表的设计不符合第一范式:无主键,并且联系方式可拆分。

image.png

  2. 应该这样设计:

image.png

  1. 第二范式:建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖
    1. 以下表存储了学生和老师的信息

image.png
虽然符合第一范式,但是违背了第二范式,学生姓名、老师姓名都产生了部分依赖。导致数据冗余。

  2. 以下这种设计方式就是符合第二范式的:

image.png

  1. 第三范式:建立在第二范式基础上的,非主键字段不能传递依赖于主键字段
    1. 以下设计方式就是违背第三范式的

image.png
以上因为产生了传递依赖,导致班级名称冗余。

  2. 以下这种方式就是符合第三范式的:

image.png

一对多怎么设计

口诀:一对多两张表,多的表加外键。
image.png
image.png

多对多怎么设计

多对多三张表,关系表添加外键。
image.png

一对一怎么设计

两种方案:

  1. 第一种:主键共享

image.png

  1. 第二种:外键唯一

image.png

最终的设计

最终以满足客户需求为原则,有的时候会拿空间换速度。

相关文章:

  • 腾讯云对象存储的在Java使用步骤介绍
  • Vue学习日记 Day7 —— json-server工具、基于VueCli自定义创建项目、postcss插件
  • C语言中volatile关键字的用法
  • 华为配置敏捷分布式SFN漫游实验
  • 【Golang】golang使用三方SDK操作容器指南
  • 爬虫(五)
  • 面向对象编程第二式:继承 (Java篇)
  • oppo前端开发一面
  • 24计算机考研调剂 | 重庆工商大学
  • Mysql中的engine
  • C++(3/13)
  • Linux:kubernetes(k8s)Deployment的操作(13)
  • Ubuntu 14.04:安装PaddlePaddle(Conda安装)
  • flask-sqlalchemy库
  • 【课程作业】基于Java的车辆租赁管理平台/租车系统
  • 【面试系列】之二:关于js原型
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Create React App 使用
  • C语言笔记(第一章:C语言编程)
  • Druid 在有赞的实践
  • Golang-长连接-状态推送
  • java 多线程基础, 我觉得还是有必要看看的
  • leetcode讲解--894. All Possible Full Binary Trees
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • oschina
  • Python学习笔记 字符串拼接
  • Vue UI框架库开发介绍
  • 百度地图API标注+时间轴组件
  • 大数据与云计算学习:数据分析(二)
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 聚簇索引和非聚簇索引
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 利用jquery编写加法运算验证码
  • 前端性能优化——回流与重绘
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 昨天1024程序员节,我故意写了个死循环~
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #if和#ifdef区别
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (二)c52学习之旅-简单了解单片机
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (论文阅读40-45)图像描述1
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三分钟)速览传统边缘检测算子
  • .bat批处理(一):@echo off
  • .gitignore文件_Git:.gitignore
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .Net 代码性能 - (1)