关系数据库的几种设计范式介绍:
第一范式:确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列).
如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式.
例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。 第二范式:在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关(一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的部分)
如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式.
例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。 第三范式:在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关(另外非主键列必须直接依赖于主键,不能存在传递依赖).
如果一个关系满足第二范式,并且除了主键以外的其它列都不依赖于主键列,则满足第三范式.
为了理解第三范式,需要根据Armstrong公里之一定义传递依赖。假设A、B和C是关系R的三个属性,如果A-〉B且B-〉C,则从这些函数依赖中,可以得出A-〉C,如上所述,
依赖A-〉C是传递依赖。
例如:订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,每列都和主键列"订单编号"相关,再细看你会发现"顾客姓名"和"顾客
编号"相关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,"顾客姓名"也和"订单编号"相关。为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。
												

最新文章

  1. Windows+Caffe+VS2013+python接口配置过程
  2. .NET对象与Windows句柄(一):句柄的基本概念
  3. 快速增加sql数据
  4. shared memory realm does not exist
  5. HTML5优秀图表控件
  6. macbook pro的usb串口失效的的处理方法
  7. Support for Xpm library: no问题
  8. [CF245H] Queries for Number of Palindromes (容斥原理dp计数)
  9. lucene.net 使用过程中的 几个注意事项(含termquery 和QueryParser 的区别)
  10. 关于C语言中的inline
  11. Linux Java的环境变量搭建
  12. UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming<Problem I>
  13. qml+opencv(二),实现人脸检测
  14. C++第一天学习
  15. redisson实现分布式锁原理
  16. CSS使用心得小结
  17. Python第一部分--Python简介+第一个程序+Python2和Python3介绍 001-016
  18. 【bfs】仙岛求药
  19. 2017-2018-2 20155303『网络对抗技术』Exp2:后门原理与实践
  20. MVC 的那点小事

热门文章

  1. asp+access win2008php+mysql /dedecms 配置总结
  2. Android程序猿必须警示的13个坑
  3. Codeforces Round #389 (Div. 2) 752E(二分答案)
  4. [ARC083F] Collecting Balls [建二分图+环套树定向+建拓扑图+树的拓扑序计数]
  5. DP———7.导弹拦截(emmm冷静分析一波也不叫DP吧,不过有一种DP的方法写)
  6. spring in action 学习笔记五:@Autowired这个注解如何理解
  7. Linux环境准备20160921
  8. AngularJS 作用域与数据绑定机制
  9. [bzoj1051][HAOI2006]受欢迎的牛——强连通分量
  10. [bzoj4513][SDOI2016]储能表——数位dp