数据库范式

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

一、数据库范式的目标及弊端
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 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 254 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 56 关注
  • 反馈

    Communication channel for makers and users.

    126 引用 • 929 回帖 • 266 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖 • 2 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 788 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 295 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 369 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 1 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 165 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1057 回帖 • 1 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 395 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 207 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1278 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 33 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    426 引用 • 1250 回帖 • 599 关注
  • AWS
    11 引用 • 28 回帖 • 11 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 10 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 408 回帖 • 485 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    226 引用 • 476 回帖
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用