数据库设计——范式

第一范式(1NF)

  • 它是否有主码
  • 每一个域的名字是否唯一
  • 数据是否原子性
  • 是否有重复或冗余的域

非原子性的实例:

一个人的全名;一个完整的地址;一个更大数据集的部分数据;

例:

下面哪个数据表不符合第一范式?

  1. Title Firstname Surname Full name Address City
    Mr Tom Smith Tom Smith 42 Mill Street London
  2. ID[主码] IP Address username last accessed Activity Result active
    1003[主码] 198.168.1.5 Smith 20081021:14.10 Save file success y
  3. ItemID[主码] Product Description Size Colour Colour Colour
    234 Shoe High Heel 6 red blue brown

      4.

StudentID[主码] Firstname Surname SchoolID* ClassID*
354 Tom Smith 6 5F

说明:

表一:不属于1NF,没有定义主码,因此每一条记录不能保证是唯一的。Full name 是冗余的——数据并非原子性,因为它是 Firstname和Surname的简单组合。 表二:至少属于1NF,它有一个主码。数据是原子性的。每一个域都有唯一的名字。没有重复数据。

表三:不属于1NF,它有主码,数据是原子性,但是color域重复了,并且这些域的名字也是相同的!

表四:属于1NF,符合1NF的所有规则

第二范式(2NF)

  • 表必须已经符合第一范式
  • 非关键属性必须依赖主码的每一部分

第三范式(3NF)

  • 它已经是2NF
  • 没有任何非关键属性依赖其他非关键属性