【发布时间】:2018-03-30 09:18:43
【问题描述】:
我目前正在练习数据库规范化,我发现很多来源在达到 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 的“最佳实践”,为什么?
【问题讨论】:
-
嗨。你的问题到底是什么?您自己说过:没有标准的“1NF”含义。也没有标准的“UNF”含义。无论您所说的“UNF”是什么意思,都不涉及关系表,因为关系表每列和每行都有一个值,所以你必须告诉我们 i> 你或你的课程/参考想要这样一个数据结构对应的关系。此外,“1NF”的概念是混乱和模糊的,最终是关于良好的设计,但与对更高 NF 的规范化不同的冗余。他们希望你在你的课程中做什么?它的引用说明了什么?
标签: database-design normalization