大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说数据库范式:三大范式、BC范式和反范式化,希望您对编程的造诣更进一步.
一、什么是数据库范式
无规矩不成方圆,同理范式是数据表设计的一些约束和规范。为了让各个属性间的关系更加合理,减少数据冗余。
一般来说,主要满足 3NF 就可以了,因为范式过高,虽然对数据关系有更好的约束,可也会导致数据表的增加,从而让数据库 IO 更加繁忙,冗余度更低。当然,凡事没绝对,有时为了提高某些查询性能,需要反规范化。
二、三大范式和 BC 范式
一般来说,数据表设计主要遵循三大范式:1NF(第一范式)、2NF(第二范式)和 3NF(第三范式)。越高的范式必须要符合比它低的范式要求,比如 2NF 除了要满足自身的要求,还须满足 1NF 的要求。
- 1NF(第一范式):是范式中最基本的范式,为了避免重复性,要求每个列的值域由原子值组成和每个字段的值都只能是单一值。
- 2NF(第二范式):要求表数据和表键(主键和候选键)有完全依赖关系。每个非键属性必须独立于任一候选键的一部分属性。
-
3NF(第三范式):要求非主属性之间应该是独立无关联,只和候选键有关联。不允许非主属性被另一个非主属性决定,但允许主属性被非主属性决定。
-
BCNF(BC 范式,Boyce-Codd normal from):是基于 3NF 的改进范式。与 3NF 主要区别在于任何属性都不能被非主流属性所决定。
三、反范式化
有时为了提高性能和读取效率,允许少量的数据冗余。也就是要反范式化,用空间换时间。
范式化和反范式化的区别:
- 范式化可以减少数据冗余,但因为查询需要多表关联,很难优化不同表中的索引。
- 反范式化能减少表的关联,增加读取效率,可以更好地优化索引,但数据会冗余。
四、关系型数据库的键和键属性
-
超键:能够标识多行的属性集。
-
候选键:不含有多余属性的超键。
-
主键:每个数据表只能有一个主键,它不能为空值(NULL)。因为主键是用于唯一定位数据的,确认了不好再修改,所以最好是完全与业务无关的字段。
如果是 INT 自增类型,数据上限是约 21 亿。BIGINT 自增类型上限约有 922 亿。
-
外键:如果表 A 中某个属性不是本表主键,而是另一个表 B 的主键,即这个属性是表 B 的外键。也可以不设置外键约束,仅靠应用逻辑保证数据操作正确性。
关联关系:一对一、一对多和多对多。
-
主属性:包含任一候选键中的属性。
-
非主属性:不包含任一候选键中的属性。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7307.html