1

我有一个数据库,它将存储数百万个 Post ID#s。我需要将每个帖子 ID # 与多个用户 ID # 相关联(每个帖子 ID 大约为 20-50)。我正在考虑在 PHP 中构建一个以分号分隔的列表,然后将其插入到 post ID 行的 DB 字段中。

这是一种相对有效和好的方法吗?

谢谢!

4

2 回答 2

4

对此的长答案是您需要创建一个一对多的关联表。适当的数据库规范化原则规定了这一点。

您的方法的问题是将列表作为分号连接的列表序列化到数据库中,除非您可以反序列化,否则数据本身实际上是无用的。

此类字段:

  • 无法有效索引。
  • 可以增长到超过列的存储容量。
  • 需要上下文才能正确使用。
  • 无法使用外键完整性检查。
  • 不能轻易修改。
  • 删除整体需要重写整个字段。
  • 不能直接查询。
  • 不能用于JOIN操作。

您正在谈论创建一个简单的关联表:

CREATE TABLE user_posts (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT,
  post_id INT
)

您将有一个UNIQUE索引user_id,post_id以确保您没有重复项。包含一id列主要是为了您可以删除特定行而无需指定用户+帖子对。

于 2013-09-30T20:17:14.820 回答
1

不,这是一个非常糟糕的主意。

Aforeign key是你想要的。基本上,对于每一个,post_ID您还将 存储USER ID为外键。

因此,如果您有一个POSTS表,则添加一列User_ID(或Poster_ID)并USER IDUSER表中引用。

我认为您应该查看一些基础知识 - 请参阅链接:

于 2013-09-30T20:15:54.613 回答