我目前正在进行数据库规范化,我发现许多来源在获得1NF方面存在差异。
例如,这是我的UNF表:
customer
+----+--------+----------------------+
| id | name | phone |
+----+--------+----------------------+
| 1 | achmed | 06-101010, 06-111111 |
+----+--------+----------------------+
| 2 | jozef | 06-232323 |
+----+--------+----------------------+
| 3 | maria | 06-464646, 06-989898 |
+----+--------+----------------------+
一种方法是将多值分成不同的元组,这会产生临时冗余:
customer
+----+--------+-----------+
| id | name | phone |
+----+--------+-----------+
| 1 | achmed | 06-101010 |
+----+--------+-----------+
| 1 | achmed | 06-111111 |
+----+--------+-----------+
| 2 | jozef | 06-232323 |
+----+--------+-----------+
| 3 | maria | 06-464646 |
+----+--------+-----------+
| 3 | maria | 06-989898 |
+----+--------+-----------+
另一种方法是将多值直接拆分为新关系,可能如下所示:
customer
+----+--------+
| id | name |
+----+--------+
| 1 | achmed |
+----+--------+
| 2 | jozef |
+----+--------+
| 3 | maria |
+----+--------+
customer_phone
+----+-----------+
| id | phone |
+----+-----------+
| 1 | 06-101010 |
+----+-----------+
| 1 | 06-111111 |
+----+-----------+
| 2 | 06-232323 |
+----+-----------+
| 3 | 06-464646 |
+----+-----------+
| 3 | 06-989898 |
+----+-----------+
在更高的正常形式之后,两者都会相似,但哪种方法应该是最佳实践'作为1NF,为什么?
答案 0 :(得分:0)
您可以使用三种方法获取1NF数据。
方法1 :(您的第一个选项)将多值拆分为单独的元组。
方法2:添加其他列,即。添加phone1和phone2
方法3 :(您的第二个选择)有父母/子女关系
方法3更好,因为不仅是1NF,还有2NF和3NF。
在规范化数据库时,我们通常希望以3NF结束。我们可以采取缓慢的方法,通过1NF,2NF然后3NF,或者我们可以直接进入3NF。完成这项任务30年后,我自然会产生3NF作为第一步。 1NF和2NF仅在修改现有数据库和项目时间限制时阻止我们实施3NF。