【发布时间】:2015-03-20 04:07:38
【问题描述】:
我有一个 MySQL 数据库,用于存储我的服务提供的用户电子邮件和新闻文章。我希望用户能够保存/收藏他们以后想阅读的文章。
我的计划是在我存储用户电子邮件的表中创建一个列,其中包含以逗号分隔的唯一 ID 字符串,其中唯一 ID 是在添加到每篇文章时分配给它们的值数据库。这些文章存储在单独的表中,我使用UUID_SHORT() 生成BIGINT 类型的唯一ID。
例如,假设在我存储文章的表中,我有
ArticleID OtherColumn
4419350002044764160 other stuff
4419351050184556544 other stuff
在我存储用户数据的表中,我会有
UserEmail ArticlesSaved OtherColumn
examlple1@email.com 4419350002044764160,4419351050184556544,... other stuff
examlple2@email.com 4419350002044764160,4419351050184556544,... other stuff
表示前两个用户保存了 ID 为 4419350002044764160 和 4419351050184556544 的文章。
这是在数据库中存储此类内容的正确方法吗?如果有更好的方法,谁能解释一下?
我正在考虑的另一个选项是为每个用户创建一个单独的表,我可以将他们保存的文章的 ID 存储到一个列中,尽管这篇文章的答案是这不是很有效:Database efficiency - table per user vs. table of users
【问题讨论】:
-
为什么不为 UserArticle 创建单独的 XREF 表,在那里您可以存储 UserID 和相应的 ArticleID。
-
外部参照表是否与常规表相同?我仍在浏览这个网站以了解它们:developerdrive.com/2011/12/the-xref-table-for-mysql
-
是的,只是一个带有交叉引用的常规表。像这样:CREATE TABLE UserArticle(UserID INT, ArticleID BIGINT)
标签: php mysql sql database storage