快速业务通道

细说数据库范式

作者 佚名技术 来源 数据库编程 浏览 发布时间 2012-03-22
理论性的东西,往往容易把人人都看得懂的东西写成连鬼都看不懂,近似于主任医生开的药方。从前学范式的时候,把书中得概念翻来覆去看,看得痛心疾首深恶痛绝,再加上老师深切误导,最后一塌糊涂。借助网络资源,自己写了一篇,自己是看懂了,希望对大家也有所帮助,有错误帮忙指正。



数据库范式(Normal forms):是用于规范关系型数据库设计,以减少谬误发生的一种准则。



1NF(first normal form):

Table faithfully rePResents a relation and has no repeating groups.

数据库表必须如实地展现“关系”,并且不允许有“重复组”出现。



这样的概念真是令人痛心疾首,我们只好再搬出1NF的的作者之一Chris Date的解释:

1. There''s no top-to-bottom ordering to the rows.

(任意两行没有特定的顺序关系。不存在一个特定的理由要某一行必须在另一行之前。)

2. There''s no left-to-right ordering to the columns.

(任意两列没有特定的顺序关系。)

3. There are no duplicate rows.

(不允许存在重复的行。如果一张表没有Unique Key,事实上它是违反1NF的。)

4. Every row-and-column intersection contains exactly one value from the applicable domain (and nothing else).

(不允许出现空值Null,这一点不同作者是有争议的。事实上我们常常违背这点。)

5. All columns are regular [i.e. rows have no hidden components such as row IDs, object IDs, or hidden timestamps].

(不允许存在隐藏字段。不知道Oracle的Rowid属不属于这个?)



有人从第四点的“one value”大肆挖掘,于是我们就见到了书上这样的定义:“如果一个关系模式R的所有属性都是原子的,即不可再分的基本数据项,则RÎ1NF”。



这一点被认为是1NF的核心,“关系模式R”↔“表”,“属性” ↔ “列”,下面是一种与1NF不一致的情况,通常这是一类很明显的设计缺陷:

ID
Artist
FavoriteColor
……

1
Babyface
Blue,Yellow
……

2
Sting
Green
……





对上例我们不能把它拆分成FavoriteColor1、FavoriteColor2……因为首先我们不能确定该拆分成几列;其次FavoriteColor1与FavoriteColor2在结构、含意方面都是相同的,这实际上也是一类“repeating group”;同时这种设计会导致某些查询困难,比如“有哪些艺人喜欢黄色?”



解决方案是将表拆分成两个:

ID
Artist
……

1
Babyface
……

2
Sting
……





ID
FavoriteColor

1
Blue

1
Yellow

2
Green





总结:

对1NF最核心的 “原子性”,违反此规范的可能性:接近于0%。不过,网上很多帖子说在关系型数据库中根本不可能违背1NF,我认为这是不对的。






2NF(second normal form):

No non-prime attribute in the table is functionally dependent on a part (proper subset) of a candidate key.

不存在非主属性对任一候选键的部分函数依赖。



如果解释完下面几个概念,这个定义就可以读懂了:

Superkey:超级键(L),如果属性或属性组合能唯一标识一条记录,则它是一个Superkey。

Candidate key:候选键,当Superkey只包含一个属性时,则它是一个候选键;当Superkey包含一组属性时,仅当这一组属性不包含另一Superkey时,它是一个候选键。换句话说,候选键是“纯净的”、最小化的Superkey。

Non-prime attribute:非主属性,未在任何候选键中出现的属性,即为非主属性。



举例来说,对表{First_name,Last_name,Address},假定全名不重复,则:

Superkey:

{First_name,Last_name}

{First_name,Last_name,Address}


Candidate key:

{First_name,Last_n

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号