从UNF标准化到1NF

时间:2017-10-18 13:20:07

标签: database-design normalization

我目前正在进行数据库规范化,我发现许多来源在获得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,为什么?

1 个答案:

答案 0 :(得分:0)

您可以使用三种方法获取1NF数据。

方法1 :(您的第一个选项)将多值拆分为单独的元组。

方法2:添加其他列,即。添加phone1和phone2

方法3 :(您的第二个选择)有父母/子女关系

方法3更好,因为不仅是1NF,还有2NF和3NF。

在规范化数据库时,我们通常希望以3NF结束。我们可以采取缓慢的方法,通过1NF,2NF然后3NF,或者我们可以直接进入3NF。完成这项任务30年后,我自然会产生3NF作为第一步。 1NF和2NF仅在修改现有数据库和项目时间限制时阻止我们实施3NF。