首页 > 数据库 >mysql_三大范式

mysql_三大范式

时间:2023-06-11 16:12:31浏览次数:47  
标签:01 范式 mysql 房间 编号 类型 主键 三大

介绍

数据库的三大范式就是数据库的表应该如何设计,应该注意什么。

第一范式

要求每一张表都有一个主键,每一个字段都不可再分。

举例:

id username address
1 张三 中国,北京
2 李四 美国,洛杉矶
1 王五 日本,东京

问题:上面的这张表没有主键,因为第一条记录和第三条记录id重复,address可以再分,不是原子性。

修正如下:

id username country city
1 张三 中国 北京
2 李四 美国 洛杉矶
3 王五 日本 东京

注意:第一范式需要设计每张表时都要满足的,即要有主键,每个字段都具有原子性。

第二范式

在满足第一范式的基础上,非主键列要完全依赖于主键。有点抽象,看下面的例子。

酒店编号 房间类型编号 评价分数 房间类型
1 01 80 单人间
1 02 90 双人间
2 01 70 单人间

这张表中酒店编号和房间类型编号联合做主键,评价分数完全依赖于酒店编号和房间类型编号,可是房间类型只依赖于房间类型编号,这是部分依赖,不满足第二范式。

修正:

酒店房间类型评价分数表

酒店编号 房间类型编号 评价分数
1 01 80
1 02 90
2 01 70

房间类型表

房间类型编号 房间类型
01 单人间
02 双人间

第三范式

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

举例:

id 入住人姓名 房间类型编号 房间类型描述
01 张三 001 单人间
02 李四 002 双人间
03 王五 001 单人间

上面这张表中房间类型描述不直接依赖于id,而是通过依赖于房间类型编号这个非主键列而依赖于主键,属于传递依赖,不符合第三范式。

(房间类型描述->房间类型编号->id)

修正:

将一张表拆分为两张表

id 入住人姓名 房间类型编号
01 张三 001
02 李四 002
03 王五 001
房间类型编号 房间类型描述
001 单人间
002 双人间

如果这篇博客写得有问题,欢迎在评论区留言。

标签:01,范式,mysql,房间,编号,类型,主键,三大
From: https://www.cnblogs.com/malinyan/p/17473072.html

相关文章

  • mysql函数大全 整理
    对于针对字符串位置的操作,第一个位置被标记为1。ASCII(str)返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。mysql>selectASCII('2');  ->50mysql>selectASCII(2);  ->50mysql>selectASCII('dx');  ->100......
  • MySQL学习笔记-部署安装
    MySQL是一种常用的关系型数据库管理系统,可以用于存储和管理各种类型的数据。在本文中,我们将介绍如何在Linux操作系统上部署MySQL数据库,包括安装MySQL、创建数据库和用户、设置数据库安全性等。步骤如下:1.安装MySQL在Linux操作系统上安装MySQL通常需要使用包管理器,例如yum或apt-......
  • mysql GTID模式跳过错误GTID事务的正确方法
      最近遇到一个Mysql由于createtable时由于从库表表空间问题,从库sql重放进程执行sql失败,导致从库的sql应用进程挂掉。客户反馈,可以跳过失败的createtable事务,本博文展示mysql基于GITD模式跳过错误CTID事务的正确方法。  1.0明确错误原因root@mysqldb15:53:[(none)]>......
  • MySQL密码找回
    MySQL忘记密码如何找回以管理员身份打开cmd,关闭服务netstopmysql跳过密码授权登录mysqld--console--skip-grant-tables--shared-memory执行完这个命令后,进程会卡住,为正常情况。以管理员身份另外打开一个cmd进入mysql内置库,修改密码//依次输入以下命令mysqlu......
  • MySQL逻辑备份
    一、mysqldump1.mysqldump的导出--只导出存储过程【dump备份】mysqldump-uroot-p-n-t-d--skip-add-drop-table-R数据库名>文件名##其中,-d表示--no-data(Norowinformation),-n表示--no-create-db不导出建库语句,-t表示--no-create-info不导出建表语句,##......
  • 【已解决】MySQL连接错误 ERROR 1129 (00000): Host ” is blocked because of many c
     问题连接MySQL 报错 ERROR1129(00000):Host”isblockedbecauseofmanyconnectionerrors原因同一个IP在短时间内产生太多终端的数据库连接(超过mysql数据库max_connection_errors设置),导致被阻塞。在系统变量:max_connect_errors设置了允许中断的次数,超过了这个次数(或者......
  • MySQL数据库死锁问题
    参看:https://www.bilibili.com/video/BV1RT4y1R7bL/?spm_id_from=333.337.search-card.all.click&vd_source=46d50b5d646b50dcb2a208d3946b1598https://www.bilibili.com/video/BV1Sm4y1C7WX/?spm_id_from=333.337.search-card.all.click&vd_source=46d50b5d646b50dcb......
  • 基于php的外卖订餐网站(php+mysql)
    介绍一个基于php的外卖订餐网站,包括前端和后台。效果演示http://101.43.124.118:8001/admin源码地址https://github.com/geeeeeeeek/dingfanzu代码说明htaccessRewrite配置文件,需要放入到项目根目录configs.php需要配置数据库连接信息(主机、用户名、密码),系统常量,debug......
  • Mysql文章大汇总,一文全搞定!!!
    一次MySQL千万级大表的优化过程开发人员必备的9大MySQL索引和查询优化mysql性能优化之一【索引--基础】mysql性能优化一mysql性能优化二高级版MySQL优化方案常见mysql的慢查询优化方式MySQL性能优化之骨灰级,高阶神技!史上最全的MySQL高性能优化实战总结!Spring-boot+Mybatis+Maven......
  • mysql 进程初始化killed问题
    问题描述:[root@it01soft]#/mysql/mysql57/bin/mysqld--defaults-file=/etc/my.cnf--user=mysql--initialize-insecure--consoleKilled问题分析:1.查看错误日志,错误日志报错如下:[root@it01soft]#more/mysqldata/mysql_3306/log/mysql-error.log2023-06-09T19:49:59.796928......