数据库原理(关系数据库规范化理论)——(4)

一、关系模式规范化的必要性

1.关系可能出现的问题

  • 数据冗余大;
  • 插入异常;
  • 删除异常;
  • 更新异常;

2.关系模式应满足的基本要求

  • 元组的每个分量必须是不可分割的数据项;
  • 数据库中的数据冗余应尽可能少;
  • 不要出现插入异常;
  • 不要出现删除异常;
  • 不要出现更新异常;
  • 数据库设计应考虑查询要求,数据组织要合理。

二、函数依赖及关系的范式

1.函数依赖类型

(1)完全函数依赖:

(2)部分函数依赖:

(3)传递函数依赖:

2.关系的范式及其规范化

        范式指数据依赖满足一定约束的关系模式。

范式的判定条件与规范化

(1)1NF

        在一个关系模式R中,如果R的每一个属性都是不可再分的数据项,则称R属于1NF。

(2)2NF

        在一个关系模式R中,如果R属于1NF,且它的每一个非主属性都完全依赖于候选码,则R属于第二范式,简单来说就是要有用于识别的id或索引。

(3)3NF

        如果一个关系模式R属于2NF,并且每个非主属性都不传递函数依赖于候选码,则R属于第三范式,简单的说就是一张表中存储一类信息时,在一张表中关联其他表中数据时,只需要关联主键即可。

(4)BCNF

        如果关系模式R(U,F)属于1NF,若F中任一函数依赖X\rightarrow YY\nsubseteq X时,X必含有R的一个候选码,则R属于BCNF,简单地说就是要判断存储信息是否存在和合理,注意,满足BCNF的必然满足3NF。

三、函数依赖的公理系统

        函数依赖的公理系统是指用来推导和证明函数依赖的一组基本原则和规则。以下是常见的函数依赖的公理系统:

  1. 自反性:如果X是关系R的子集,则X -> X。

  2. 扩展性:如果X -> Y,那么对于任何关系的扩展R',都有X -> Y。

  3. 传递性:如果X -> Y且Y -> Z,那么X -> Z。

  4. 合并性:如果X -> Y且X -> Z,那么X -> YZ。

  5. 分解性:如果X -> YZ,那么X -> Y且X -> Z。

  6. 析取性:如果X -> Y且X -> Z,那么X -> YZ。

  7. 交换性:如果X -> YZ,那么X -> ZY。

        这些公理可以用来推导和证明函数依赖的性质和关系。通过应用这些公理,可以建立函数依赖的理论框架,并使用它来分析和优化数据库设计和查询优化。

四、关系模式的分解 

        这里会和函数依赖的公理系统结合来出大题(很难我不会),感兴趣或时间充足可以自行在b站上搜索相关视频学习,这里不进行复习。

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

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

相关文章

HTML <meta> 标签及其属性介绍

HTML 的 <meta> 标签定义了文档的元数据&#xff0c;这些数据对于机器&#xff08;如浏览器、搜索引擎和其他网络服务&#xff09;来说是非常重要的&#xff0c;但它们不会直接显示在页面上。元数据提供了关于数据的数据&#xff0c;例如文档的字符编码、页面描述、关键词…

springboot读取配置时,读取到了系统环境变量

在Spring Boot应用中&#xff0c;读取配置通常通过application.properties或application.yml文件进行。不过&#xff0c;Spring Boot也支持从系统环境变量读取配置&#xff0c;这使得应用可以在不同的环境中灵活配置。下面详细介绍如何在Spring Boot中读取系统环境变量。 1. 配…

Neo4j Desktop界面认识以及数据库备份与还原

Neo4j Desktop界面认识以及数据库备份与还原 neo4j 版本信息&#xff1a;Neo4j Desktop Version 1.5.9&#xff1b;neo4j 5.12.0 系统信息&#xff1a;windows 11 Neo4j Desktop 界面 每个 Project 下可以有多个 DBMS&#xff0c;而每个 DBMS 中默认有 system 和 neo4j (def…

记录.偏僻冷知识

-----------------------------------------------------2024.6.16---------------------------------------------------------- 一、为什么是32.576k的晶振&#xff1f; 1、从产生1hz频率的角度考虑&#xff0c;32.576k这个频率正好是2^15次方&#xff0c;只要做15次…

PHP中的while循环:用法、技巧与最佳实践

在PHP编程中&#xff0c;while循环是一种基本且常用的控制结构&#xff0c;用于重复执行代码块&#xff0c;直到指定条件为假。while循环在处理未知迭代次数的任务时特别有用&#xff0c;例如读取文件内容、处理用户输入或动态生成数据等。与for循环不同&#xff0c;while循环适…

SQL Server中CROSS APPLY连接操作

在 SQL Server 中&#xff0c;CROSS APPLY 是一个连接操作&#xff0c;它类似于 INNER JOIN&#xff0c;但有一些关键差异&#xff0c;特别是在处理表值函数&#xff08;TVF&#xff09;、行集函数或子查询时。CROSS APPLY 返回对于外部查询中的每一行&#xff0c;在内部查询或…

LabVIEW_OPC读取PLC数据

使用OPCDemo_西门子 Demo位置Program Files \ National Instruments \ Shared \ NI OPC Servers \ V5 \ Projects \ simdemo.opf. 使用共享变量的方式读取数据 1.Labview项目中新建IO服务器 选择OPC Client 选择NI OPC Server Labview会创建一个Lib库对OPC客户端进行管理。…

记录一个利用winhex进行图片隐写分离的

前提 是一次大比武里面的题目&#xff0c;属实给我开了眼&#xff0c;跟我之前掌握的关于隐写合并的操作都不一样。 它不是直接在文件里面进行输入文件隐写&#xff0c;叫你输入密码&#xff0c;或者更改颜色&#xff0c;或者偏移位置&#xff1b; 它不是单纯几个文件合并&a…

522. 最长特殊序列 II(Rust)

题目 给定字符串列表 strs &#xff0c;返回其中 最长的特殊序列 的长度。如果最长特殊序列不存在&#xff0c;返回 -1 。 特殊序列 定义如下&#xff1a;该序列为某字符串 独有的子序列&#xff08;即不能是其他字符串的子序列&#xff09;。 s 的 子序列可以通过删去字符串…

基于SpringBoot校园食堂订餐管理系统

文章目录 系统运行图概要整体架构流程技术名词解释 系统运行图 概要 随着校园人口的增加和生活节奏的加快&#xff0c;校园食堂的订餐管理面临着诸多挑战&#xff0c;传统的人工点餐方式已经不能满足日益增长的需求和期望。因此&#xff0c;本论文旨在设计和实现一种基于Java的…

过滤器和拦截器的基本知识

过滤器和拦截器的基本知识 前提提要&#xff0c;由于过滤器和拦截器的相关函数是没有返回值的&#xff0c;所以我们像前端返回数据时需要使用到HttpServletResponse中的相关函数&#xff0c;且需要配合阿里巴巴的插件fastjson将返回信息转为json格式&#xff0c;或者使用gson转…

【CMU 15-445】Proj3 Query Execution

Query Execution 通关记录Task1 Access Method ExecutorsSeqScanInsertUpdateDeleteIndexScanOptimizing SeqScan to IndexScan Task2 Aggregation & Join ExecutorsAggregationNextedLoopJoin Task3 HashJoin Executor and OptimizationHashJoinOptimizing NestedLoopJoin…

vue分类

先看效果 再看代码 <category-tab v-model"params.area" name"地区" :list"areaList" /><category-tab v-model"params.type" name"类型" :list"typeList" /><category-tab v-model"params.…

如何让AI 帮你生成 git 提交信息

在协同开发的项目中&#xff0c;我们肯定避免不了使用git提交代码&#xff0c;所以经常会看到了一些描述不清的提交信息。当遇到种情况时&#xff0c;我们也不必为此责怪开发人员&#xff0c;因为我们确实很难记住你在 git 提交时刚刚做了什么。 Nutlope / aicommits 一个使用 …

Linux内核中user、sys、iowait计算

Linux源代码路径: kernel/sched/cputime.c void account_user_time(struct task_struct *p, u64 cputime) {int index;/* Add user time to process. */p->utime += cputime;account_group_user_time(p, cputime);index = (task_nice(p) > 0) ? CPUTIME_NICE : CPUTIM…

编译原理:代替LR的MP:2.遇到的问题

用指针加速 MP是multi-pass&#xff0c;多遍分析法&#xff0c;它是从“先乘除后加减”中得来的灵感。在实践中&#xff0c;发现C语言优先级有15级&#xff0c;如果将源代码处理15遍&#xff0c;每一遍都从头开始找&#xff0c;势必很慢。所以&#xff0c;有了用指针加速的想法…

Attention机制到底是什么?

AI算法之一 的Attention机制到底是什么&#xff0c;你知道吗? 这里写目录标题 1. Attention 的本质2. Attention的3大优点3. Attention的原理3.Attention的类型3.1计算区域3.2 所用信息3.3 结构层次 4. 模型方面5. 相似度计算 1. Attention 的本质 Attention&#xff08;注意…

Redis 面试热点(二)

在前一篇文章中&#xff0c;我们介绍了 Redis 的基础知识和一些常见面试问题。本文将继续探讨 Redis 面试中的一些高级话题&#xff0c;包括 Redis 的事务、Lua 脚本、缓存一致性、热 Key 问题以及 Redis 与其他数据库的对比。 1. Redis 事务 Redis 事务的特性 原子性: Redi…

构建数字化校园,开启创新教育模式

在当今信息化时代&#xff0c;教育的转型升级已成为推动社会进步与发展的关键力量。构建数字化校园&#xff0c;不仅是对传统教育模式的革新&#xff0c;更是开启一场以技术赋能教育、创新驱动成长的教育革命。这一进程旨在通过深度融合信息技术与教育教学实践&#xff0c;重塑…

hive on spark 记录

环境&#xff1a; hadoop 2.7.2 spark-without-hadoop 2.4.6 hive 2.3.4 hive-site.xml <property><name>hive.execution.engine</name><value>spark</value> </property> <property><name>spark.yarn.jars</name>&l…