0

我想知道以下内容是否对 1NF/2NF/3NF 有效。我需要将多个“位置 ID”存储在一个表中(对于需要列出多个位置的链接表)。阅读 about.com 上的文章(此处)后,看来我不能使用重复的列,IE,

LinkedLocationID (referenced from another table)  
LocationID1 
LocationID2  
LocationID3

我不能使用非原子领域,IE,

LinkedLocationID
LocationIDs

那么,如何在不破坏 1NF 的情况下包含三个重复列?我既需要为 Location 存储多个值,又需要使我的数据库符合 3NF。谢谢。

4

4 回答 4

0

您应该有一个单独的 LinkedLocationLocations 表,每个组合都有一行

所以使用你的第一个例子

LinkedLocationID | LocationIDs
1                | A,B
2                | B,C

变成

LinkedLocationID | LocationID
1                | A
1                | B
2                | B
2                | C
于 2012-09-26T14:15:52.260 回答
0

您在两个实体之间使用交叉表,如下所示:

Item
=====
ItemID
...


ItemLocation
============
ItemID
LocationID
...



Location
========
LocationID
...
于 2012-09-26T14:15:58.673 回答
0

您的问题缺少您要链接的内容,但经典的解决方案是

Thingies
ThingyID
...

Locations
LocationID
...

ThingyLocations
ThingyID FK to Thingies
LocationID to Locations
于 2012-09-26T14:17:34.470 回答
0

“有效”可能不是正确的思考方式。有很多问题,有些问题不正常化是有道理的。在我看来,如何使用数据更重要。

现在,如果规范化是您唯一关心的问题,那么您不应该将三个 LocationID 存储在一个表中。您需要一个将 LocationID 链接到 LinkedLocationID 的表。所以该表可能如下所示:

LocationLinkedLocationId - LinkedLocationID - LocationID
1                          1                  1
2                          1                  2
3                          2                  1
4                          3                  1
于 2012-09-26T14:18:20.927 回答