Chinaunix首页 | 论坛 | 博客
  • 博客访问: 249520
  • 博文数量: 91
  • 博客积分: 2016
  • 博客等级: 大尉
  • 技术积分: 820
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-08 23:25
文章分类

全部博文(91)

文章存档

2011年(6)

2010年(6)

2009年(34)

2008年(45)

我的朋友

分类:

2008-07-08 23:59:09

数据库三范式:第一范式:一个不包含重复列的表归于第一范式。

第二范式:如果一个表归于第一范式且只包含依赖于主键的列,则归于第二范式。

第三范式:如果一个表归于第二范式且只包含那些非传递性地依赖于主键的列,则归于第三范式。

三范式设计的好处:减少数据冗余,提高系统可维护性,提高系统可扩展性。

第三范式:能细分则细分每个字段。

比如:一个表,原来设计为:

Create TAble Clothes(
ClothesID int primary key,--ID
Color varchar(10), --颜色
Description varchar(20) --描述
)

那么Color违反了第三范式

于是,第三范式应该这样设计

Create TAble Clothes(
ClothesID int primary key,--ID
ColorID Int, --颜色ID
Description varchar(20) --描述
)

Create Table Color(
ColorID int primary key,
Color varchar(20)
)

Color作为主表,Clothes作为子表,两者用ColorID互联.

 

第四范式用于处理由复杂的复合主键所导致的问题.如果将两个相互独立的属性与第三个属性一起组合为一个主键,并且如果没有第三个属性,仅靠这两个属性不能在实体中真正地起到唯一标识的作用,那么它就违反了第四范式.
例:
假设存在以下情况:
(1)将BaseCamp属性与LeadGuide属性作为复合的主键
(2)将Event属性和Guide属性组合为一个主键
(3)因为它们都含有与导游有关的属性,所以将这三个属性全都放到一个实体之中.

这个例子就违反了第四范式.

第四范式用来识别那些需要划分为多个不同实体的实体.通常,只有当很大的复合主键将过多的对象放到单个实体中的时候才会出现这样的问题.

阅读(1793) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~