我会推荐以下结构:
具有 feed_id、feed_type_id、creator_id、created_date、display_date、status 等字段的feed 表,其中 status 是活动的、隐藏的或停用的,您可以结合更新 display_date 字段来处理取消关注和重新关注,而无需创建附加记录
带有字段 feed_type_id、feed_type_name 的feed_type 表
跟随带有字段 follow_id、feed_id、user_id 的表
带有字段 post_id、feed_id、文本的发布表
...对于每个 feed_type 以此类推
虽然在 db 端设置需要更长的时间,但从长远来看,这将节省您的时间,因为每种提要类型都可以轻松继承所有常见字段,例如 creator_id、created_date、status 和 display_date,它们很好地对应于面向对象代码中的类,并且将更容易查找。例如,如果您每个用户都有一堵墙,那么您只需通过 creator_id 从 feed 表中选择,对于关注者活动的活动 feed,只需选择 creator_id 在用户的关注者中的 feed。
虽然您最终会得到更多表,但要管理的总字段和要编写的代码更少。这一切都是基于亚里士多德的按属种对事物进行分类的理论,即事物的共同点(属)和它们的具体差异(种)。