第一次正常形式违规

时间:2015-04-09 02:33:45

标签: mysql sql database relational-database normalization

假设用户可以拥有多个电话号码。

我可以理解,下面的第一个表违反了1NF,因为重复了userID=2

+--------+-------+
| userID | phone |
+--------+-------+
| 1      | 1010  |
| 2      | 1020  |
| 2      | 1021  |
| 3      | 1030  |
+--------+-------+

但这第二张桌子是否也违反了1NF?是的,它似乎是一个糟糕的,不灵活的设计 - 但它是否违反了1NF?

+--------+--------+--------+
| userID | phone1 | phone2 |
+--------+--------+--------+
| 1      | 1010   |        |
| 2      | 1020   | 1021   |
| 3      | 1030   |        |
+--------+--------+--------+

2 个答案:

答案 0 :(得分:1)

违反了1NF。 1NF要求

  1. 表格中没有多值字段。
  2. 表中没有重复的组。
  3. phone1phone2等重复群组,违反1NF。

    重复userID = 2并不违反1NF本身。

答案 1 :(得分:0)

当您拥有第三个电话号码时,您的第二个设计会发生什么?它可能不违反1NF,但设计不佳。例如,我有家庭电话号码,工作电话号码,移动电话号码和传真号码。我在工作中使用的ERP程序有一个用户联系人'表中包含每个数字的字段。这样可以更容易输出,但如果一个人拥有多个给定类型的数字,有时会导致问题。

处理多个电话号码的标准方法是拥有一个包含字段所有者,电话号码和说明的单独表格。