我需要在表格的某个字段中存储多个id,或者添加另一个表来存储id。
每个成员基本上都会有喜欢的文章。每篇文章都有一个id,当用户点击Add to favorites按钮时会存储该ID。
我的问题是:
我是否创建了一个字段,并在此字段中添加多个ID,还是创建一个表来添加这些ID?
这样做的最佳方式是什么?
答案 0 :(得分:3)
这是一个多对多的关系,你需要一个额外的表来存储user_id和article_id(分别是用户和文章表的主键)。
答案 1 :(得分:2)
您应该创建一个新表,而不是在一列中使用逗号分隔值。
保持数据库规范化。
答案 2 :(得分:1)
你create a separate table,这就是关系数据库中的工作方式。另一个解决方案(一列中以逗号分隔的ID列表)将导致无法维护的数据库。例如,如果您想知道文章被收藏的次数怎么办?你不能在像这样的列上写查询。
您的表需要存储用户的id和文章的id - 这些是指相应表的主键。对于查询,您可以使用JOIN
s或嵌套SELECT
查询。
答案 3 :(得分:0)
正如lafor已经指出这是一个多对多的关系,你最终会得到三个表:用户,文章和最爱:
CREATE TABLE user(
id INT NOT NULL,
...
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE article (
id INT NOT NULL,
...
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE favorite (
userID INT NOT NULL,
articleID INT NOT NULL,
FOREIGN KEY (userID) REFERENCES user(id) ON DELETE CASCADE,
FOREIGN KEY (articleID) REFERENCES article(id) ON DELETE CASCADE,
PRIMARY KEY (userID, articleID)
) ENGINE=INNODB;
如果您想要选择所有用户喜爱的文章,请使用JOIN:
SELECT * FROM favorite f JOIN article a ON f.articleID = a.id WHERE f.userID = ?
如果您想知道为什么要使用此架构,我建议您阅读database normilization。如果在一个字段中有多个ID,您甚至会违反第一个正常形式,从而陷入痛苦的世界......