关系数据库设计三大范式
关系数据库设计三大范式在开发中,除了系统架构非常重要之外,数据库的设计也非常的重要,因为数据库de设计一旦完成之后,后期想改动就非常困难了.为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式。三大范式第一范式(字段原子性)第一范式指数据库表的每一列都是不可分
·
关系数据库设计三大范式
在开发中,除了系统架构非常重要之外,数据库的设计也非常的重要,因为数据库de设计一旦完成之后,后期想改动就非常困难了.
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式。
范式是符合某一种设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式。
三大范式
第一范式(字段原子性)
第一范式指数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项.
简单说就是字段不可再拆分.
第二范式(确保表中的每列都和主键相关)
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言).
也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中.
有主键,非主键字段依赖主键.
举例:
学号, 姓名, 年龄, 课程名称, 成绩, 学分;
如果存在一张这样的表那么它就不符合第二范式了,因为其包含了学生信息和课程信息两个事务了.
如何避免出现这种情况呢?
细分表,一个表只包含一种事务.
第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关
举例:
id,姓名,年龄,info,城市,省份
这里的城市并不是直接依赖主键id的,因此可以拆分表.
总结
1NF:原子性 字段不可再分,否则就不是关系数据库
2NF:唯一性 一个表只说明一个事物
3NF:每列都与主键有直接关系,不存在传递依赖
根据不同的公司设计表的思路是不尽相同的,有的公司可以允许数据冗余,有的公司可能会拆分很多表.各有优缺点,根据需要和场景设计.
不是一定要严格按照范式来设计数据库.
更多推荐
已为社区贡献1条内容
所有评论(0)