原文地址http://www.ccvita.com/418.html
前言
为什么要写这篇文章呢,从去年年底开始,就和很多做技术的朋友交流过,从数据库设计到数据库架构各个方面的内容。有一些朋友执着于ORM,执着于所谓的数据库设计,却忘记了一切技术是要为业务服务这个基石。当然这文章里也有一些自己的理解,想向大家表达。
范式是什么
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
范式的原理
-
第一范式(1NF)无重复的列
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 -
第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。
例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是属性完全依赖于主键。 -
第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。
那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
范式的说明
- 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
通俗的理解是字段还可以再分吗?如过不能,则是符合1NF的设计。 - 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
简单的解释,比如你和一个女生约会建立一张表,不用每条约会记录都记录她的身高、体重,将身高体重单独的存在一张表中供查询即可。 - 第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
打个比方,比如评论表,如果你将用户ID,用户头像都放在这留言表中,就是不合适的了。用户头像是依赖于用户ID,而不依赖该评论。
我对范式的理解
一个严格恪守数据库设计范式来进行数据库设计的人,必定是个傻球;
一个没有研究过数据库设计范式就进行数据库设计的人,必定也是个傻球;
在现代数据库设计中,尤其是web 2.0的系统中的数据库设计,我可以断言,大多数都是违反2NF、3NF的,少数设计甚至是违反1NF的。数据库设计范式只是对数据库惯用设计的一些说明,并不能定性为标准。
而从数据库的发展来看,以MySQL举例,随着MySQL实现越来越多的功能,它的宣传材料上会越来越多的出现以前被MySQL所摒弃的复杂设计理念,并且宣称这是MySQL所独创或一贯倡导的。这是一个数据库系统发展所必然经历的过程。而这却会给MySQL的使用者以极大的误导,从而忽视了是否新特性是业务所真正需要的。
数据库设计不是一种编程语言这么简单,与面向对象、面向过程无关。数据库设计代表的是一种与应用开发语言完全不同的思想。现在绝大多数的程序,无论任何人采用什么方式进行程序开发,其最终还是会回归到对数据库的操作上(当然如果你的程序只是个教学演示则不在此范围内)。
数据库发展
各种缓存方案,说到底是以key为基础的数据解决方案,而数据库与应用层之间的中间件,为了实现逻辑的简单和高性能,更多的也会是基于key的实现。比如我所使用过的腾讯的TTC。
从下面的列表可以看出当前SNS的网站对于高并发、高性能的数据库解决方案有多么渴求,Facebook贡献了Cassandra、Linkedin贡献了Voldemort、mixi.jp贡献了Tokyo Cabinet和Tokoy Tyrant、green.jp贡献了Flare、甚至包括Google的BigTable。
总结
写到这里,我发现单单是这些新的数据库解决方案就有太多可写的内容,而这些已经超过了本文所要说明的主要内容,而现在所写的内容就全当是个引子吧,我写的很意犹未尽。后面会就反范式设计实例,内存缓存方案、NoSQL数据库等逐渐展开。
PS:这篇文章写的很杂乱,尤其是后面两端,见谅!
相关推荐
详细解析了 1NF 2NF 3NF BCNF的概念,理解并通过例题应用
数据库设计三大范式应用实例剖析 PDF版 简明扼要,绝对的好东西
下述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的。对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握。并逐步做到:在应用中发展,在发展中应用。
数据库的设计的学习,一些基本的介绍,简单明了,还是很容易理解。
数据库的设计的学习,一些基本的介绍,简单明了,还是很容易理解。
以下是性能要求设计阶段需要注意的: 1.3.1 数据库逻辑设计的规范化 数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式: 第 1 规范:没有重复的组或多值的列,这是数据库设计的最低要求...
2. 数据库设计范式 3. 实体关系模型(ER模型)和关系模型 4. SQL语言基础 **第二部分:数据库设计和规划** 1. 数据库设计工具的使用 2. 数据库设计的规范和范式 3. 数据库安全性设计 4. 数据库性能优化策略 **第...
中国海洋大学实验报告 年 月 日 姓名 ... ----------------------- 数据库范式设计实验报告全文共3页,当前为第1页。 数据库范式设计实验报告全文共3页,当前为第2页。 数据库范式设计实验报告全文共3页,当前为第3页。
在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解): 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF是...
数据库设计命名规范全文共6页,当前为第1页。数据库设计命名规范全文共6页,当前为第1页。 数据库设计命名规范全文共6页,当前为第1页。 数据库设计命名规范全文共6页,当前为第1页。 数据库设计命名规范 版本: V1.0...
概述 1 目的 软件研发数据库设计规范作为数据库设计的操作规范,详细描述了数据库设计过程 及结果,用于指导系统设计人员正确理解和开展数据库设计。 2 适用范围 3 术语定义 DBMS:数据库管理系统,常用的商业DBMS有...
在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解): 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF是...
在数据库设计中,为了更好地应 用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准 确的理解): 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF...
商业银行信贷管理系统的数据库设计要点 [摘 要] 信贷管理系统的数据库设计是信贷管理系统建设的重点之一,直接关系到应用系统的架构 、性能、安全等。本文将从系统的业务功能、性能需求方面结合3年来信贷管理系统实施...
数据库设计范式 第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值 都是不可再分的最小数据单位,则称R是第一范式的关系。例:如职工号,姓名,电话号 码组成一个表(一个人可能有一个办公室电话 ...
要设计规范化的数据库,就要求我们根据数据库设计范式――也就是数据库设计的规范原 则来做。但是一些相关材料上提到的范式设计,往往是给出一大堆的公式,这给设计者 的理解和运用造成了一定的困难。因此,本文将...
在数据库设计中,为了更好地应⽤三个范式,就必须通俗地理解 三个范式(通俗地理解是够⽤的理解,并不是最科学最准确的理解): 第⼀范式:1NF是对属性的原⼦性约束,要求属性具有原⼦性,不可再分解; 第⼆范式:2NF...
数据库设计 数据库是数据库应用程序的重要组成部分。一个设计结构合理的数据库对于应用程序的开发效率和程序的性能都是非常重要的。成功的数据库设计意味着数据库能够存储所有必需的数据,而且其存储方式保证能够...
数据库设计 Step by Step (5)——理解用户需求 .......................................................................... 27 数据库设计 Step by Step (6) —— 提取业务规则 ...................................
(范式只能作为参考的标准,未必是合身的.) 多对多关系怎么办法: 自然是将他们的联系独立出来,用单独的表来存储,但这样的实体并不存在,因为它提取的是'联系' 数据库设计思想全文共4页,当前为第2页。数据库设计思想...