数据库范式

本贴最后更新于 2611 天前,其中的信息可能已经时移世易

一、数据库范式的目标及弊端
1、目标
(1)消除插入异常(Insert Anomaly)
插入异常:由于没有某些属性信息,而该属性又不能为 null,导致无法插入。

(2)消除删除异常(Delete Anomaly)
删除异常:只想删除一条信息却连带的删除了其他信息。

(3)消除更新异常(Update Anomaly)
更新异常:更新一条记录却连带的需要更新其他多条记录。

(4)减少数据冗余(Redundancy)
避免同一信息在表中存储多次。
以上三个异常都是由于数据冗余造成的。

2、弊端
应用的范式等级越高,则表越多。
查询时要连接多个表,增加了查询的复杂度。
查询时需要连接多个表,降低了数据库查询性能。
而现在的情况,磁盘空间成本基本可以忽略不计,所以数据冗余所造成的问题也并不是应用数据库范式的理由。

(1)反规范化
①、增加冗余列或派生列。
②、表的合并和分割。

二、函数依赖
函数依赖是属性间的约束关系。
一张表中,在属性(或属性组)X 的值确定的情况下,必定能确定属性 Y 的值,那么就可以说 Y 函数依赖于 X,写作 X → Y。

(1)平凡函数依赖和非平凡函数依赖
①、平凡函数依赖
X → Y 且 Y 属于 X。
②、平凡函数依赖
X → Y 且 Y 不属于 X。

(2)完全函数依赖和部分函数依赖
①、完全函数依赖
X、Y 是表的属性或属性组,若 X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的话),X → Y 不成立,那么我们称 Y 完全函数依赖于 X 。
②、部分函数依赖
X、Y 是表的属性或属性组,若 X → Y,且存在 X 的一个真子集(假如属性组 X 包含超过一个属性的话),X → Y 成立,那么我们称 Y 部分函数依赖于 X 。

(3)传递函数依赖和非函数传递依赖
①、传递函数依赖
X → Y,Y → Z,且 Y 不包含于 X,X 不函数依赖于 Y,则 Z 传递函数依赖于 X。
②、非函数传递依赖
X → Y,Y → Z,且 Y 不包含于 X,X 不函数依赖于 Y,则 Z 传递函数依赖于 X,否则称 Z 非传递函数依赖于 X。

三、多值依赖
多值依赖是元组值之间的约束关系。
在关系 R 中,如果有 X+Y+Z=U,对于任意的,都有 Y 与之对应,且 Y 只与 X 的值有关,与 Z 无关,就称 R 为多值依赖.也就是说对于任意的<X, Yi>,<X, Yj> 都对应一个 y。就是一对多,整张表就是多对多。
任一元组( 课程, 授课对象) 都有一组教师与之对应, 而这组教师仅取决于课程。
就是一个 X 值对应一组 Y 值,X →→ Y。

(1)平凡多值依赖和非平凡多值依赖
①、平凡多值依赖
设 X、 Y 是关系 R(U)的属性, U=X+Y。如果 X →→ Y,则称为平凡多值依赖。
②、非平凡多值依赖
设 X、 Y、 Z 是关系 R(U)的属性, U=X+Y+Z。如果 X →→ Y,则称为非平凡多值依赖。

四、范式
(1)第一范式(1NF,First Normal Form)
不存在复合属性(一个属性由多个子属性复合而成)及多值属性(一个属性的一条记录包含多个值),只存在单值属性。

仍然存在四个问题。

(2)第二范式(2NF,Second Normal Form)
1、满足 1NF;
2、不存在非主属性对任一候选键的部分函数依赖。

插入异常和数据冗余问题有改进,但仍存在,仍存在删除异常和更新异常。

模式分解:

(3)第三范式(3NF,Third Normal Form)
1、满足 2NF;
2、不存在非主属性对任一候选键的传递函数依赖。

四个问题都有改进,但仍存在。

(4)Boyce-Codd 范式(BCNF,Boyce-Codd normal form)
1、满足 3NF;
2、不存在主属性对任一候选键的部分函数依赖与传递函数依赖。

(5)第四范式(4NF,Fourth Normal Form)
1、满足 BCNF;
2、不存在非平凡多值依赖。

就是去掉多对多关系。

参考:
https://www.zhihu.com/question/24696366
http://www.cnblogs.com/CareySon/archive/2010/02/16/1668803.html
http://www.cnblogs.com/waj6511988/p/7027127.html

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    692 引用 • 535 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 159 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 586 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1348 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1706 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 176 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 97 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 490 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    28 引用 • 225 回帖 • 158 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 3 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 4 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 1 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 163 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 617 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 669 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 4 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    143 引用 • 442 回帖 • 1 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖 • 3 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 373 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    178 引用 • 997 回帖
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 91 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 595 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 723 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 644 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 2 关注