SQL基础总结(一):关系模型

本系列blog源自前年写的SQL学习笔记,汇总一下发上来。

---------------------------------------------------------------

规范化

父子表图示:由父表画出主键画出箭头指向子表外键。

满足第一范式的表:列包含原子值,没有重复的组。

 

当满足下列条件时第一范式的表自动满足第二范式的表:

1.主键是一个列(也就是说不是复合主键)。

2.表中所有列是主键的一部分。

 

满足第二范式的表:

1.  满足第一范式。

2.  非部分函数依赖(完全函数依赖)。

部分函数依赖是指表中一些组合键(不是全部组合键)的值可以确定一个非键列的值。

 

第二范式表是完全函数依赖,意味着如果组合键中任何一列值改变,将导致非键列的值需要更新。即全部组合键决定一个非键列。

 

满足第三范式的表:

1.  满足第二范式。

2.  没有传递依赖。

传递依赖:一个非键列的值决定另一个非键列的值,则表包含传递依赖。

 

BC范式:是更严格的第三范式版本。BC范式处理那些有多个候选键、组合候选键或重叠候选键的表。如果每个完全函数依赖的列都是候选键,则满足BC范式。

 

满足第四范式的表:

1.  BCNF

2.  没有多值依赖。

多值依赖:一个表至少3列,一列中多个行的值与其它列中一行的值匹配,则发生多值依赖。

 

满足第五范式的表:

1.  满足4NF

2.  并且没有联结依赖。联结依赖是多值依赖的泛化。

5NF的目标是使表不能进一步分解为多个更小的表。

 

在实际数据库中,会看到1NF2NF3NF,偶尔有4NF4NF甚至3NF的表也几乎总是5NF的。

 

非规范化

为了加快查询速度可能需要转而将数据库非规范化。较少的表会减少计算机联结和磁盘I/O操作的开销。这种常见的方法是为了性能而牺牲数据完整性。

非规范化数据的一个普通用途是用作从其它表复制过来数据的永久日志。

猜你喜欢

转载自shensy.iteye.com/blog/1345228