我想知道如何规范化这样的表:
field1|field2|field3
text1 |txt2 | 1,2,5
other1|other2| 1,8,7
field1将重复多次,field2是唯一的(不会重复),field 3 - 用户id。 喜欢收藏的东西。
答案 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一起作为主键。