三天学会MySQL(十)数据库范式与表关系

news2024/9/25 3:21:37

目录

一.范式

1.简介

2.第一范式

3.第二范式

4.第四范式

5.范式总结

二.表关系

1.简介

2.一对多关系

3.一对一关系

4.多对多关系


一.范式

1.简介

什么是范式( NF = NormalForm
范式是符合某一种设计要求的总结。
在数据库中表的设计,必须保证其合理性
数据库表的设计关系整个系统的架构,关系到后续的开发效率和运行效率。
如何设计合理的数据库表
  • 结构合理
  • 冗余数据少
  • 尽量避免插入删除修改异常
  • 遵循一定的规则,在关系型数据库中这种规则就称为范式
关系型数据库有六种常见范式:
  • 第一范式(1NF
  • 第二范式(2NF
  • 第三范式(3NF
  • 巴斯-科德范式(BCNF
  • 第四范式(4NF
  • 第五范式(5NF
各个范式是依次嵌套包含的:
在第一范式的基础上进一步满足更多规范要求的称为第二范式( 2NF ),其余范式以此类推。

范式越高,设计质量越高,在现实设计中也越难实现一般数据库设计,达到 第三范式 就足够了。
数据库范式中的概念
元组:可以理解为一张表中的每条记录,也就是每一行数据。
属性:可以看作是 表的一列
  • 主属性:
    在一个关系中,如一个属性是构成某一个候选关键字的属性集中的一个属性,则称它为主属性。例如:在关系——学生(学号,姓名,年龄,性别,班级)中,主属性是学号,那么其他的姓名年龄性别班级都可以称为非主属性。
  • 非主属性:
    不包含在候选码中的属性称为非主属性,相对于主属性来定义的。

2.第一范式

  • 最基本的范式,是其他范式的基础
  • 数据库表每列都是不可分割的基本数据项,同一列中不能有多个值,确保每列保持原子性

 下面的表院系信息列不具备原子性,因为还可以再分割。

根据第一范式设计表
第一范式存在的问题
数据冗余

插入数据异常 (例如成立一个新的系,但是这个系还没开始招生)

 修改数据复杂

删除异常

3.第二范式

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关 (主要针对联合主键而言)。也就是说在一个数据库表中,一个表
中只能保存一种数据,不可以把多种数据保存在同一张数据库表 中。

根据第二范式设计表 

第二范式存在问题
插入异常
删除异常

4.第三范式

  • 必须满足第二范式
  • 确保数据表中的每一列数据都和主键直接相关,而不能间接相关

存在问题的表:第二个表通过学号可以唯一表示,但是系名,系主任和学生姓名也是间接相关的关系。

根据第三范式设计表
符合 3NF 要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。 (从第一范式看过来,可以看到范式等级越高,表越多)

5.范式总结

数据库设计范式 优点
  • 结构合理
  • 冗余较小
  • 尽量避免插入删除修改异常
数据库设计范式 缺点
  • 性能降低,多表查询比单表查询速度慢
在实际设计中,要整体遵循范式理论
如果在某些特定的情况下还死死遵循范式也是不可取的, 因为可能降低数据库的效率,此时可以适当增加冗余而提高性能。

第一范式( 1NF ):字段不能再分
第二范式( 2NF ):不存在部分依赖
第三范式( 3NF ):不存在间接依赖
使用范式可以减少冗余,但是会降低性能。
特定表的的设计可以违反第三范式,增加冗余提高性能。

二.表关系

1.简介

设计关系数据库的一个重要部分是将数据元素划分为相关的表,我们可以根据数据本身的关联性,将不同表之间的数据聚合在一起。
 
注意:
无论在表与表之间建立了什么样的关系,决定数据之间是否有关系的不是表,而是数据本身。
表与表的关系类型
表与表之存在三种关系( relation ),即一对一,一对多,多对多关系。
 
一对一 one-to-one ):一种对象与另一种对象是一一对应关系,比如一个学生只能在一个班级里。
一对多 one-to-many ): 一种对象可以属于另一种对象的多个实例,比如一个班级里有很多学生。
多对多 many-to-many ):两种对象彼此都是 " 一对多 " 关系,比如一个歌单里包含多首歌,同时一首歌可以属于多个歌单。

2.一对多关系

一种对象可以属于另一种对象的多个实例。

 

一对多关系是建立在两张表之间的关系。一个表中的一条数据可以对应另一个表中的多条数据。
可以添加外键约束保证数据的参照完整性,外键永远在多方。外键允许重复,允许含有空值。
注意:
如果添加的外键约束,那么删除数据时,一定是先删除有外键一方的数据。

3.一对一关系

一种对象与另一种对象是一一对应关系。

一对一关系是建立在一对多的基础之上,一个表中的一条数据只能对应另一个表中的一条数据。
可以添加外键约束保证数据的参照完整性,外键可以在任何一方,需要让外键具备唯一约束。
注意:
如果添加的外键约束,那么删除数据时,一定是先删除有外键一方的数据。

4.多对多关系

两种对象彼此都是"一对多"关系。

需要建立一个中间表,中间表里建立两个列,然后需要用这两个列作为这个表的联合主键,然后每个列在作为外键参照各自的表的主 键。
注意:
存数据:先两侧,再中间表。
删数据:先中间表(即有外键的表),再两侧。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1439148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

休斯顿NASA太空机器人进入最后测试阶段,或可模拟人类执行外星任务!

美国宇航局开发研制的太空智能机器人目前正在德州休斯顿的约翰逊航天中心接受最后的运行测试,距离太空智能化时代又要更进一步了! NASA表示,日前在德州休斯顿附近的约翰逊航天中心进行测试的机器人名为Valkyrie,是以北欧神话中的一…

Pandas文本数据处理大全:类型判断、空白字符处理、拆分与连接【第67篇—python:文本数据】

文章目录 Pandas文本数据处理大全:类型判断、空白字符处理、拆分与连接1. 判断文本数据类型2. 去除空白字符3. 文本数据拆分4. 文本数据连接5. 文本数据替换6. 文本数据匹配与提取7. 文本数据的大小写转换8. 文本数据的长度计算9. 文本数据的排序10. 文本数据的分组…

APIfox自动化编排场景(二)

测试流程控制条件 你可以在测试场景中新增流程控制条件(循环、判断、等待、分组)等。进一步满足了更复杂的测试场景/流程配置的使用,最终借助自动化测试功能解决复杂场景的测试工作。 分组​ 当测试流程中多个步骤存在相关联关系时&#xf…

设计模式理解:单例模式+工厂模式+建设者模式+原型模式

迪米特法则:Law of Demeter, LoD, 最少知识原则LKP 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。 所以,在运用迪米特…

【第15届蓝桥杯C++青少组中/高级组选拔赛(STEMA)2023年12月17日真题】

第15届蓝桥杯C青少组中/高级组选拔赛(STEMA)2023年12月17日真题 一、单选题 第 1 题 单选题 定义字符串 string a “Hello C”,下列选项可以获取到字符 ‘C’ 的是( )。 A.a[7] B.a[6] C.a[5] D.a[4] 答案 B 第 2 题 单选题 下列选项中数值…

最大子数组和[中等]

一、题目 给定一个长度为n的环形整数数组nums,返回nums的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上,nums[i]的下一个元素是nums[(i 1) % n],nums[i]的前一个元素是nums[(i - 1 n) % n]。 子数…

C 语言学习七:指针

指针 指针与地址指针的声明和初始化指针的解引用指针的比较指针和数组指针数组指针和动态内存分配 指针与函数参数指针作为函数参数二级指针 指向函数的指针 指针与地址 指针的声明和初始化 int variable 42; int *ptr &variable; //间接访问 int value *ptr; // valu…

CTFshow web(命令执行29-36)

?ceval($_GET[shy]);&shypassthru(cat flag.php); #逃逸过滤 ?cinclude%09$_GET[shy]?>&shyphp://filter/readconvert.base64-encode/resourceflag.php #文件包含 ?cinclude%0a$_GET[cmd]?>&cmdphp://filter/readconvert.base64-encode/…

2024/2/7总结

Node.js 什么是node.js node.js是一个基于chrome v8 引擎的 JavaScript 运行环境。 浏览器是JavaScript的前端运行环境node.js是JavaScript的后端运行环境 node.js中无法调用DOM和BOM等浏览器内置API fs模块 是node.js官方提供的、用来操作文件的模块,它提供了一系…

后端创建订单

package com.java1234.entity;import io.jsonwebtoken.Claims;/*** jwt验证信息* author java1234_小锋* site www.java1234.com* company Java知识分享网* create 2019-08-13 上午 10:00*/ public class CheckResult {private int errCode;private boolean success;private Cl…

登录+JS逆向进阶【过咪咕登录】(附带源码)

JS渗透之咪咕登录 每篇前言:咪咕登录参数对比 captcha参数enpassword参数搜索enpassword参数搜索J_RsaPsd参数setPublic函数encrypt加密函数运行时可能会遇到的问题此部分改写的最终形态JS代码:运行结果python编写脚本运行此JS代码:运行结果&…

Powershell Install 一键部署Openssl+certificate证书创建

前言 Openssl 是一个方便的实用程序,用于创建自签名证书。您可以在所有操作系统(如 Windows、MAC 和 Linux 版本)上使用 OpenSSL。 Windows openssl 下载 前提条件 开启wmi,配置网卡,参考 自签名证书 创建我们自己的根 CA 证书和 CA 私钥(我们自己充当 CA)创建服务器…

2024.2.6

1.现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用快速排序实现升序排序 函数4:请使用插入排序实现升序排序 #include<stdio.h> #include<string.h&g…

详述FlinkSql Join操作

FlinkSql 的 Join Flink 官网将其分为了 Joins 和 Window Joins两个大类&#xff0c;其中里面又分了很多 Join 方式 参考文档&#xff1a; Joins | Apache Flink Window JOIN | Apache Flink Joins 官网介绍共有6种方式&#xff1a; Regular Join&#xff1a;流与流的 Joi…

postman执行批量测试

1.背景 有许多的人常常需要使用第三方系统进行重复的数据查询&#xff0c;本文介绍使用PostMan的方式对数据进行批量的查询&#xff0c;减少重复的劳动。 2.工具下载 3.初入门 一、如图示进行点击&#xff0c;创建collection 二、输入对应的名称 三、创建Request并进行查…

Leetcode3020. 子集中元素的最大数量

Every day a Leetcode 题目来源&#xff1a;3020. 子集中元素的最大数量 解法1&#xff1a;哈希 枚举 用一个哈希表统计数组 nums 中的元素及其出现次数。 暴力枚举数组中的数&#xff0c;作为 x&#xff0c;然后不断看 x2,x4,⋯ 在数组中的个数。直到个数不足 2 个为止&a…

ChatGPT高效提问—prompt常见用法(续篇三)

ChatGPT高效提问—prompt常见用法&#xff08;续篇三&#xff09; 1.1 多选项 ​ 多选项技术为模型提供了一个清晰的问题或任务&#xff0c;并附带一组预先定义的潜在答案。这种方法在生成仅限于特定选项集的文本方面表现出色&#xff0c;适用于问答、文本补全和其他任务。利…

win10系统连接WiFi,输入正确密码,但还是提示错误

情况 电信宽带 mac和小米手机都可以连上wifi dell上的windows输入正确的密码还是提示错误 解决办法 根据路由器上的终端配置进入网页进行配置&#xff0c;我的是192.168.1.1&#xff0c;账户:useradmin 修改无线网络设置中的加密方式&#xff0c;由Mixed WPA2/WPA-PSK改为W…

【社交电商】带直播电商功能,可以DIY前端,可以H5和小程序一般商城常用功能齐全

第一次接触这个系统&#xff0c;感觉和微擎有点像。也是一个主体&#xff0c;也很多插件的那种。 测试了下。安装成功了&#xff0c;站长亲测没有问题&#xff0c;一切都挺完善的&#xff0c;不过系统比较庞大&#xff0c;可能新手熟悉起来要一定的过程。 站长整理了一份简要…

WordPress突然后台无法管理问题

登录WordPress后台管理评论&#xff0c;发现点击编辑、回复均无反应。 尝试清除缓存、关闭CF连接均无效。 查看插件时发现关闭wp-china-yes插件可以解决问题。 后来又测试了下发现加速管理后台这项&#xff0c;在启用时会发生点击无效问题&#xff0c;禁用就好了&#xff0c;不…