数据库范式:掀起你的盖头来(1)

1                 介绍

凡是做过数据库设计的,只要不是大菜鸟,听到范式两个字,马上就会在脑海中浮现1NF,2NF,3NF,BCNF这些术语,但是若要大家详细的将这几个东东的专业定义描述出来。。。。。。呵呵,至少大部分人都会晕的,什么功能依赖、函数依赖,~!@#¥%……&*,my god!反正我是记不住:)

 

但既然上了IT这条贼船,就无法避免和数据库设计打交道,丑媳妇总是要见公婆的:)既然无法避免,那就让我们勇敢的面对,揭开数据库范式的神秘面纱,看看到底是一个丑媳妇还是一个俊媳妇!!

 

2                 一句话范式

数据库范式本身的定义这里就不啰嗦了,大家随便上网搜索或者找本教材看看,保证随处可见,我在这里给大家用通俗的语言描述出来。

在详细探讨之前还是啰嗦一句:千万要注意:范式只是在设计表的时候用的原则,数据库其它的设计例如索引、视图、触发器、存储过程等都和范式没有关系。

2.1                                 第一范式1NF

1NF在数据库设计中其实很简单:“列不可再分”。

什么叫列不可再分呢?意思就是每一列只包含一个属性,所有属性的类型都是一样的。

可能有人看到这里会说:晕,这还用说,谁设计的数据库表的列还可以再分呢?其实这句话只对了一部分,下面我们详细分析为什么叫只对了一部分。

我们目前说的和用的数据库都是关系数据库,而关系数据库中是不可能设计一个列能够包含两个不同类型的属性的;但大千世界,无奇不有,除了关系数据库,还有其它的数据库,例如面向对象数据库、XML数据库,这种数据库就可以设计一个属性再包含多个子属,所以1NF在关系数据库中是天然满足的,而在其它类型数据库就不一定了。

看了上面这段话,你是不是长吁一口气,心里踏实了,以为就可以从此不管1NF了呢?非也,数据库只做了第一层保证,但你还是可以设计不符合1NF的表来。下面我们给几个简单的例子,看看我们如何不遵守1NF。

例子1:Student表有一个属性name,类型为字符串。

这个是最简单的例子,估计很多人都如此设计过,数据库也不会拒绝我们创建这样的表,但这个设计是不符合1NF的,为什么?很简单的,名字其实是“有名有姓”的,这其实就是两个属性。比如我们要查找姓“李”的同学有多少,或者查询同名(例如“狗剩”)的有哪些。这样的查询如果只有一个name列,呵呵,只能用like来查询了,这样不同的名字方式(例如中国人姓在前,美国人姓在后),like都需要修改,而且like还不能利用索引加快查询速度。

例子2:Custom表中有一个属性Address。

大家可以自己按照上面的例子自己分析一下,看看会有什么问题……..

 

担心一次写太多,大家会晕,故分几次来写,未完待续。。。。。。

时间: 2024-11-18 06:09:30

数据库范式:掀起你的盖头来(1)的相关文章

数据库范式:掀起你的盖头来(3)

3                 范式的两面:天使与魔鬼 有人说:掌握了数据库范式你就是数据库设计高手了!! 呵呵,成为高手看来也很简单的啊:)但此话对了一半,掌握数据库范式可以算一般高手,因为毕竟能够掌握范式并应用的人不算很多:但算不上高高手,为什么呢?因为范式不是万能的,也有自己的适应范围和局限性,如果到处不加原则和场合的使用,它很可能就是一个带给你梦魇的魔鬼! 首先我们看看数据库范式的目的是什么?范式的主要目的有三个: 1)       减少数据冗余 2)       优化表结构 3) 

【转载】数据库范式

数据库范式:掀起你的盖头来(1)  [介绍]        凡是做过数据库设计的,只要不是大菜鸟,听到范式两个字,马上就会在脑海中浮现1NF,2NF,3NF,BCNF这些术语,但是若要大家详细的将这几个东东的专业定义描述出来......呵呵,至少大部分人都会晕的,什么功能依赖.函数依赖,~!@#¥%--&*,my god!反正我是记不住:)        但既然上了IT这条贼船,就无法避免和数据库设计打交道,丑媳妇总是要见公婆的:)既然无法避免,那就让我们勇敢的面对,揭开数据库范式的神秘面纱,看

初识数据仓库(Data Warehousing)-“掀起你的盖头来”

数据 初识数据仓库(Data Warehousing)-"掀起你的盖头来"我在这里就说说我初学的一些认识和看法,希望这些能够作为一些简单的介绍给那些初学的朋友们,更希望起到抛砖引玉的效果.    说到数据仓库,我们了解一下他产生的背景.自从DBASEⅢ(dBase是dos年代发展过来得数据库管理程序,先归属于Borland旗下)的兴起,数据库的应用进入了个人计算机,使得中小企业也纷纷进入商业性的数据库应用阶段.这时的数据库应用主要是进行数据的记录,我们称这类为OLTP(线上事务处理)数

《Android 应用案例开发大全(第3版)》——第1.2节掀起Android的盖头来

1.2 掀起Android的盖头来 自从Android发布以来,越来越多的人关注Android的发展,越来越多的开发人员在Android系统平台上开发应用.那么,是什么使Android备受青睐.在众多移动平台中脱颖而出呢? 1.2.1 选择Android的理由 Android基于Linux技术开发,由操作系统.用户界面和应用程序组成,允许开发人员自由获取.修改源代码,也就是说这是一套具有开源性质的移动终端解决方案,具有开放性.平等性.无界性.方便性以及硬件的丰富性等特点.下面对以上各个优点进行简

《Android 应用案例开发大全(第3版)》——第1章,第1.2节掀起Android的盖头来

1.2 掀起Android的盖头来自从Android发布以来,越来越多的人关注Android的发展,越来越多的开发人员在Android系统平台上开发应用.那么,是什么使Android备受青睐.在众多移动平台中脱颖而出呢? 1.2.1 选择Android的理由Android基于Linux技术开发,由操作系统.用户界面和应用程序组成,允许开发人员自由获取.修改源代码,也就是说这是一套具有开源性质的移动终端解决方案,具有开放性.平等性.无界性.方便性以及硬件的丰富性等特点.下面对以上各个优点进行简单介

数据库范式

 数据库范式那些事:  http://www.cnblogs.com/careyson/archive/2010/02/16/1668803.html 理解数据库式: http://www.cnblogs.com/myaspnet/archive/2011/06/15/2081652.html 细说数据库范式: http://www.cnblogs.com/kissknife/archive/2009/10/26/1590029.html       对表进行第一范式(1NF)     如果一个

细说数据库范式

理论性的东西,往往容易把人人都看得懂的东西写成连鬼都看不懂,近似于主任医生开的药方.从前学范式的时候,把书中得概念翻来覆去看,看得痛心疾首深恶痛绝,再加上老师深切误导,最后一塌糊涂.借助网络资源,自己写了一篇,自己是看懂了,希望对大家也有所帮助,有错误帮忙指正.   数据库范式(Normal forms):是用于规范关系型数据库设计,以减少谬误发生的一种准则.   1NF(first normal form): Table faithfully represents a relation and

数据库范式解析

范式的作用:消除数据冗余.更新异常.插入异常和删除异常.  1NF  如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF. 数据库表中的字段都是单一属性的,不可再分.这个单一属性由基本类型构成,包括整型.实数.字符型.逻辑型.日期型等. 不满足第一范式就不是关系型数据库! 2NF  若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF 表中的属性必须完全依赖于全部主键,而不是部分主键.所以只有一个主键的表如果符合第一范式,那一定是第二范式. 3NF 在第二范

浅述SQL Server的语句类别 数据库范式 系统数据库组成

前言 终于等到这一天,我要开始重新系统学习数据库了,关于数据库这块,不出意外的话,每天会定时更新一篇且内容不会包含太多,简短的内容,深入的理解. SQL语句类别 SQL语句包括以下三个类别 (1)数据定义语言(Data Definnition Language)即DDL,我们数据最终从何而来,当然首先必须得建立表,所以它包括CREATE.ALTER.DROP表. (2)数据操作语言(Data Manipulation Language)即DML,我们对数据需要进行什么操作,当然无非就是增删改查,