1、什么是范式?

范式概念是库恩范式理论的核心,而范式从本质上讲是一种理论体系。“按照既定的用法,范式就是一种公认的模型或者模式”,范式是一种对本体论、认识论和方法论的基本承诺。范式有以下几个特点:

  • 范式在一定程度内具有公认性。
  • 范式是一个由基本定律、理论、应用以及相关设备等构成的一个整体。
  • 范式还为其领域提供了可模仿的成功案例

    2、什么是数据库范式?

    结合以上的概念,简单理解就是:在数据库设计领域建立的科学、规范的数据存储方式。数据库设计范式是我们在设计数据库结构过程中所需要遵循的规则和指导方法,满足范式的数据库设计,无论是存储性能还是设计结构,都要优于未满足的数据库设计。

    3、数据库三范式

    (1)第一范式(1NF)

    数据库表中的每一列(字段),必须是不可拆分的最小单元,确保每一列的原子性。也就是说,每一列都必须有唯一、确定、没有歧义的定义,不可拆分。第一范式是关系型数据库设计的最低要求。
    数据库设计三范式 - 图1
    上图就不是一个关系型数据库的表,因为在高级职称上又分为“教授”和“副教授”两种,不满足第一范式,那么该如何转换为符合第一范式呢?
    数据库设计三范式 - 图2
    很简单,将表横向、纵向展开,确保每一列都有其最小的明确含义。
    还有一个要求,那就是尽量使用一条记录去描述一个物品、业务、事件等业务模型的信息,当存在属性含义相近或者相同的列,要加以合并。

    (2)第二范式(2NF)

    满足第一范式,并且所有非主键列依赖于所有主键列。
    看这个例子:
    数据库设计三范式 - 图3
    订单编号和商品编号作为联合主键,但是表中的客户相关信息,跟表的主键(订单编号,商品编号)不完全相关,而是只与订单编号相关,这就违反了第二范式,需要再拆表为:
    数据库设计三范式 - 图4
    以达到表中的每一列都跟主键有完全依赖的关系,其实第二范式主要是针对联合主键而言,符合第一范式的单主键表都满足第二范式(在不冗余字段的情况下)。

(3)第三范式(3NF)

满足第二范式,并且确保每列都跟主键直接相关,而不是间接相关

第三范式要求的是:所有的非主键列不可以存在依赖传递,即所有的非主键字段都是相互独立的
举个栗子:比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)这样一个表结构,就存在上述关系。 学号—> 所在院校 —> (院校地址,院校电话)。我们应该拆开来,如下:
(学号,姓名,年龄,性别,所在院校)—(所在院校,院校地址,院校电话)