浅谈范式

范式

要求:后一范式都是在前一范式已经满足的情况下用来“加强要求”。

第一范式(1NF)

原子性:存储的数据应该具有“不可再分性”

不良做法示例:

在这里插入图片描述

例如:如果要查询籍贯是江西的学生,就需要把所有的学生字段查询出来,然后做字符串的切割,最后再比较查询的籍贯是“江西”。
可见,其违反了原子性性范式:学生字段的数据存储多个可分的数据。

修改后:

在这里插入图片描述

第二范式(2NF)

唯一性:消除非主键依赖连个主键中的部分字段
需要实现每一行数据具有唯一可区分的特征,并不能有部分依赖关系

  • 通常,给一个表加主键,就可一做到“唯一可区分”
  • 但是主键有这样的情况:
  • 1.设定一个字段为主键:此时,表示该一个字段的值就可以明确确定一行数据。
  • 2.设定多个字段为主键(联合主键):表示只有这多个字段的值都确定后才能确定一行数据。

不良做法:

在这里插入图片描述

改良后:

在这里插入图片描述

第三范式(3NF)

独立性:消除传递依赖(非主键值不依赖于另一个非主键值,都应该依赖于主键)

常见错误:

  • C依赖B,B依赖A——这就是传递依赖。
    则消除该传递依赖的的通常做法,就是将C依赖于B的数据,分离到另一个表中。

不良例子:

在这里插入图片描述

改良后:

在这里插入图片描述

总结

通常,在实践中,满足3范式只要做到“一个表只存一种类型数据”基本就可以实现。
另外,范式不是绝对要求,有时候我们为了数据的使用方便,还会(需要)故意违反范式。

猜你喜欢

转载自blog.csdn.net/kallenAB/article/details/125861252