下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

理解数据库设计第二范式

作者:课课家教育     来源: http://www.kokojia.com点击数:2368发布时间: 2018-01-21 08:00:57

标签: 数据库数据库设计编程语言

  在创建一个数据库的过程中,必须依照一定的准则,这些准则称为范式,从第一到第六共六个范式,一般数据库设计只要遵循第一范式,第二范式,和第三范式就足够了。满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。
  第一范式(1NF)无重复的列所谓的第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能与多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原始体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
  第二范式(2NF)属于完全依赖于主键[消除部分子函数依赖]第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列以存储各个实例的惟一标识。
  第二范式声明了需要满足第一范式的所有规则,而且任何不存在对主键的部分依赖。
  考虑一个客户-订单关系,需要存储的内容包括客户ID、客户姓名、订单ID、订单细节和购买日期:
理解数据库设计第二范式_数据库_数据库设计_编程语言_课课家教育  该表满足第一范式,因为它遵守第一范式的所有规则。该表的主键由CUST_ID和ORDER_ID组成。但是它不满足第二范式,因为存在对主键和列的部分依赖。CUST_NAME依赖于CUST_ID,而客户姓名和购买的订单直接没有实际联系。订单细节和购买日期也依赖于ORDER_ID,但是他们不依赖与CUST_ID,因为CUST_ID和ORDER_DETAIL或SALE_DATE之间没有关系。
  为了满足让该表满足第二范式,需要将这些列拆掉成3个表。
  首先,创建一个客户信息表:
范式_数据库设计_设计  然后,创建一个存储订单明细的表:
数据库_编程语言_应用开发  最后,创建一个只包含CUST_ID和ORSER_ID的表,用于记录客户的订单信息:

范式_数据库设计_应用开发
  数据库设计不是一种编程语言那么简单,与面向对象,面向过程无关。数据库设计代表的是一种与应用开发语言完全不同的思想。现在绝大多数的程序,无论任何人采用什么方式进行程序开发,其最终还是会回归到对数据库的操作上。

赞(23)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程