文章目录

  • 为什么需要规范化?
  • 第一范式
  • 第二范式
  • 第三范式
  • 反规范化
  • 关于外键
  • 总结

大家好,我是只谈技术不剪发的 Tony 老师。今天我们来聊聊关系数据库的规范化设计问题。本文不涉及数据库教材上晦涩难懂的各种公式,而是从实际应用出发,通过简单直白的方式介绍规范化的设计过程和常见范式。

为什么需要规范化?

很多教材和文章都是直接从第一范式开始介绍如何进行数据库设计,完全忽略了对事物前因后果的分析;从而导致我们看完之后,只知道要关系数据库要进行规范设计,但却不知道为什么要这么做。因此,我们首先来给大家介绍一下规范化之前发生了什么。

假设我们需要为某公司设计一个数据库,用于管理员工、部门、职位等相关的信息。首先从直观上考虑,可以将员工信息、所在部门以及职位信息存储到一个表中,如下图所示:


每一行数据对应一个员工的信息,包括他/她所在的部门、职位等。如果真的这么设计,我们在实际应用中很快就会发现以下各种问题:

  • 数据冗余,同一个部门的信息存储了多份,这就需要占用更多的磁盘空间。另外,数据冗余有时候也可能是指在不同的表中存储了重复的信息;
  • 插入异常,假如现在需要成立一个新的部门,由于还没有增加新的员工,因此无法录入这个部门的信息;
  • 更新异常,如果需要修改某个部门信息,需要更新多行数据,效率低下;不小心忽略了某些记录的话,还会会导致数据不一致,尤其是当一个信息存储到多个表中时更容易出现这种情况。
  • 删除异常,如果某个部门的所有员工都被删除,将会导致这个部门的信息也将不复存在;

关系数据库之父 Edgar F. Codd 显然意识到了这些问题,并且为此引入了规范化(Normalization)的设计过程。规范化使用范式(normal form)来定义和衡量,范式就是数据库设计时遵循的一种标准级别。Codd 最早提出了第一范式(1NF)、第二范式(2NF)以及第三范式(3NF),每个范式都基于前面的范式定义,例如第二范式需要先满足第一范式。

关系数据库设计:谈谈规范化技术相关推荐

  1. 面向对象的关系数据库设计

    面向对象的关系数据库设计 一.概念的区分 有些人把面向对象的数据库设计(即数据库模式)思想与面向对象数据库管理系统(OODBMS) 理论混为一谈.其实前者是数据库用户定义数据库模式的思路,后者是数据库 ...

  2. 数据库系列(5)-数据库设计之规范化理论

    一.概述 数据库标准化是EF Codd在1970年代开发的,是许多数据库设计的标准要求.规范化是一种可以帮助您避免数据异常和管理数据的其他问题的技术. 目的: 消除数据冗余(因此使用更少的空间) 使更 ...

  3. 【数据库原理及应用】经典题库附答案(14章全)——第六章:关系数据库设计过程

    [数据库原理及应用]经典题库附答案(14章全)--第一章:数据库基础知识 [数据库原理及应用]经典题库附答案(14章全)--第二章:关系数据库知识 [数据库原理及应用]经典题库附答案(14章全)--第 ...

  4. 数据库安全-分布式数据库-数据仓库技术-反规范化技术-大数据

    继续肝吧,本章主要讲的数据库安全,分布式数据库,数据仓库技术,反规范化技术,大数据,概念性的东西比较多. 1.数据库安全 考的不多,了解下补充自己的知识. 静态转储:即冷备份,指在转储期间不允许对数据 ...

  5. 数据库系统概念(机械工业出版社,第六版)复习——第八章:关系数据库设计

    第八章:关系数据库设计 第一范式(1NF) 如果某个域的元素被认为是不可再分的单元,那么这个域就是原子的(atomic).如果一个关系模式R的所有的属性域都是原子的,我们称关系模式R属于第一范式(fi ...

  6. IC设计基础系列之芯片设计流程3:国内IC设计公司没技术含量?海思员工第一个不服

    来自:http://www.eefocus.com/mcu-dsp/370656/r0 近年来,随着ARM的走红,ARM独特的授权模式也帮助越来越多的中国芯片产业成长起来.尤其是华为海思的成长,更是让 ...

  7. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  8. 数据库设计之规范化和反规范化

    文章目录 一.规范化 二.反规范化 数据库设计的规范化能够经常被提及,但是反规范化很少被涉猎.实际应用中反规范化应用的场景很多.本文主要介绍一下数据库的反规范化. 一.规范化 常见的规范化有数据库设计 ...

  9. 多IDC的数据分布设计(一) – 后端技术 by Tim Yang

    多IDC的数据分布设计(一) – 后端技术 by Tim Yang

最新文章

  1. 捷报 | 2020年度北京市科学技术奖揭晓!“清华数为”荣获科技进步奖一等奖
  2. Python字典排序sorted无效,用匿名函数lambda解决
  3. boost::visit_each的用法实例
  4. python pygame模块_python中pygame模块用法实例
  5. 诺基亚成功转型:引领新一代5G技术 布局物联网
  6. mhvtl虚拟磁带库(提供软件包)
  7. c++:template使用中的常见报错
  8. python圆周率计算_python圆周率计算(带进度条)
  9. SketchUp最适用新手的二十多款SU插件
  10. 谷歌Android flash,取消支持Flash 谷歌TV升级安卓4.2.2
  11. CSDN日报190910:程序员都秃头,商务个个是人精
  12. 一张图回顾Hadoop十年:Hadoop老矣,尚能饭否?
  13. 瑞星4月2日安全综述:网页挂马攻击严重
  14. 革命炉石传说,Gods Unchained
  15. 麒麟820 soc鸿蒙系统,麒麟1020 SoC和麒麟820:华为下一代芯片?
  16. 数据平台权限控制-基于猛犸
  17. 用MATLAB对图形进行水平和垂直灰度投影
  18. Android实现了豆瓣FM的首页效果
  19. 点击按钮,刷新验证码
  20. 抖音广告助手是干什么的?在文章中为大家总结了4点

热门文章

  1. jquery 背景图片_使用jQuery的美丽背景图片导航
  2. 轩辕传奇服务器合并信息,【数据更新】12月11日12月13日部分服务器数据互通公告...
  3. 天猫精灵设备拆机及系统分析
  4. sql复合索引使用和注意事项
  5. ae教程 (六)人物滤镜 (五)lomo色调
  6. 网上赚钱的门路方法,大部分人都是利用这三种方法!
  7. 所有C语言函数的源代码
  8. 【stm32】stm32cubeIDE在freeRTOS无法printf float 浮点数
  9. 网赚平台Clixsense+手机号邮箱短信提醒调查实现轻松网赚
  10. 理解梁友栋-Barsky裁剪算法