First Normal Form(1NF)

Posted by 刘知安 on 2018-11-15
文章目录
  1. Rules for First Normal Form
    1. Rule 1: 每个属性的取值必须是原子的
    2. Rule 2: 每一列的domain必须是一样的
    3. Rule 3: 不存在相同的列名
    4. Rule 4: 顺序无关紧要
  • Time for an Example
    1. 解决办法
  • 假如一个数据库连第一范式都不满足,那肯定是个设计的很糟糕的数据库

    Rules for First Normal Form


    Rule 1: 每个属性的取值必须是原子的

    每列的取值必须是单个值(single value),稍后举例说明

    Rule 2: 每一列的domain必须是一样的

    很显然,取值要不然是字符串,要不然是int,总之每列的数据类型不能不一样.

    Rule 3: 不存在相同的列名

    列名一定不能相同,不然BDMS会产生混淆

    Rule 4: 顺序无关紧要

    第一列可以放在第二列,第一行也可以放到第二行去,这都不影响。

    Time for an Example


    表头依次是学生id,学生姓名,学生所选课程

    roll_nonamesubject
    101AkonOS, CN
    103CkonJava
    102BkonC, C++
    当前已经满足了4个条件中的3个,唯独第一条原子性不满足,subject对应的取值可能有多个,即它是multi-value的,而不是atomic的。

    解决办法

    非常简单,把multi-value给它一个一个拆成single value,如下所示:

    roll_nonamesubject
    101AkonOS
    101AkonCN
    103CkonJava
    102BkonC
    102BkonC++

    其实第一范式是非常非常基础的要求了,几乎没做什么强的限定。4条约束也是十分自然