mysql - 分号分隔符是在 mysql 字段中存储大量 ID # 的好方法吗?

标签 mysql

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

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

谢谢!

最佳答案

对此的长答案是您需要创建一个一对多关联表。适当database normalization原则决定了这一点。

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

此类字段:

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

你说的是创建一个简单的关联表:

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

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

关于mysql - 分号分隔符是在 mysql 字段中存储大量 ID # 的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19102971/

相关文章:

Mysql:其中 ..id != X 不包含 NULL 外键

mysql - MySQL 限制的 SQL Server 等价物

mysql - 我是否要在现有列中插入或更新最大数量?

phpexcel打印mysql数据到excel(只打印数据库1行数据到excel)

mysql - 查看时将三张表合二为一

MySQL - SUM/COUNT 来自不同表的不同列

python - 为什么我的数据库不能在此 Python/Django 应用程序中运行?

php - 如何在 Moodle 上的所有类(class)中注册用户

mysql - 如何将excel文件导入MySQL数据库

mysql - 将查询转换为 'where in clause' 的 mysql 存储过程