关系数据理论

news2024/12/22 22:08:51

什么是关系数据理论:用来评判数据库逻辑设计“好坏程度”的标准;二是如果逻辑设计中存在“不好”的关系模式,如何将其修改为“好”的关系模式。

函数依赖:举个例子:学生表中,一个学生的学生号确定了,学生的姓名及其他属性值也就被唯一地确定了所以有这样的函数依赖:Sno---->Sname,Sno--->School.

但是函数依赖也分好坏:假如如下有一个函数依赖关系:

当一个学生学号确定下来了,相应的学院和院长信息也被确认了,学生学号和课程编号可确认一个成绩值。下面的关系表如下:

评价函数依赖可以从如下四个方面进行:

1.数据冗余:比如院长姓名重复出现,浪费存储空间。

2.更新异常:当更新数据库时,更换院长后,要把每一个院长的值给更新。

3.插入异常:一个学院刚成立,没有学生,那么此时院长信息也无法插入。

4.删除异常,如果一个学院学生全都毕业了,则在删除信息的同时,也把院长信息给删除了。

部分函数依赖:若X->Y但是Y不完全函数依赖于X,则称Y对X部分函数依赖。比如(学生学号,课程号)--->可以唯一决定一个学院,但是对于学院来说是对(学生学号,课程号)是部分函数依赖。

因为学生学号--->学院名称,然而学生学号只是(学生学号,课程号)属性组的真子集。

完全函数依赖:X----->Y,但是X中的真子集却无法满足可以唯一确定Y。

传递依赖:X->Y,  Y->Z所以X->Z.

候选码:可以唯一决定一个元组的属性或者属性组就叫做候选码。R(U,F),K是属性组U中的真子集,且K->U,U完全依赖于K,而不是部分完全依赖于K。

超码:存在一个关系R(U,F),有K->U,U部分完全依赖于K,那么就把关系/关系组K叫做此关系的超码。

主码:如果候选码多于一个,则选择其中的一个作为主码。

外码:关系R中有X并非R的码,而是另外一个关系中的码。

全码:一个关系中的码包括了这个关系中的全部属性。

范式:符合某一种级别的关系模式的集合。

规范化:一个低一级别的关系模式通过通过模式分解可以分解成若干个更高级别的范式的关系模式的集合。

1NF,2NF,3NF,BCNF,4NF.从左到右级别越高,而且级别低的包含了级别高的关系模式。

1NF:作为二维表,关系要符合一个最基本的条件是每一个分量必须是不可分的数据项。

 

2NF:当一个关系属于1NF,然后每一个非主属性都完全函数依赖于任一一个候选码。

举个例子:下面的例子就不符合一个2NF关系,因为对于住所和学院这两个非主属性码部分函数依赖于候选码(学生号,课程号)。

可以将其进行分解,分解后成为:这时就符合每一个非主属性完全函数依赖于码。

3NF:在2NF的基础上,加上一条每一个非主属性值也不部分函数依赖于任意一个码。用上面的图解释:Sno->School,School->Sloc,那么Sloc传递依赖于Sno。所以不符合3NF。

BCNF:

多值依赖:举个例子:(属性1,属性2)---->属性3,属性3仅仅由属性1决定,无论属性2的值取什么都不改变。跟部分函数依赖的区别在于:部分函数依赖它的属性2的值跟属性3的值是挂钩的。

定义:X->->Y成立,当且仅当对R(U,F)的任一关系r(某一行),给定的一对(x,z)值,有一组Y,这组值仅仅决定于x值而与z值无关。

在这个例子中:李勇,王军这些授课老师的值和参考资料的取值毫无关系,只与所教科目有关系:物理。

平凡的多值依赖:若X->->Y,且Z为空,X,Y,Z都是U的子集,X+Y+Z=U,则称X_>->Y为平凡的多值依赖。

4NF:如果在符合1NF的基础上,关系R的每个非平凡多值依赖X->->Y(Y不是X的真子集),X都含有候选码。

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

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

相关文章

填坑-celery正常启动后能收到任务但不执行任务的解决办法

场景 Flask开发中用celery 6正常启动后能收到任务但不执行任务的解决办法,也没有错误提示…… INFO/MainProcess] Task app.add_together[ce406ed8-71b3-49e6-8556-f44bfe66549c] received [2024-06-20 19:38:10,632: INFO/SpawnPoolWorker-36] child process 2244…

NetSuite Inventory Transfer Export Saved Search

用户之前有提出一个实际的需求,大致意思是想要导出Inventory Transfer的相关明细行信息,且要包含From Location,To Location,Quantity等信息。 我们知道From Location和To Location在IT Form中应该是在Main的部分,在D…

基于DE2-115平台的VGA显示实验

一.任务需求 深入了解VGA协议,理解不同显示模式下的VGA控制时序参数(行频、场频、水平/垂直同步时钟周期、显示后沿/前沿等概念和计算方式);通过Verilog编程,在至少2种显示模式下(64048060Hz,102476875Hz&…

STM32HAL库--定时器篇

STM32F429 有14个定时器,其中包括 2 个基本定时器(TIM6 和 TIM7)、 10 个通用定时器(TIM2~TIM5,TIM9~TIM14)、 2 个高级控制定时器(TIM1 和 TIM8)。 由上表知道:除了 TIM…

初探工厂抽象模式

设计模式的-工厂模式 1.定义一个约定的规则抽象类 class ETFactory {createStore() {throw new Error(抽象方法,不允许直接调用,需重写)}createUser(){throw new Error(抽象方法,不允许直接调用,需重写)} } 案例:…

【Codesys】-计算开机通电运行时间,累计正常使用时间,故障停机时间

应客户要求,在程序添加了这个用来计算开机运行时间,原理就是取当前时间减去一开始记录的时间,没什么特别要求,记录一下使用的变量类型和数据写法,防止忘记了。 下文只写了一个开机通电运行时间的写法,累计…

Java数据结构与算法——稀疏数组和队列

一、稀疏数组sparsearray数组 该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,可以采用稀疏数组进行压缩 1.基本介绍: 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法…

TikTok账号运营:静态住宅IP为什么可以防封?

静态住宅IP代理服务是一种提供稳定、静态IP地址并可隐藏用户真实IP地址的网络代理服务。此类代理服务通常使用高速光纤网络来提供稳定、高速的互联网体验。与动态IP代理相比,静态住宅IP代理的IP地址更稳定,被封的可能性更小,因此更受用户欢迎…

算法基础精选题单 模拟 (个人题解)

前言: 从今天开始刷牛客上的这份题单,为暑假的牛客多校集训做准备,题单上一共有237道题,要想在集训开始前刷完难度还是很大的,但我一定会坚持下来,希望在这段时间内我能真正入门算法竞赛。接下来这三道题都…

k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案

文章目录 OpenKruise简介OpenKruise来源OpenKruise是什么?核心组件有什么?有什么特性和优势?适用于什么场景? 什么是OpenKruise的原地升级原地升级的关键特性使用原地升级的组件原地升级的工作原理 应用环境一、OpenKruise部署1.安…

备忘录模式(大话设计模式)C/C++版本

备忘录模式 C #include <iostream> #include <string> using namespace std;// Memento类&#xff0c;备忘录&#xff0c;此处为角色状态存储箱 class RoleStateMemento { private:int m_vit; // 生命力int m_atk; // 攻击力int m_def; // 防御力 public:RoleStat…

基于SpringBoot+Vue流浪狗领养管理设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

眼见不一定为实之MySQL中的不可见字符

目录 前言 一、问题的由来 1、需求背景 2、数据表结构 二、定位问题 1、初步的问题 2、编码是否有问题 3、依然回到字符本身 三、深入字符本身 1、回归本质 2、数据库解决之道 3、代码层解决 四、总结 前言 在开始今天的博客内容之前&#xff0c;正在看博客的您先来…

如何更换OpenHarmony SDK API 10

OpenHarmony社区已经发布OpenHarmony SDK API 10 beta版本&#xff0c;有些 Sample案例 也有需要API10。那么如何替换使用新的OpenHarmony SDK API 10呢&#xff1f;本文做个记录。 1、如何获取OpenHarmony SDK 1.1 每日构建流水线 可以从OpenHarmony每日构建站点获取最新的…

【ARMv8/v9 GIC 系列 2 -- GIC SPI 中断的 enable和 disable 配置】

文章目录 GIC 中断 Enable 和 DisableGICD_ISENABLER<n>GICD_ICENABLER<n>参数 n使用举例代码实现注意事项 GIC 中断 Enable 和 Disable 在ARMv8架构中&#xff0c;通用中断控制器&#xff08;GIC&#xff09;负责管理处理器的中断。为了控制和管理这些中断&#…

SPI协议——对外部SPI Flash操作

目录 1. W25Q32JVSSIQ背景知识 1.1 64个可擦除块 1.2 1024个扇区&#xff08;每个块有16个扇区&#xff09; 1.3 页 1. W25Q32JVSSIQ背景知识 W25Q32JV阵列被组织成16,384个可编程页&#xff0c;每页有256字节。一次最多可以编程256个字节。页面可分为16组(4KB扇区清除&…

排序方法——《归并排序》

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

chatgpt: linux 下用纯c 编写ui

在Linux下用纯C语言编写用户界面&#xff08;UI&#xff09;&#xff0c;通常会使用GTK或Xlib。GTK是一个更高级的库&#xff0c;提供了丰富的控件和功能&#xff0c;而Xlib则是一个更底层的库&#xff0c;提供了直接操作X Window系统的功能。 下面是一个使用GTK在Linux上创建…

第二十四节:带你梳理Vue2 : Vue具名插槽/作用域插槽/v-slot指令

1. 具名插槽 1.1 没有使用具名插槽的问题 有的时候我们在使用子组件时,在子组件模板上不同的位置插入不同的内容, 只有一个插槽显然没法满足我们的需求,看示例: 需求如下: 子组件是一篇文章的结构父组件在调用子组件是给文章插入标题,正文,时间信息 示例代码如下: <di…

随机森林算法详解

随机森林算法详解 随机森林&#xff08;Random Forest&#xff09;是一种集成学习方法&#xff0c;通过构建多个决策树并将它们的预测结果结合起来&#xff0c;来提高模型的准确性和稳定性。随机森林在分类和回归任务中都表现出色&#xff0c;广泛应用于各类机器学习问题。本文…