规范化表格

时间:2010-11-13 13:36:53

标签: sql normalize

我想知道如何规范化这样的表:

field1|field2|field3
text1 |txt2  | 1,2,5
other1|other2| 1,8,7

field1将重复多次,field2是唯一的(不会重复),field 3 - 用户id。 喜欢收藏的东西。

2 个答案:

答案 0 :(得分:3)

为此表提供一个主键,并使用field3 +此键创建一个新键。

Master 表(修改后的原始表)

field1 | field2 | fID
...    | ...    | 1
...    | ...    | 2

收藏夹表:

fID | field3
1   | 1
1   | 2
1   | 5
2   | 1
... | ...

选择数据

您可以使用JOIN或仅使用WHERE来获取结果。我们说

SELECT field3 FROM Favorites WHERE fID = 1

1,2,5

所以如果我没错,你的问题与主 - 细节/父子模式有关。

<强>资源

答案 1 :(得分:3)

首先,如果字段2是唯一的,那么它应该被声明为主键(或者,至少是唯一索引)。

其次,在field3中有多个值的事实告诉你,field3应该成为一个单独的表,使用一些唯一值(我们刚刚决定为field2)将第一个表链接回(相关)。

因此,您的数据库创建脚本如下所示:

CREATE TABLE MainTable (field2 VARCHAR NOT NULL PRIMARY KEY, field1 VARCHAR)

CREATE TABLE OtherTable (field2 VARCHAR REFERENCES MainTable, field3 INTEGER)

您也可以考虑将单独的主键值添加到第二个值,或者将field2和field3一起作为主键。