php - 支持多种内容类型的 MySQL 结构

标签 php mysql feed

我正在构建一个网络应用程序,它(理想情况下)允许用户关注讨论线程(像本网站一样采用问答格式),但也可以关注其他内容类型,例如具有个人资料页面的公司和学校。 (该网站旨在帮助专业人士求职,因此后端为公司、学校等提供了一个简单的个人资料页面。)

拥有一个具有 follow_entity_type 字段的“关注”表,可以访问该字段,然后重定向到相应的内容表(问答、公司等),会不会更有效?或者,当我尝试编译用户的提要时,我应该为需要单独访问的每种内容类型创建一个“关注”表吗?第一个似乎需要更复杂的编码和查询,而第二个则会使按时间顺序组织所有类型帖子的提要变得更加困难。

我确信解决方案是直接的,但作为一名兼职开发人员和自学者,有时我会错过基础知识。

最佳答案

想一想在面向对象设计中如何做到这一点:对于所有可以遵循的事物类型,您将有一个公共(public)的父类(super class)或接口(interface)。称之为Followable

interface Followable { }

class QandA implements Followable { ... }
class Profiles implements Followable { ... }

然后,当您表示“可跟踪”对象的集合时,请确保该集合由 $object instanceof Followable 为 true 的对象组成。

您可以对 SQL 表执行相同的操作:

CREATE TABLE Followables ( follow_id INT AUTO_INCREMENT PRIMARY KEY ... );

CREATE TABLE QandA ( qanda_id INT PRIMARY KEY ... , 
  FOREIGN KEY (qanda_id) REFERENCES Followables(follow_id));
CREATE TABLE Profiles ( profile_id INT PRIMARY KEY ... , 
  FOREIGN KEY (profile_id) REFERENCES Followables(follow_id));

现在,您对用户关注的内容的引用是 Followables 的外键:

CREATE TABLE UserFollows (
  user_id INT NOT NULL,
  follow_id INT NOT NULL,
  PRIMARY KEY (user_id, follow_id),
  FOREIGN KEY (user_id) REFERENCES Users(user_id),
  FOREIGN KEY (follow_id) REFERENCES Followables(follow_id)
);

另请参阅Class Table Inheritance .

关于php - 支持多种内容类型的 MySQL 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3367273/

相关文章:

python manage.py migrate 返回 django.db.utils.ProgrammingError : (1064. .. 错误

mysql - 如何简化 UNION ALL 的结果

java - getstream.io 如何仅为配置文件创建过滤器

javascript - 使用 Google Feeds API 使用 "tap"在 jquery mobile 中自动生成 feed 列表

caching - 在redis中,如何根据插入顺序获取键降序排列?

php - 帮助 SQL SUM()?

php - MySQL 的本地主机错误

php - 用于 PHP : transform XML to PDF 的 XSL-FO 处理器

javascript - php 文件到 php 数组到 js 数组 - 作为数组的数组

PHP 问题,fread 抛出错误