Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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/1/database/8.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
Mysql 它值得正常化吗?_Mysql_Database_Normalization - Fatal编程技术网

Mysql 它值得正常化吗?

Mysql 它值得正常化吗?,mysql,database,normalization,Mysql,Database,Normalization,我正在研究数据库,我遇到了这个问题。例如,如果我有一个表product\u supply,其中包含发票Id(pk)、产品Id(pk)、供应日期、产品数量和价值 | Invoice_ID | Product_ID | Date_Of_Supply | Quantity | Value_Of_Product | ------------------------------------------------------------------------- | AA11111111

我正在研究数据库,我遇到了这个问题。例如,如果我有一个表product\u supply,其中包含发票Id(pk)、产品Id(pk)、供应日期、产品数量和价值

   | Invoice_ID | Product_ID | Date_Of_Supply | Quantity | Value_Of_Product |
   -------------------------------------------------------------------------
   | AA111111111|      5001  | 08-07-2013     |     50   |       200$       |
   | AA111111111|      5002  | 08-07-2013     |     20   |       300$       |
   | BB222222222|      5003  | 10-09-2013     |     70   |        50$       |
   | CC333333333|      5004  | 15-10-2013     |     100  |        40$       |
   | CC333333333|      5005  | 15-10-2013     |     70   |        25$       |
   | CC333333333|      5006  | 15-10-2013     |     100  |        30$       |
正如我们所看到的,该表已经是1NF形式。我这里的问题是。在规范化方面,是否明智地将该表规范化为2NF形式,并使用另一个表,例如带有发票ID(pk)和供货日期的供货日期,或者是否可以使用上表

    | Invoice_ID | Date_Of_Supply |
    -------------------------------
    |AA111111111 |   08-07-2013   |
    |BB222222222 |   10-09-2013   |
    |CC333333333 |   15-10-2013   |

这绝对值得正常化。如果您需要修改一个供货日期,使用1NF,您需要更新多个记录;使用2NF,您只需要更新一条记录。另外,请注意1NF中的冗余数据,其中每个发票id的供应日期都存储了多次。这不仅浪费了空间,而且使处理“列出在日期X和Y之间提供的所有发票”这样的查询变得更加困难

编辑


正如罗伯特·哈维(Robert Harvey)在他的评论中指出的那样(我花了一段时间才理解,因为我因为某种原因变得很胖),如果您已经有一个表,每个
发票ID
都有一行(比如说,“发票表”),然后,您可能应该在该表中添加一列“供货日期”,而不是创建一个新表。

将该表更改为第二个标准格式需要删除第一个标准格式表中的冗余。第一个问题是确定是否存在任何冗余

如果存在冗余,那么我们应该能够创建不涉及第一个表的主键(Invoice_ID)的第二个表。根据第一个表中的非主键列(即产品标识、供应日期、数量和产品价值),不清楚它们是否相互依赖


作为一般经验法则,如果您有一个表,其中所有非PK列都完全依赖于该表的PK列,则该表已经在2NF中。

我理解您的逻辑,但在我看来,您可以将供应日期填入发票表中,除非每个发票有多个供应日期。您似乎对自己的答案非常确定,但您没有向OP提出任何问题,而且从问题中提供的有限信息来看,用法似乎一点也不明显。@RobertHarvey-发布的数据显示每个发票ID的多行具有相同日期。如果第二个正常形式生成OP描述的表,那么,每个发票ID必须有一个日期。@RobertHarvey-我很困惑。为什么2NF不需要第二个表?可能发票头表已经存在。主键是发票ID。@RobertHarvey-OP有表
产品供应
。问题是是否值得创建表
supply\u date
,以便在2NF中放置供应日期。我没有看到提到发票表。没有极客ese这意味着什么?他只需在发票标题记录中填写供应日期(假设存在)?@RobertHarvey的工作一直在进行,目的是完善粗略构思的机器概念,该机器不仅提供反向无功电流,用于单边相位减速机,但也能够自动同步基数语法。这样的机器就是“涡轮增压器……”马特鲍尔:太棒了。我完全理解。现在请原谅我把我的锡纸帽子收起来。。。我的天啊,事实上这有点奇怪。根据我对数据的理解,也就是说。如果提供日期与另一列之间存在某种关系,则情况可能并非如此。“如果您有一个表,其中所有非PK列都完全依赖于该表的PK列,则该表已在2NF中”-当表具有复合键时,这是错误的。如果一个表在1NF中,那么它在2NF中,而且任何非键值都依赖于整个键,而不是它的适当子集。在OP的示例中,第二个标准失败,即使它满足您的标准。