正常化从UNF到1NF
我目前正在使用数据库正常化,并且我发现很多来源在获取1NF的方法上有所不同。正常化从UNF到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 |
+----+-----------+
两者都会l在更高的正常形式之后最终变得相似,但是为什么1NF应该是“最佳实践”?
有三种方法可以将1NF与数据一起使用。
方法1 :(您的第一个选项)将多值拆分为单独的元组。
方法2:添加额外的列,即。添加PHONE1和PHONE2
方法3:(你的第二个选项)有父/子关系
方法三是不仅能更好地实在是1NF,而且2NF和3NF。
正常化数据库时,我们通常希望以3NF结束。我们可以采取缓慢的方法,通过1NF,2NF,然后3NF,或者我们可以直接前往3NF。在完成这项任务30年后,我自然会生成3NF作为第一步。 1NF和2NF只有在修改现有数据库和项目时间限制阻止我们实施3NF时才会发生。
所以,如果我理解正确,正常形式更多的是关于“不违反这些规则”,并且没有错误的方法,只要规则没有被侵犯?但是方法3可以节省一些时间。 –
@ErwinOlie&SteveWright问题是关于1NF,这与更高的NFs无关。对更高的NF进行标准化也不会通过除期望的1NF以外的更低的NF;可以消除所需的更高NF设计。 – philipxy
[数据库管理系统规范化]的可能重复(https://stackoverflow.com/questions/40623169/normalization-in-database-management-system) – philipxy
嗨。你的问题到底是什么?你自己说过:没有标准的“1NF”含义。没有标准的“UNF”。无论你的“UNF”是什么意思,都不涉及关系表,因为关系表每列和每行都有一个值,所以你必须告诉我们你或你的课程/参考是否打算将这样的数据结构对应于关系。此外,“1NF”的概念是混淆和模糊的,并且最终是关于良好的设计,但与归一化到更高的NF有不同的冗余。他们希望你在*你的课程中做什么?它的参考文献说什么? – philipxy