想想你会如何在面向对象设计中做到这一点:你可以有一个共同的超类或接口,用于可以遵循的所有类型的事情。称它为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见。
感谢您的建议!我沿着同样的思路思考。 – tchaymore 2010-07-29 22:29:35