Mysql高级——数据库设计规范(1)

news2024/11/24 13:25:21

数据库设计规范

1. 为什么需要数据库设计

数据库设计是为了有效地组织和管理数据。它是一个重要的步骤,用于创建一个结构良好、高效和可靠的数据库系统。以下是一些需要数据库设计的原因:

  1. 数据组织:数据库设计帮助我们将数据按照一定的结构进行组织,使得数据可以被轻松地存储、访问和管理。这样可以提高数据的可用性和可靠性。
  2. 数据一致性:通过数据库设计,我们可以定义数据之间的关系和约束条件,确保数据的一致性。这样可以减少数据冗余和错误,并提高数据的准确性。
  3. 数据安全:数据库设计可以考虑数据的安全性,包括访问控制、加密和备份等措施,以保护数据免受未经授权的访问、损坏或丢失。
  4. 数据性能:良好的数据库设计可以提高数据的查询和处理性能。通过合理地设计表结构、索引和查询语句,可以加快数据的检索和处理速度。
  5. 数据可扩展性:数据库设计需要考虑未来的需求和扩展性。通过合理地设计表结构和关系,可以方便地添加新的功能和数据,而不需要对整个数据库进行重构。

综上所述,数据库设计是为了提高数据的组织性、一致性、安全性、性能和可扩展性。它是构建一个高效和可靠的数据库系统的关键步骤。

2. 范 式

2.1 范式简介

在关系型数据库中,关于数据表设计的基本原则、规则就称为范式

可以理解为,一张数据表的设计结构需要满足的某种设计标准的级别。要想设计一个结构合理的关系型数据库,必须满足一定的范式

2.2 范式都包括哪些

目前关系型数据库有六种常见范式,按照范式级别,从低到高分别是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

2.3 键和相关属性的概念

这里有两个表:

球员表(player) :球员编号 | 姓名 | 身份证号 | 年龄 | 球队编号

球队表(team) :球队编号 | 主教练 | 球队所在地

  • 超键:对于球员表来说,超键就是包括球员编号或者身份证号的任意组合,比如(球员编号)(球员编号,姓名)(身份证号,年龄)等。

  • 候选键:就是最小的超键,对于球员表来说,候选键就是(球员编号)或者(身份证号)。

  • 主键:我们自己选定,也就是从候选键中选择一个,比如(球员编号)

  • 外键:球员表中的球队编号

  • 主属性、非主属性:在球员表中,主属性是(球员编号)(身份证号),其他的属性(姓名)(年龄)(球队编号)都是非主属性。

2.4 第一范式(1st NF)

MySQL并没有显式的第一范式(1NF)的概念,因为1NF是关系数据库的基本原则,适用于所有关系型数据库系统,包括MySQL。

第一范式是指数据库中的每个列都是原子的,即不可再分的。具体来说,每个列应该只包含一个值,而不是多个值或者重复的值。这样可以确保数据的一致性和准确性。

在MySQL中,我们可以通过以下几个方面来满足第一范式的要求:

  1. 每个表应该有一个主键,用于唯一标识每条记录。
  2. 每个列应该只包含一个值,不应该存储多个值或者重复的值。如果需要存储多个值,可以考虑使用多个表和关联关系来表示。
  3. 避免使用重复的列,如果有重复的数据,可以考虑将其拆分为一个独立的表。

2.5 第二范式(2nd NF)

在MySQL中,我们可以通过以下几个方面来满足第二范式的要求:

  1. 确保每个表都有一个主键,并且主键是唯一的标识符。
  2. 将非主键列与主键建立直接的关系,即每个非主键列都完全依赖于主键。如果存在非主键列与主键的部分依赖关系,可以将这部分列拆分到一个独立的表中,以确保每个非主键列都与主键有直接的关系。
  3. 避免在表中存储冗余的数据。如果有重复的数据,可以将其拆分为一个独立的表,并通过关联关系与主表建立联系。

2.6 第三范式(3rd NF)

符合3NF后的数据模型通俗地讲,2NF和3NF通常以这句话概括:“每个非键属性依赖于键,依赖于整个键,并且除了键别无他物”。

3. 反范式化

3.1 概述

规范化 vs 性能

  1. 为满足某种商业目标 , 数据库性能比规范化数据库更重要
  2. 在数据规范化的同时 , 要综合考虑数据库的性能
  3. 通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间
  4. 通过在给定的表中插入计算列,以方便查询

在MySQL中,反范式化(Denormalization)是一种优化技术,用于提高数据库查询性能。它违反了范式化的原则,通过增加冗余数据或合并表来减少数据库查询的复杂性和提高查询性能。

反范式化可以在以下情况下使用:

  1. 经常进行复杂的连接操作:如果数据库中的查询经常需要多个表之间的连接操作,而这些连接操作会导致性能下降,可以考虑通过反范式化来减少连接操作,提高查询性能。
  2. 频繁进行聚合操作:如果数据库中的查询经常需要进行聚合操作(如SUM、AVG、COUNT等),而这些操作对大量数据进行计算,可以考虑通过反范式化来预先计算并存储聚合结果,以提高查询性能。
  3. 读取操作远远多于写入操作:如果数据库中的数据主要用于读取操作,而写入操作较少,可以考虑通过反范式化来提高读取操作的性能。通过将相关的数据合并到一个表中,可以避免频繁的连接和查询操作。

需要注意的是,反范式化可能会导致冗余数据的存在,增加数据更新的复杂性和风险。因此,在使用反范式化时,需要权衡查询性能和数据一致性之间的关系,并确保维护数据的完整性和准确性。

总之,反范式化是一种在特定情况下用于提高查询性能的技术。在使用反范式化时,需要谨慎考虑,并确保权衡查询性能和数据一致性的需求。

当冗余信息有价值或者能大幅度提高查询效率的时候,我们才会采取反范式的优化。

5. 第四范式

在关系数据库中,第四范式(4NF)是一种进一步的范式化原则,用于消除非平凡多值依赖关系。然而,在MySQL中,并没有显式的第四范式的概念,因为MySQL作为关系型数据库,遵循范式化的原则,包括第四范式。

第四范式要求在满足第三范式的基础上,消除非平凡多值依赖关系。非平凡多值依赖指的是,当一个表的某个非主键列依赖于该表的部分候选键而不是整个候选键时,就存在非平凡多值依赖。

通过分解表来消除非平凡多值依赖,可以将其拆分为两个或多个表,并通过关联关系来建立联系。这样可以减少数据冗余和提高数据的一致性和准确性。

在MySQL中,我们可以通过遵循第三范式的要求来最大程度地消除非平凡多值依赖。确保每个非主键列直接依赖于主键,避免存在部分候选键之间的依赖关系。

综上所述,第四范式是关系数据库的进一步范式化原则,用于消除非平凡多值依赖。在MySQL中,我们可以通过遵循第三范式的要求来最大程度地满足第四范式的要求,以提高数据的一致性和准确性。

举例1:职工表(职工编号,职工孩子姓名,职工选修课程)。

在这个表中,同一个职工可能会有多个职工孩子姓名。同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。

如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如: 职工表一(职工编号,职工孩子姓名), 职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式。

6. 第五范式、域键范式

除了第四范式外,我们还有更高级的第五范式(又称完美范式)和域键范式(DKNF)。
在满足第四范式(4NF)的基础上,消除不是由候选键所蕴含的连接依赖。如果关系模式R中的每一个连接依赖均由R的候选键所隐含,则称此关系模式符合第五范式。

函数依赖是多值依赖的一种特殊的情况,而多值依赖实际上是连接依赖的一种特殊情况。但连接依赖不像函数依赖和多值依赖可以由语义直接导出,而是在关系连接运算时才反映出来。存在连接依赖的关系模式仍可能遇到数据冗余及插入、修改、删除异常等问题。

第五范式处理的是无损连接问题,这个范式基本没有实际意义,因为无损连接很少出现,而且难以察觉。而域键范式试图定义一个终极范式,该范式考虑所有的依赖和约束类型,但是实用价值也是最小的,只存在理论研究中。

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

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

相关文章

Android 引入FFmpeg

1.安装 CMake 首先,需要下载 CMake 相关工具,在 Android Studio 中依次点击 Tools->SDK Manager->SDK Tools ,然后勾选 CMake : CMake 构建工具 NDK : NDK 环境 最后依次点击 OK->OK->Finish ,开始下载&#xff0…

科技资讯|苹果获批手机“Touch Bar”新专利,苹果Find My依旧火爆

根据美国商标和专利局(USPTO)公示的清单,苹果获得了一项 iPhone 专利,在机身侧面装上一个“Touch Bar”,用于显示电量等信息,并支持相关的交互操作。 这项专利最早于 2011 年提交,并于 2014 年…

OJ练习第180题——颠倒二进制位

颠倒二进制位 力扣链接:190. 颠倒二进制位 题目描述 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指…

FPGA 图像缩放 千兆网 UDP 网络视频传输,基于B50610 PHY实现,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包UDP…

Spring | 异常处理最佳实践

引言 在快速迭代和持续交付的今天,软件的健壮性、可靠性和用户体验已经成为区别成功与否的关键因素。特别是在Spring框架中,由于其广泛的应用和丰富的功能,如何优雅地处理异常就显得尤为重要。本文旨在探讨在Spring中如何更加高效、准确和优…

【设计模式】组合模式

文章目录 1.组合模式定义2.组合模式的结构2.1. 安全式组合模式的结构2.2.透明式组合模式的结构 3.组合模式实战案例3.1.场景说明3.2.关系类图3.3.代码实现 4.组合模式优缺点5.组合模式适用场景6.组合模式总结 主页传送门:💁 传送 1.组合模式定义 组合模式…

Spring面试题8:面试官:说一说Spring的BeanFactory

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的BeanFactory Spring的BeanFactory是Spring框架的核心容器,负责管理和创建Bean对象。它是一个工厂类,用于实例化、配置和管理Bean的…

忽视日志吃大亏,手把手教你玩转 SpringBoot 日志

一、日志重要吗 程序中的日志重要吗? 在回答这个问题前,笔者先说个事例: ❝ 笔者印象尤深的就是去年某个同事,收到了客户反馈的紧急bug。尽管申请到了日志文件,但因为很多关键步骤没有打印日志,导致排查进…

基于springboot+vue的车辆管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

专业排版软件InDesign 2023下载 InDesign mac中文功能

InDesign 2023 mac是一款专业排版软件,适用于Windows和macOS平台。它可以帮助用户创建、设计和排版各种印刷品和数字出版物,如杂志、书籍、报纸、广告、海报、手册、电子书等。 InDesign 2023 mac软件特点 多种页面布局:支持多种页面布局&…

名义实际GDP-各地区-原始和结果(2000-2022年)

一、数据介绍 数据名称:名义、实际GDP-各地区-原始和结果 数据年份:2000-2022年 计算公式:实际GDP 名义GDP / GDP折算指数 数据基期:2000年 数据整理:自主整理 二、数据用途 数据用途 文献依据 经济发展水平 …

如何在.NET电子表格应用程序中创建流程图

前言 流程图是一种常用的图形化工具,用于展示过程中事件、决策和操作的顺序和关系。它通过使用不同形状的图标和箭头线条,将任务和步骤按照特定的顺序连接起来,以便清晰地表示一个过程的执行流程。 在企业环境中,高管和经理利用…

区间重叠问题

区间未重叠数量计算: class Solution {public int findMinArrowShots(int[][] points) {//需要用第一种比较器?第二种会报错,在涉及数的大小边界的时候Arrays.sort(points,(a, b) -> Integer.compare(a[0], b[0]));//(a, b) -> Intege…

【算法思想-排序】根据另一个数组次序排序 - 力扣 1122 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

员工执行力差,80%是领导的问题

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 读者小T是大厂P7,今年跳到一家行业独角兽公司,做项目经理。没想到,半年后他的领导Y总,在考核中给他的绩效打了D,主要原因是小T“项目按时完成…

大模型分布式训练策略:ZeRO、FSDP

文章目录 一、ZeRO(零冗余优化器)1.1 背景1.2 深度学习内存消耗分析1.3 主要方法1.3.1 ZeRO-DP优化模型状态内存1.3.2 ZeRO-R优化残余状态内存 1.4 总结1.5 官方视频:ZeRO & Fastest BERT,提高 DeepSpeed 深度学习训练的规模和…

ROS 基础教程

欢迎访问我的博客首页。 ROS 基础教程 1.urdf 文件1.1 在 Rviz 中显示 urdf1.1.1 定义 urdf1.1.2 在 Rviz 中查看 urdf 1.2 在 Gazebo 中显示 urdf1.2.1 定义 urdf1.2.2 在 Gazebo 中查看 urdf 2.建图-仿真2.1 模型 1.urdf 文件 假设我们的工作空间是 ws_ros。我们自己实现的包…

10路LED驱动器和GPIO控制器禾润HTR3310

供电范围:2.5V~5.5V 10个多功能IO,支持LED驱动或GPIO(电流源调光) LED模式下具有256阶线性调光 任意IO可配置为独立的输入或输出 中断功能,8μs防抖,低电平有效 标准I2C接口,4个I2C器件地址…

AB包的依赖关系

1、什么是依赖关系 有时候一个模型所需要的东西可能在不同的包里面,例如蓝色立方体的模型和材质在不同的包(mode和head)里,这时需要加载两个包才能让这个球正常显示 2、如何获取依赖关系并加载 //加载AB包 AssetBundle ab Asse…

a single dex file (# methods: 67938 > 65536)

问题 项目不大&#xff0c;但是导入的包比较多&#xff0c;导致方法数量超过了一定数量 Cannot fit requested classes in a single dex file (# methods: 67938 > 65536) Android 5.0之前的版本&#xff08;API level < 21&#xff09;使用Dalvik runtime来执行代码&a…