我有一个类似于页面订阅的应用程序,用户可以在其中订阅页面。查看页面时,我想显示订阅该页面的用户数和用户列表。
当有人查看用户的个人资料时,应该会显示用户所属的所有网页。
我想到的是:
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中的数组根本不是一个好主意。
任何人都考虑过更好的架构?
非常感谢!
答案 0 :(得分:0)
你的设计不是很好。这实际上有点糟糕。原则上,目标是建立一个满足至少 first normal form的模式。
您处于这样的情况:页面可以有多个用户订阅它,并且用户可以订阅多个页面。因此,在表users
和表pages
之间存在多对多关系。
在这些情况下,最好的解决方案是使用第三个表来建立两者之间的连接。通常这个表只包含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)