第一范式
第一范式规定属性域只能包含原子的(简单的,不可分的)值,并且元组中任一属性的值必须是一个来自该属性域的单个的值。因此,对于关系的一个单个的元组,1NF不允许属性值是一个值集,一个元组值或者两者的组合。
1.如果属性值是一个值集,则有三种方法使这样一个关系达到1NF
1).移去使该模式违背1NF的属性。并将其与该关系的主码放在一个单独的关系中。这种技术是将一个非1NF关系分解成两个1NF。
2).扩展码,使得具有值集的属性的所有值在属性中都有一个单独的元组。这种解决方案的缺点是引入了冗余数据。
3).如果知道属性值的最大个数,就可以将该属性分解成多个原子属性。这种情况下,如果大部分的元组都不是具有所有的属性,会引入太多的NULL值。另外,这些位置值之间的顺序还可能会进一步引入一种寄生语义,而这是我们原本所不希望的。对此属性的查询将会变的更加困难。
以上三种解决方案,通常认为第一种最好,因为它不存在冗余,十分通用,并且对值的最大个数也没有限制。
此外,第一范式也不允许他们自身组合的多值属性,这种属性称为嵌套关系,因为每个元组内都会嵌有一个关系。
为了将其规范化为1NF,要把嵌套关系的属性移到一个新的关系中,并且将主码也复制到这新关系中,这样,在这个新关系的主码是部分码与原关系的主码的组合。
这个过程可以递归地应用于有多层嵌套的关系,以便将该关系解除嵌套,成为一组1NF关系。