热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库规范化理论、范式、模式分解

函数依赖部分函数依赖;传递函数依赖非关系化关系模式可能存在的问题数据冗余、更新异常(数据不一致)、插入异常、删除异常关系化关系的用途解决非关系化模式存在的问题键相关的概念超键:唯一

函数依赖

部分函数依赖;传递函数依赖

非关系化关系模式可能存在的问题

数据冗余、更新异常(数据不一致)、插入异常、删除异常

关系化关系的用途

解决非关系化模式存在的问题

键相关的概念

超键:

唯一标识元组,可能存在冗余属性

候选键:

唯一标识元组

超键与候选键的差异

比如:(SNo,SName,SSex) 其中(SNo,SName)超键

主键:

在候选键中任意选择一个作为主键

外键:

其他关系的主键

候选键的求法

图示法

先把属性转化为结点,把函数依赖转化为有向箭头
再找入度为0 的结点开始遍历有向图,若能遍历全图则说明该结点就是候选键。
若没有入度为0的结点,则选择既有入度又有出度的结开始遍历。

求候选键的相关例题

《数据库---规范化理论、范式、模式分解》

解题过程分析:

《数据库---规范化理论、范式、模式分解》

先把属性都转化为结点,把函数依赖转化为有向图的边,再从上图中找到入度为0的节点A1,从A1开始遍历有向图,我们发现从A1开始刚好可以遍历整个有向图,所以A1是候选关键字(候选码)

《数据库---规范化理论、范式、模式分解》

解题过程分析:

《数据库---规范化理论、范式、模式分解》

同理:先把属性都转化为结点,把函数依赖都转化为有向图的边,我们开始查找图中入度为0的结点,(转化结点的时候需要注意,由多个属性共同决定的结点需要把多个结点聚合一起后到达目标结点,而不是每个结点直接到达目标结点)观察图中入读为0的结点,发现A、B、C、D都是入读为0的结点,由于图示法已经将图分为了两部分,而由ABCD四个属性共同组成的候选字可以遍历整个有向图。即是,ABCD是所求

《数据库---规范化理论、范式、模式分解》

解题过程分析:

《数据库---规范化理论、范式、模式分解》

前期工作不再赘述,发现图中没有入度为0的结点,我们需要找既有入度又有出度的结点,C可以直接排除,而AB都是这样的结点,AB都可以遍历整个有向图,所以所求为A和B

范式

《数据库---规范化理论、范式、模式分解》

第一范式(1NF)

每个分量都是不可再分的数据项,若不是,只需删除可再分项

第二范式(2NF)

在第一范式的基础上,不存在部分依赖,单属性主键必定没有部分依赖

第三范式(3NF)

在第二范式的基础上没有传递依赖

BC范式(BCNF)

每个函数依赖的左边必须是候选键

模式分解

保持函数依赖分解

原关系的函数依赖全部保留为新的模式

无损(联接)分解

可以还原为原来的表

列表法

《数据库---规范化理论、范式、模式分解》
只要有一行全部为a则该分解为无损分解,适用于分解的表为多表,第一排为原表的属性,第一列为拆分后的关系模式,根据原有的函数依赖进行替换,用a示已有属性或者可以推出的属性,用b表示没有的属性

两表法

《数据库---规范化理论、范式、模式分解》

只适用于一分为二的情况,求分解后模式的、各自,若新依赖中有原有的依赖则为无损分解


推荐阅读
  • MATLAB实现n条线段交点计算
    本文介绍了一种通过逐对比较线段来求解交点的简单算法。此外,还提到了一种基于排序的方法,但该方法较为复杂,尚未完全理解。文中详细描述了如何根据线段端点求交点,并判断交点是否在线段上。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 本文总结了涡喷发动机动平衡的几种有效方法,探讨了不同传感器和软件工具的应用,旨在帮助爱好者和工程师更好地理解和实现动平衡调整,确保发动机高效稳定运行。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 本文探讨如何利用人工智能算法自动区分网页是详情页还是列表页,介绍具体的实现思路和技术细节。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • 解决Windows 10无法正确加载ICA文件的问题:设置Citrix Receiver为默认打开程序
    当在Windows 10系统中遇到无法正确加载ICA文件的情况时,可以通过下载并安装Citrix Receiver,并将其设置为ICA文件的默认打开方式来解决问题。具体操作步骤包括找到ICA文件,选择合适的打开程序路径(通常是C:\Program Files (x86)\Citrix\ICA Client\wfcrun32.exe),并确保该程序被设为始终使用。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 获取计算机硬盘序列号的方法与实现
    本文介绍了如何通过编程方法获取计算机硬盘的唯一标识符(序列号),并提供了详细的代码示例和解释。此外,还涵盖了如何使用这些信息进行身份验证或注册保护。 ... [详细]
  • 本文详细介绍了 React 中的两个重要 Hook 函数:useState 和 useEffect。通过具体示例,解释了如何使用它们来管理组件状态和处理副作用。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 汇编语言等号伪指令解析:探究其陡峭的学习曲线
    汇编语言以其独特的特性和复杂的语法结构,一直被认为是编程领域中学习难度较高的语言之一。本文将探讨汇编语言中的等号伪指令及其对初学者带来的挑战,并结合社区反馈分析其学习曲线。 ... [详细]
author-avatar
杜娟小乖_748
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有