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

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

时间:2024-06-17 15:59:38浏览次数:16  
标签:关系 公理 依赖 范式 函数 数据库 模式 关系数据库 规范化

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

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站上搜索相关视频学习,这里不进行复习。

标签:关系,公理,依赖,范式,函数,数据库,模式,关系数据库,规范化
From: https://blog.csdn.net/2301_77523019/article/details/139745231

相关文章

  • Javaweb实现简易记事簿 jdbc实现Java连接数据库
    //相关代码packageUserAct;importjakarta.servlet.;importjakarta.servlet.annotation.WebServlet;importjakarta.servlet.http.;importjava.io.;importjava.sql.;//登出@WebServlet("/UserAct.DeleteEvent")publicclassDeleteEventimplementsServlet{......
  • 【数据库】数据恢复
    日志:先记日志后写数据库记日志----(出错)-----写数据库:数据库还没有被修改,数据库还是好的记日志-----写数据库----(出错):数据库内的文件可能有问题,但日志是好的,可以根据日志恢复数据库如果反过来先写数据库再写日志,那么若写数据库----(出错)----记日志,这种情况数据库中数......
  • 如何解决c++使用mysql数据库读取中文输出时乱码问题
    使用vs写c++输出数据库中文时出现乱码设置utf-8还是不行这是数据库的内容这是输出:在网上找有说改成utf-8的格式,加入这样一句:mysql_query(conn,"setnamesutf8");效果就是这样:发现错误依旧,询问群友后修改,需要在连接数据库的函数中加入如下一句:mysql_query(conn,"set......
  • 绘制MySQL数据库的实体关系图(ERD)与逻辑模型图
    绘制MySQL的实体关系图(ERD,Entity-RelationshipDiagram)和数据库模型图对于理解和设计数据库结构非常重要。这些图表有助于可视化数据库中的表、列、关系以及约束。以下是一些步骤和工具,你可以使用它们来创建这些图表。步骤确定实体:首先,确定你的数据库中的实体(或称为表......
  • MySQL使用命令导出数据库
    MySQL自带了一个命令行工具mysqldump,可以方便的将数据导出至文件使用案例mysqldump-uroot-p数据库名称>xxx.sql#再输入密码即可#增加过滤条件mysqldump-uroot-p数据库名称表名称--where="id>1000">xxx.sql过滤条件#仅导出数据而不包含表结构--no-crea......
  • 【odoo | SQL】odoo使用sql语句操作数据库
    概要        Odoo的SQL指的是在Odoo框架内使用SQL语句直接操作数据库。这些操作通常是通过Odoo提供的数据库游标(self.env.cr)来执行的。虽然Odoo主要鼓励使用其ORM(对象关系映射)来进行数据库操作,因为ORM更安全、易维护且与Odoo的模型和视图系统深度集成,但在某些情况下,直......
  • Python 学习 第二册 第13章 数据库支持
    ----用教授的方法学习目录13.1Python 数据库 API 13.1.1 全局变量13.1.2 异常13.1.3 连接和游标13.1.4 类型13.2SQLite 和 PySQLite13.2.1 起步13.2.2 数据库应用程序示例13.1Python 数据库 API 为解决Python数据库模块存在的这种问题,人们一致同......
  • Oracle数据库ORA-12514错误消息
    引用:https://www.php.cn/faq/131370.htmlhttps://blog.csdn.net/arrowzz/article/details/17144653https://www.51969.com/post/18969077.htmlhttps://blog.csdn.net/yuan1164345228/article/details/115310827https://www.cnblogs.com/danghuijian/archive/2010/01/07/440......
  • 基于springboot的球队训练信息管理系统源码数据库
    传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装球队训练信息管理系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,球队训练信息管理系......
  • 基于springboot的青年公寓服务平台源码数据库
    传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,房屋信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的青年公寓服务平台。本青年公寓服务......