数据库的三范式(记录一些自己的简单理解)

第一范式(1NF):

强调列的原子性,即所有的字段列名(元素属性)不可再分,同时与其它列名不重复

比如【性别】,绝大部分情况之下不能再细分了吧!但是【上午】或者【所在地】,这个就可以再细分咯。

第二范式(2NF):

首先满足1NF。然后是,一张表格只描述一个对象(主键),其它列名(或者副键)完全依赖于对象(主键)。

比如一张学生信息表,有学号,姓名,性别,身高,体重。学号就是主键,其他列名字段完全依赖于主键,也就是说通过主键就可以确定一个学生的信息。换一种说法就是,其他列名(副键)必须被主键影响,解释一下就是当主键值变化时,其他副键也随之变化。

第三范式(3NF):

首先满足2NF。然后是,其他列名(或者说副键)不传递依赖于主键。

比如一张学生信息表,有学号,姓名,班级,班主任。学号是主键,其他列名依赖于主键,满足第二范式。但是,学号确定了班级,班级确定了班主任,这就是传递依赖。不符合第三范式。应该另外建表,单独提及班级和班主任的关系。

BC范式:

每个表中只有一个候选键。(候选键:指每个都不一样的、非空的那几个属性,有着潜在的主键意义。比如说课程的课程号,学生的QQ号

当有多余候选键时,尽量只保留一个候选键作为主键,其他候选键都拿出来单独建表。

但是事实上BC范式太严格了,大多数情况用不到,设计表的时候到第三范式就ok啦

猜你喜欢

转载自blog.csdn.net/weixin_42621338/article/details/82810668