0

我有一个类似页面订阅的应用程序,用户可以在其中订阅页面。查看页面时,我想显示订阅它的用户数量和用户列表。

此外,当有人查看用户的个人资料时,应该向他们显示该用户订阅的所有页面。

我想到的是这样的:

Page
    id
    users (JSON format containing userIDs of all subscribed)

User
    id
    page_IDs (JSON format containing the IDs of the walls he is subscribed to)

我想这对于非常小规模的应用程序来说是可以的。但是当网站增长并且每个页面有超过 1000 个订阅者时,将所有 JSON 数据解码为 PHP 中的数组根本不是一个好主意。

任何人都有更好的架构?

非常感谢!

4

1 回答 1

0

那么你的设计不是很好。这实际上有点糟糕。原则上,目标是拥有一个至少满足第一个范式的模式。

您处于一个页面可以有多个用户订阅并且一个用户可以订阅多个页面的情况。所以表users和表之间pages是多对多的关系。

在这些情况下,最好的解决方案是使用第三张表来连接两者。通常此表仅包含 2 列:

  • 第 1 列包含表 1 中的主键,即外键
  • 第 2 列包含表 2 中的主键,即外键

这也有例外,但总的来说,这就是你设计/规范这样的东西的方式。

更具体到您的情况:

pages
-------------------------
page_id
<other columns>
PRIMARY KEY(page_id)

users
-------------------------
user_id
<other columns>
PRIMARY KEY(page_id)

subscriptions
-------------------------
page_id
user_id
PRIMARY KEY(page_id,user_id)
于 2013-10-14T18:14:42.727 回答