Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 从UNF正常化为1NF_Database Design_Normalization - Fatal编程技术网

Database design 从UNF正常化为1NF

Database design 从UNF正常化为1NF,database-design,normalization,Database Design,Normalization,我目前正在练习数据库规范化,我发现很多源在实现1NF的方法上有所不同 例如,这是我的UNF表: customer +----+--------+----------------------+ | id | name | phone | +----+--------+----------------------+ | 1 | achmed | 06-101010, 06-111111 | +----+--------+----------------------

我目前正在练习数据库规范化,我发现很多源在实现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,您可以在数据中采用三种方法

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

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

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

方法3更好,因为它不仅是1NF,而且是2NF和3NF


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

因此,如果我理解正确,规范形式更多的是关于“不要违反这些规则”,并且只要不违反规则,就没有错误的方法?但从长远来看,方法3将节省一些时间。@ErwinOlie&SteveWright问题是关于1NF的,这与更高的NFs无关。此外,标准化到更高的NF不会经过更低的NFs,而不是期望的1NF;这可以消除期望的可能更高的NF设计。可能的Hi复制。你的问题到底是什么?你自己说的:没有标准的“1NF”含义。也没有标准的“UNF”意思。无论您所说的“UNF”是什么意思,它都不涉及关系表,因为关系表每列和每行有一个值,所以您必须告诉我们您或您的课程/参考想要这样的数据结构在关系上对应什么。此外,“1NF”的概念是混乱的、模糊的,最终是关于好的设计,但与规范化到更高的NFs不同。他们希望你在课程中做什么?它的参考资料怎么说?