mysql笔记:表设计原则

mysql笔记:表设计原则

表对应了一个实体
表与表之间的关系:
一对一
一对多
多对多

一对一关系

例如:用户 user和身份信息 info

子表的外键关联了父表的子健(类型必须一样)
在这里插入图片描述

一对多关系

以电商系统为例子

用户-商品:没有关系
用户-订单:一对多
商品-订单:多对多关系
一对多:
在这里插入图片描述
增加外键

多对多

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关系型数据库范式设计

范式设计优点:

  1. 减少冗余
  2. 消除异常(插入异常,更新异常,删除异常)
  3. 让数据组织更加和谐
    数据库范式绝对不是越高越好,范式越高意味着表越多,多表联合查询的机率就越大。

第一范式(1NF)

每一列都保持原子特性
这个范式主要还是让我们去看看表中不要存在可以被分割的列,同时表的列不能重复。当然,在实际操作过程中,我们如果录入相同的列,系统也是会报错的。
在这里插入图片描述上图的表就是把地址字段分了更详细的city country 和street三个字段。不符合第一范式的不能称为关系型数据库,属于key-value
在这里插入图片描述
例如这个就不符合第一范式
在这里插入图片描述

第二范式

属性完全依赖于主键-主要针对联合主键
例如:
在这里插入图片描述
这样学分会存在冗余的问题:
比如多个人选了同一门课程
这时候如果要更新课程学分,就要对多个记录进行更新
在这里插入图片描述
解决方法就是进行表的拆分,如上图所示,将部门和地址拆分成两个表

第三范式

属性不依赖于其它非主属性
解决方法:中间表
jobdescription依赖于非主属性job,进行拆分
在这里插入图片描述

BC范式

每个表中只有一个候选键
在这里插入图片描述

第四范式(4NF)

消除表中的多值依赖
在这里插入图片描述
存在的问题:

  1. 查询的时候需要连接多个表,增加了SQL查询的复杂度
  2. 查询的时候需要连接多个表,降低了数据库查询的性能
    因此,并不是范式越高越好,要视实际情况而定,第三范式已经很大程度上减少了冗余,并且基本预防了插入异常,更新异常和删除异常

相关推荐

  1. MySQL 设计

    2024-02-12 15:10:01       39 阅读
  2. mysql订单设计

    2024-02-12 15:10:01       18 阅读
  3. Mysql 设计范式

    2024-02-12 15:10:01       18 阅读
  4. MySQL-多设计

    2024-02-12 15:10:01       12 阅读
  5. 索引的设计原则MySQL

    2024-02-12 15:10:01       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-12 15:10:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-12 15:10:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-12 15:10:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-12 15:10:01       20 阅读

热门阅读

  1. python udp端口范围映射转发

    2024-02-12 15:10:01       30 阅读
  2. 课时21:内置变量_脚本相关

    2024-02-12 15:10:01       27 阅读
  3. SQl 注入 - 利用报错函数updatexml及extracevalue

    2024-02-12 15:10:01       38 阅读
  4. Jwt生成token以及解析token

    2024-02-12 15:10:01       29 阅读
  5. 多重背包问题 Ⅰ&Ⅱ &Ⅲ

    2024-02-12 15:10:01       32 阅读
  6. AutoSAR(基础入门篇)8.2-IO相关驱动(一)

    2024-02-12 15:10:01       32 阅读
  7. leetcode-Nim 游戏

    2024-02-12 15:10:01       39 阅读
  8. 机器学习简介

    2024-02-12 15:10:01       30 阅读