mysql - 如果我想制作一个类似facebook的 "reactions"数据库,这种架构有意义吗?

标签 mysql sql relational-database

我试图了解以下设计对于 Facebook react 之类的内容是否有意义。我的想法是,每个 react 最终都是一个 user_ids 列表。 例子: 类似 react =[19,24,36,75] 其中 [19,24,36,75] 是人们的用户 ID

CREATE TABLE users (
  user_id BIGINT(20) unsigned NOT NULL auto_increment,
  user_name varchar(255) NOT NULL UNIQUE,
  first_name varchar(255) NOT NULL,
  last_name varchar(255) NOT NULL,
  phone_number varchar(255) NOT NULL UNIQUE,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY(user_id)
) ENGINE = InnoDB;

CREATE TABLE posts (
  user_id BIGINT(20) unsigned NOT NULL auto_increment,
  post_id BIGINT(20) unsigned NOT NULL auto_increment,
  post_text varchar(255) NOT NULL,
  reaction_happy BIGINT(20) unsigned NOT NULL auto_increment
  reaction_sad BIGINT(20) unsigned NOT NULL auto_increment
  reaction_surprised BIGINT(20) unsigned NOT NULL auto_increment
  reaction_like BIGINT(20) unsigned NOT NULL auto_increment
  PRIMARY KEY (post_id)
)

最佳答案

您需要第三张 table 。从 posts 表中删除 reaction_happyreaction_sad 等。然后做这样的事情:

CREATE TABLE reactions (
  reaction_id BIGINT(20) unsigned NOT NULL auto_increment,
  user_id BIGINT(20) unsigned NOT NULL,
  post_id BIGINT(20) unsigned NOT NULL,
  type ENUM('happy','sad','surprised','like') NOT NULL,
  PRIMARY KEY (reaction_id)
)

此外,为了提高性能,您可能希望在所有 ID 列上添加索引。当您尝试执行某些操作时,您需要将 LEFT JOIN usersreactions 加入到 posts 表中就像以 Facebook 呈现方式呈现主要提要一样。

关于mysql - 如果我想制作一个类似facebook的 "reactions"数据库,这种架构有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57733244/

相关文章:

mysql - 优化一个简单的 MySQL 查询以摆脱文件排序

sql - 循环更新数据库记录?

mysql - 从两个表中选择整行

php - 是否可以在数据库中插入对象?

mysql - 在插入之前检查重复项的插入语句

sql - 如何检查sql server中的所有存储过程是否正常?

mysql - SQL 缺少记录问题

sql-server - 多态关联 - 总是不好吗?

sql - 对除主键之外的所有列定义 UNIQUE 约束是一个好主意吗?

php - 编辑php文件仅显示错误