Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/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 不确定用于规范化的数据复制规则(特别是1NF和2NF)_Database_Database Design_Normalization - Fatal编程技术网

Database 不确定用于规范化的数据复制规则(特别是1NF和2NF)

Database 不确定用于规范化的数据复制规则(特别是1NF和2NF),database,database-design,normalization,Database,Database Design,Normalization,由于难以回忆几周前我上过的一节课的细节,我正试图使用教程点系列来澄清规范化的过程。在其第页中,给出了以下示例: CREATE TABLE CUSTOMERS( CUST_ID INT NOT NULL, CUST_NAME VARCHAR (20) NOT NULL, ORDER_ID INT NOT NULL, ORDER_DETAIL VARCHAR (20) N

由于难以回忆几周前我上过的一节课的细节,我正试图使用教程点系列来澄清规范化的过程。在其第页中,给出了以下示例:

CREATE TABLE CUSTOMERS(
       CUST_ID    INT              NOT NULL,
       CUST_NAME VARCHAR (20)      NOT NULL,
       ORDER_ID   INT              NOT NULL,
       ORDER_DETAIL VARCHAR (20)  NOT NULL,
       SALE_DATE  DATETIME,
       PRIMARY KEY (CUST_ID, ORDER_ID)
);
它声明这是在1NF中,但是在它的页面中,它声明为了在1NF中,“没有重复的数据组”。在2NF示例中,将存在重复的数据组。例如,如果一个客户订购了两件商品,他们的名字就会重复。这是否会破坏1NF?如果不是,原因是什么?

1NF描述中的“重复组”指的是电子表格用户称之为“垂直合并单元格”的内容。另一种查看方式是行不能包含嵌套表。要将重复组转换为1NF,表中的每一行都有自己的相关值副本,这样我们就有了一个集合,而不是行的层次结构


相同值的多个实例在所有范式中都是完全可以接受的。一个常见的误解是,规范化意味着减少值的重复。相反,它旨在减少值之间关联的重复。

回答您的问题,不会有任何重复的数据组。主键是(CUST_ID,ORDER_ID),对于每个新订单,至少ORDER_ID是唯一的。现在,还将存在一个单独的订单表。当客户订购两个项目时,我们将在此表中插入一个条目,并在订单表中插入另一个条目。这两个条目将具有相同的订单ID。但是,只有订单表将包含此订单中包含两个项目的信息

如果我们将两个项目的信息插入这个表本身,那么我们将有相同(CUST_ID,ORDER_ID)的重复组,这将违反2NF。但这不是我们更新表的方式


前三个NFs的规则如下-

1NF:只是说明所有列都必须具有原子值。如果列需要多个值,请创建另一个表

2NF:需要1NF限定,任何非关键字段都应依赖于整个主键

3NF:需要2NF资格,非关键字段不应依赖于任何其他非关键字段。这意味着除了主键之外,表的列之间不应该有依赖关系


我写了另一个这样的答案,也是关于。如果你写了以上三条规则,你就可以不再关心你在其他地方学到的关于这三条规则的任何东西。定义是完整的。

在您的规则集中,您没有说明需要在1NF中设置主键。我看过一些关于这个的讨论。你能解释一下你为什么没有具体说明吗?@ScottPage:这完全是错的。主键是区分元组的关键。否则,冗余消除的全部目的将丢失。