2010-07-29 60 views
0

我正在构建一个Web应用程序,它将(理想情况下)允许用户关注讨论主题(其格式为Q &),还可以遵循其他内容类型,例如公司和学校有个人资料页面。 (该网站旨在帮助专业求职,所以后端为企业,学校等提供了一个简单的个人资料页面)适用于以下多种内容类型的MySQL结构

有一个“关注”表是否更有效率?有一个follow_entity_type字段,可以访问并重定向到相应的内容表(Q & A,公司等)?或者当我尝试编译用户的提要时,是否需要为每个需要单独访问的内容类型设置一个“关注”表?第一个似乎需要更复杂的编码和查询,而第二个则会使按时间顺序组织所有类型的帖子更加困难。

我确定解决方案很简单,但作为兼职开发人员和自动裁决,有时候我会错过基本知识。

回答

0

我会最多follow_entity_type字段。在我看来,从实体列表中集成一种额外类型的提取然后在列表的所有实例中集成新的联合表格变得更加容易。这也意味着每个'内容类型'只需要添加1个而不是2个表格,其中存储&检索已经被处理。查询并没有得到那么多的恕我直言。

+0

感谢您的建议!我沿着同样的思路思考。 – tchaymore 2010-07-29 22:29:35

1

想想你会如何在面向对象设计中做到这一点:你可以有一个共同的超类或接口,用于可以遵循的所有类型的事情。称它为Followable

interface Followable { } 

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

然后,当你代表“随动”对象的集合,可以确保集合包括针对$object instanceof Followable是真实的对象。

你可以做同样的事情与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见。

+0

我喜欢这个设置,但是我们不会让用户也跟随它的原因是什么? – Wrikken 2010-07-29 22:37:11

+0

你可以做任何事情,我只是展示了两个例子。 – 2010-07-30 00:32:48

+0

检查,那里没有问题,很好。 – Wrikken 2010-07-30 16:37:00

相关问题