我想知道如何规范化这样的表:
field1|field2|field3
text1 |txt2 | 1,2,5
other1|other2| 1,8,7
field1 将重复多次,field2 是唯一的(不会重复),field 3 - 用户 ID。喜欢的东西。
首先,如果字段 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 一起作为主键。
给这个表一个主键,并用field3+这个键创建一个新的。
主表(修改后的你原来的表)
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
因此,如果我没记错的话,您的问题与主详细信息/父子模式有关。
资源