【第四周】学习心得+思维导图
学习心得
一、第一范式(1NF)
要求:
· 每一个属性都不能再分割,都是原子项。
满足第一范式的数据表有什么好处呢?
1NF保证了数据库的每一列都是不同的。每一列的数据彼此没有任何交集。
这样做:
首先减少了数据的冗余,节省存储空间。如果不满足第一范式,一些数据项有可能包含相同的”子项“,造成存储空间的浪费。
其次,每一列没有重复的数据意味着不需要考虑数据更新的同步问题。不用担心在一列中更新了数据,还要在另一列做相应修改。
另外,每一列的数据不可再分,在某些情况下减少了数据访问的层数,提高数据访问速度。
二、第二范式(2NF)
要求:
· 满足第一范式
· 非主键属性均完全依赖于主键
非主键属性和主键可以有什么关系?1、完全依赖。2、部分依赖。3、不依赖(没关系)。
2NF消除了属性对主键的部分函数依赖。
2NF要求非主键属性完全依赖于主键,就是在消除非主键属性对主键的部分函数依赖。既然是部分函数依赖,暗含着说主键是一个复合键(由多个属性组成的键)。
符合2NF能给我们带来什么好处呢?
首先,2NF可以在一定程度上消除冗余,节省存储空间。
其次,2NF简化了表的逻辑关系,使得表的结构更加清晰。
三、第三范式(3NF)
要求:
· 满足第一、二范式
· 所有非主键属性之间没有函数依赖关系
3NF在2NF的基础上,进一步消除非主键属性之间的函数依赖关系。实质上,也是消除非主键属性中的传递依赖。
3NF的优点很明显,可以减少数据冗余,节省存储空间。既然存在函数依赖,某些数据项就能够通过其他数据项计算得出,很可能存在数据冗余。
四、BC范式(boyce-codd范式,BCNF)
要求:
· 满足1NF、2NF、3NF
· 所有属性(包含主键属性和非键主属性)都不传递依赖于任何候选键
BC范式的好处是进一步消除了表中的依赖关系,减少了冗余。例如在上例中,如果我们采用未修改的版本,如果想要存储一个10个玩家(不含房主)的房间,就需要10条这样的记录才可以。
五、第四范式
要求:
· 满足1NF、2NF、3NF
· 表中不能包含一个实体的两个或多个多值属性
所谓多值属性,指的是某个属性可以包含多个值。这个属性的(多个)取值,被另一个属性决定。也就是说,一旦确定了某个属性,另一个属性的多个取值就一起确定了。
第四范式在第三范式的基础上,消除多值依赖。
4NF的使用可以降低数据冗余,并且减少数据处理复杂度。
六、第五范式
要求:
· 满足1NF、2NF、3NF、4NF
· 如果将表中的多元关系分解一个一个的二元关系,一定会丢失信息
第五范式在4NF的基础上,进一步消除依赖。第五范式的要求明,如果不用这个表就不能正确说明数据之间的联系。所以符合5NF的表已经没有任何多余依赖的存在了。所以第五范式是一个比较理想的范式。
思维导图