为什么需要2NF?

时间:2009-06-05 02:41:03

标签: database

只是想知道2NF可能没有必要。

Option 1. ORDERS {orderId (pk), custId (fk), total, date, status, ...}
   PARTS {orderId (pk), partsId (pk), qty, unitPrice, description, ...}

Option 2. ORDERS {orderId (pk), custId, total, date, status, ...}
   ORDER_PARTS {orderId (pk)(fk), partsId (pk)(fk), qty, ...}
   PARTS {partsId (pk), unitPrice, description, ...}

我认为大多数人喜欢选项2,因为它是2NF,但我认为选项1更好,因为当我们查询它们时会更简单,更快捷。为什么我们在这种情况下需要2NF?

3 个答案:

答案 0 :(得分:6)

作为初级DBA,您应该将所有放入第三范式。这意味着,一行中的每一列都取决于:

  • 钥匙(1NF)。
  • 整个密钥(2NF)。
  • 除了钥匙(3NF)外什么都没有。

根据经验,您可以选择有时因各种原因(通常是速度)恢复到2NF,但这不是我作为初学者所担心的事情。

答案 1 :(得分:3)

您想要第二个普通表格,因为对于选项1,除非属于某个订单,否则该部分不存在。

答案 2 :(得分:1)

在选项1中,当用户想要更改零件的描述时,您必须在与该零件关联的所有订单上更改它。难道你不觉得难闻的气味?