假如一个数据库连第一范式都不满足,那肯定是个设计的很
糟糕的数据库
。
Rules for First Normal Form
Rule 1: 每个属性的取值必须是原子的
每列的取值必须是单个值(single value),稍后举例说明
Rule 2: 每一列的domain必须是一样的
很显然,取值要不然是字符串,要不然是int,总之每列的数据类型不能不一样.
Rule 3: 不存在相同的列名
列名一定不能相同,不然BDMS会产生混淆
Rule 4: 顺序无关紧要
第一列可以放在第二列,第一行也可以放到第二行去,这都不影响。
Time for an Example
表头依次是学生id,学生姓名,学生所选课程
roll_no | name | subject |
---|---|---|
101 | Akon | OS, CN |
103 | Ckon | Java |
102 | Bkon | C, C++ |
解决办法
非常简单,把multi-value给它一个一个拆成single value,如下所示:
roll_no | name | subject |
---|---|---|
101 | Akon | OS |
101 | Akon | CN |
103 | Ckon | Java |
102 | Bkon | C |
102 | Bkon | C++ |
其实第一范式是非常非常基础的要求了,几乎没做什么强的限定。4条约束也是十分自然