MySQL-数据库设计规范

1、范式

1.1、概述

  • 在关系型数据库中,关于数据表设计的基本原则、规则就称为范式
  • 常见六种范式,按照范式级别由低到高如下所示:
    • 第一范式
    • 第二范式
    • 第三范式
    • 巴斯范式
    • 第四范式
    • 第五范式

1.2、键和相关属性

  • 范式的定义会用法主键和候选键,数据库中的key由一个或者多个属性组成。
  • 常用键和属性定义如下:
    • 超键:能唯一标识元组的属性集
    • 候选键:如果超键不包括多余的属性,则超键就为候选键
    • 主键:用户可以从候选键中选择一个作为主键
    • 外键:父子关系表中存在
    • 主属性:包含在任意候选键中的属性
    • 非主属性:与主键相对,指的是不包含在任何一个候选键中的属性

2、三范式

2.1、第一范式

  • 主要是确保数据表中每个字段的值必须具有原子性,每个字段的值为不可再次拆分的最小数据单元
  • 属性的原子性是主观的

2.2、第二范式

  • 在满足第一范式的基础上,还要满足数据表中的每条记录都是可唯一标识的。
  • 所有非主键字段必须完全依赖主键,不能只依赖主键的一部分

2.3、第三范式

  • 建立在第二范式的基础上,确保数据表中的每一个非字段主键和主键字段直接相关
  • 要求数据表中的所有非主键字段不能依赖于其他非主键字段,非主键属性直接必须相互独立

3、BCNF(巴斯范式)

  • BCNF是对第三范式(3NF)的进一步规范, 旨在消除数据依赖性问题,确保数据的一致性。
  • 在BCNF中,除了满足第三范式的所有条件外,还要求:对于关系模式R中的每个非平凡的函数依赖X→Y,X必须是R的超键。这意味着,如果在关系R中存在一个属性(X),它决定了另一个属性(Y),那么X必须是R的候选键,而不仅仅是超键。
  • 候选键是可以唯一标识关系中元组的最小属性集合。超键是可以唯一标识元组的属性集合,而不一定是最小的。
  • BCNF的要求确保了数据结构的高度规范化,减少了数据冗余和更新异常的可能性
  • 达到BCNF可能会导致关系模式的进一步分解,从而增加了数据库设计的复杂性。
  • 在实际设计中,需要权衡范式化和性能之间的关系,并根据具体情况进行设计决策。

4、第四范式

  • 多值依赖
    • 多值依赖: 即属性之间的一对多的关系,记为K→→A
    • 函数依赖 :事实上是单值依赖,所以不能表达属性值之间的一对多关系
    • 平凡的多值依赖:全集U= K+A,一个K可以对应于多个A,即K→→A。此时整张表就是一组一对多的关系
    • 非平凡的多值依赖:全集U=K+A+B,一个K可以对应于多个A,也可以对应多个B,A与B是相互独立的,即K→→A,K→→B,整张表由多组一对多的关系

5、第五范式、域键范式

  • 在满足第四范式的基础上,消除了不是由候选键所蕴含的连接依赖
  • 如果关系模式R中的每一个连接依赖均由R的候选键所隐含,则称此关系模式符合第五范式。

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

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

相关文章

llllllllll

llllllllllllllll

gulp 构建Node.js 应用

安装 ## 安装 gulp 命令行工具 npm install --global gulp-cli## 安装 gulp,作为开发时依赖项 npm install --save-dev gulp为什么要用Gulp ? 在前端开发中,Gulp是一个node.js 的自动化构建工具,它通过流和代码优于配置的策略来简化任务编…

类的继承和方法重载

想象一下,有一个相亲想爱的一家人家族树。在这个家族树中,有一个祖先(父类),它拥有一些基本的特征和行为,比如家族的传统、姓氏、某些共同的技能或知识。 现在,这个祖先有多个后代(…

vivado 设计连接性

设计连接性 IP集成商提供设计师协助,帮助您完成连接过程 设计。图3显示了MHS的一个示例,图4显示了设计帮助 可在IP集成商中获得 地址映射 在XPS中,无论主机访问从机IP,每个从机都有相同的地址。IP integrator为基于master的寻址提…

【C++课程学习】:命名空间的理解(图文详解)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 📷1.命名冲突 📷2.重定义 📷3.命名空间 🍺命名空间可…

Leetcode刷题笔记3

18. 四数之和 18. 四数之和 - 力扣(LeetCode) 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应&…

解决Element组件el-switch在Vue中值的绑定与回显问题

概要 Switch 开关表示两种相互对立的状态间的切换,多用于触发「开/关」。可当一个布尔值进行使用。 问题描述与解决 引入Element组件的switch到Vue中,可以读取switch的值,但如果放在页面中,不能回显上去。 如上图,无论值是"否"还是“是”。都不能正确渲染到页…

Make New 函数 ---golang

make 和 new 函数的使用区别 共同点: make 函数和new 函数都是用来申请内存地址的。不同点 1、new函数的使用相对来比较少,用于对一般的数据类型,做数据类型申请 如: string, int,且申请的为 指针类型。…

vue-officef实现pdf文件在线预览

一、参考网址 https://www.cnblogs.com/guozhiqiang/p/17957288 1、引入依赖 npm install vue-office/pdf vue-demi2、编写组件 <template><vue-office-pdf :src"pdf"/> </template> <script> // import pdf from vue-pdf import VueOffice…

基于长短期记忆网络 LSTM 的送餐时间预测

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

Linux Kernel入门到精通系列讲解(RV-U-boot 篇) 4.2 RISC-V从零移植自己的Uboot

1. 概述 上一章节我们已经成功从OpenSBI跳转到Uboot,并且已经把默认的qemu-riscv64_smode_defconfig移植成功了,本章节我们将会重新规划memory 分区,方便后续创建更多的设备,并且从零开始移植一个属于Naruto Pi的uboot。 2. 重建分区表 2.1 当前QEMU已创建Memory 地址大小…

实战13:lstm bp 机器学习随机森林粮食产量预测-完整代码数据

直接看视频: lstm bp 机器学习随机森林粮食产量预测-完整代码数据_哔哩哔哩_bilibili 看数据: 代码: from sklearn.linear_model import LinearRegression from sklearn import preprocessing import random from sklearn.model_selection import train_test_split from…

postgresql|数据库|闪回插件e-maj的部署和使用

前言&#xff1a; E-Maj 是 PostgreSQL 数据库的一个扩展插件&#xff0c;它的全称为 "Elementary Majordomo"。这个扩展的主要功能是为数据库中的表集提供细粒度的写入日志记录和时间旅行能力。这意味着使用 E-Maj 的用户可以在数据库的特定子集上实现事务的回滚&a…

C++笔记之Unix时间戳、UTC、TSN、系统时间戳、时区转换、local时间笔记

C++笔记之Unix时间戳、UTC、TSN、系统时间戳、时区转换、local时间笔记 ——2024-05-26 夜 code review! 参考博文 C++笔记之获取当前本地时间以及utc时间

Linux定时计划

定时计划 一、计划任务种类 突发性&#xff1a;临时决定只执行一次的任务 at&#xff1a;处理执行一次任务就结束定时性&#xff1a;每隔一定时间需要重复执行此命令 crontab&#xff1a;指定任务&#xff0c;按照设定的周期一直循环执行二、作用 定时任务可以用于自动备份…

TCP/IP协议(一)

一.报文和协议 协议有什么作用&#xff1f;协议定义通信实体间所交换报文的格式和次序&#xff0c;以及在报文发送和/或接收或者其他事件方面所采取的行动(响应)。 什么是报文&#xff1f;指在网络中传输的数据单元&#xff0c;网络通讯的基本单位。&#xff08;HTTP报文、TCP报…

链式二叉树的前,中,后序遍历 AND 结点个数及高度等 文末附带全部代码

目录 前言1. 前序遍历2. 中序遍历3. 后续遍历4. 二叉树结点的个数5. 二叉树叶子结点个数6. 二叉树的高度7. 二叉树第K层结点的个数8. 二叉树查找值为x的结点全部代码总结 正文开始 前言 本文旨在介绍二叉树的链式存储中一些函数的实现 博客主页: 酷酷学!!! 更多文章, 期待关…

高德地图地图 JS API 2.0 基本使用

1. 按 NPM 方式安装使用 Loader npm i amap/amap-jsapi-loader --save2. 新建 MapContainer.vue 文件 在项目中新建 MapContainer.vue 文件&#xff0c;用作地图组件。 3.创建地图容器 在 MapContainer.vue 地图组件中创建 div 标签作为地图容器 &#xff0c;并设置地图容器…

01主动安全系统

“安全”一直是车主对车辆考核的重要指标。车辆安全可以分为从主动安全和被动安全两个方面进行分类。今天就来说说汽车主动安全系统的那些事儿。 01.什么是主动安全系统&#xff1f; 主动安全是指尽量自如地操纵控制汽车的安全系统措施。无论是直线上的制动与加速还是左右打方…

【调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cloudreve】

调试笔记-系列文章目录 调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cloudreve 文章目录 调试笔记-系列文章目录调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cloudreve 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调…