码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据库设计三范式


    目录

    数据库设计三范式

    1. 什么是数据库设计范式?

    2. 数据库设计范式共有3个

    3. 第一范式

    以上学生表满足第一范式吗?

    以下学生表则满足第一范式

    4. 第二范式

    4.1 分析以上的表是否满足第一范式?

    4.2 怎么修改则满足第一范式呢?

    4.3 经过修改之后,以上的表满足了第一范式。但是满足第二范式吗?

    4.4 产生部分依赖有什么缺点?

    4.5 为了让以上的表满足第二范式,你需要这样设计

    ​编辑4.6 多对多关系怎么设计?

    5. 第三范式

    5.1 分析以上表是否满足第一范式?

    5.2 分析以上表是否满足第二范式?

    5.3 分析以上表是否满足第三范式?

    5.4 那么应该怎么设计一对多呢?


    数据库设计三范式

    1. 什么是数据库设计范式?

    • 数据库表的设计依据。教你怎么进行数据库表的设计。

    2. 数据库设计范式共有3个

    • 第一范式:要求任何一张表必须要有主键,每一个字段原子性不可再分。
    • 第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖。
    • 第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖。

    声明:三范式是面试官经常问的,所以一定要熟记在心!

    设计数据库表的时候,按照以上的范式进行,可以避免表中数据的冗余,造成空间的浪费。

    3. 第一范式

    • 最核心,最重要的范式,所有表的设计都需要满足。
    • 任何一张表必须要有主键,并且每一个字段都是原子性不可再分。

    以上学生表满足第一范式吗?

    • 不满足,第一:没有主键。第二:联系方式可以分为邮箱地址和电话

    以下学生表则满足第一范式

    4. 第二范式

    • 建立在第一范式的基础之上,要求所有非主键字段必须完全依赖主键,不要产生部分依赖。

    这张表描述了学生和老师的关系:1个学生可能有多个老师,1个老师有多个学生。这是非常典型的:多对多关系!

    4.1 分析以上的表是否满足第一范式?

    • 该表中没有主键,所以不满足第一范式。

    4.2 怎么修改则满足第一范式呢?

    学生编号和教师编号这两个字段联合做主键,复合主键(PK: 学生编号+教师编号)

    4.3 经过修改之后,以上的表满足了第一范式。但是满足第二范式吗?

    • 不满足,“张三”依赖1001,“王老师”依赖001,显然产生了部分依赖。

    4.4 产生部分依赖有什么缺点?

    • 数据冗余了。空间浪费了。“张三”重复了,“王老师”重复了。

    4.5 为了让以上的表满足第二范式,你需要这样设计

    • 使用三张表来表示多对多的关系!!!!

    学生表

    教师表 

    学生教师关系表


    4.6 多对多关系怎么设计?

    • 背口诀:多对多,三张表,关系表两个外键!!!!!!!



    5. 第三范式

    • 第三范式建立在第二范式的基础之上,要求所有非主键字段必须直接依赖主键,不要产生传递依赖。

    •  以上表的设计是描述班级和学生的关系。很显然是1对多关系! 一个班级中有多个学生。

    5.1 分析以上表是否满足第一范式?

    • 满足第一范式,有主键。

    5.2 分析以上表是否满足第二范式?

    • 满足第二范式,因为主键不是复合主键,没有产生部分依赖。主键是单一主键。

    5.3 分析以上表是否满足第三范式?

    • 第三范式要求:不要产生传递依赖!
    • 一年一班依赖01,01依赖1001,产生了传递依赖。
    • 不符合第三范式的要求。产生了数据的冗余。

    5.4 那么应该怎么设计一对多呢?

    班级表:一

    学生表:多 

    • 背口诀:一对多,两张表,多的表加外键!!!!!!!!!!!!

  • 相关阅读:
    mysql 修改 COMMENT
    一、Unity环境安装
    LeetCode(力扣)78. 子集Python
    Java多线程4种拒绝策略
    经验之谈:AntD级联选择动态加载数据
    代码随想录打卡第六十三天|84.柱状图中最大的矩形
    usb设备一直连接异常
    canvas 签名组件封装
    java毕业设计社区团购系统Mybatis+系统+数据库+调试部署
    [附源码]计算机毕业设计JAVA疫情防控期间网上教学管理
  • 原文地址:https://blog.csdn.net/weixin_52385232/article/details/126124383
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号