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

关系模式设计的好与坏的区别

一、关系模式应满足的基本条件1.元组的每个分量必须是不可分的数据项关系数据库特别强调,关系中的属性不能是组合属性,必须是基本项,并把这一要求规定为鉴别表格是否为“关系”的标准。2.数据库
一、关系模式应满足的基本条件

1.元组的每个分量必须是不可分的数据项

关系数据库特别强调,关系中的属性不能是组合属性,必须是基本项,并把这一要求规定为鉴别表格是否为“关系”的标准。

2.数据库中的数据冗余应尽可能少

数据冗余是数据库最忌讳的毛病。数据冗余会使数据库中的数据剧增,系统负担过重,并会浪费大量的存储空间。
数据冗余还会导致数据的不完整、增加数据维护的代价,数据冗余还会造成数据查询和统计的困难。

3.不能因为数据更新而引起数据不一致问题

关系模式设计的不好,会导致不必要的数据冗余。
当执行数据修改是可能会出现冗余数据被部分修改,从而导致数据更新异常。

4.不能出现数据插入异常

关系模式设计的不好,会导致同一关系中出现多种信息混合存储。(插入、删除异常)
多种信息之间的复杂依赖关系是导致数据不能被正确插入的关键所在。

5.不能出现删除异常

关系模式设计的不好,会导致统一关系中出现多种信息混合存储。(插入、删除异常) 多种信息之间的复杂依赖关系是出现删除异常问题的关键所在。

6.应考虑查询要求、数据组织应合理

关系模式设计时,不仅要考虑数据自身的结构完整性,还要考虑到数据的使用要求。 对于查询实时性要求高的数据库,有必要通过视图等方式增加数据冗余来增加数据库的方便性与可用性。
二、关系模式的分解
  • 对于有问题的关系模式,可以通过模式分解的方法使之规划化。
  • 关系模式的分解是关系规范化的主要方法,关系模式的分解要遵循以下原则:
    1. 一事一地原则:一个关系只能表达一种信息,不能多种信息混合存储;
    2. 无损性原则:分解后的各个关系进行自然连接,能完成恢复以前的信息;
    3. 独立原则:分解后的每一个关系的变化不会影响其他关系。
  • 实例如图:(存在大量数据冗余)

  • 关系模式分解后,如图:(关系分解后,数据冗余度降到最小,且不会再出现插入异常、删除异常和更新异常问题)

  • 可以知道其有如下意义:
    1. 可将每一个数据项转换为最小数据项;
    2. 消除不必要的冗余,并使关系检索得到简化;
    3. 消除插入、更新和删除异常;
    4. 易于使用非过程化的高级查询语言进行查询。

关系模式的好坏有一个规范的方法来评定。关系模式的规范化就是把一个存在数据冗余、插入异常、更新异常和删除异常等情况的关系模式通过模式分解,转换为符合设计要求的多个关系模式的集合。

关系数据库的设计,主要是关系模式的设计,关系模式设计的关键在于关系模式的规范化。


推荐阅读
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
author-avatar
手机用户2502886335
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有