在任何社交网络中,你可以关注一个人,一个帖子或任何事情,你所遵循的一切都将显示在你的墙上,现在我想在asp.net mvc中实现相同的功能,但我在设计表上遇到问题查询用户的所有后续事项。这是我设计的表格:
[User(id,name,email,password)] [Following(id,personId,followingId,source)] [Post(id,title,description,authorId)]
因此,当用户跟随其他用户时,将在下表上推送新记录,其中followId为userId,source为“User”表,与跟随postId的帖子后面的postId相同,来源为“Post”表。 问题是从以下内容中获取数据时,如果用户使用的内容多于Post和其他用户(例如Tag,Topic ...),则查询会连接多个表以返回结果。这将不是很好的性能和查询时间将数据返回给用户。 你对此有什么想法吗?非常感谢您听到您的解决方案,非常感谢!
答案 0 :(得分:1)
您的数据库设计存在缺陷,而不是一个带有字符串的“链接”表,以确定“关注的事物”所在的位置使得难以有效查询。
相反,每个链接的东西需要一个链接表。您可以在简化示例中使用
[User(id,name,email,password)]
[Post(id,title,description,authorId)]
[UserFollowingUser(id, userId, followedUserId]
[UserFollowPost(id,userId,postId)]
因此,要让所有用户关注帖子,或者让用户跟随所有帖子,或让所有用户关注特定用户,或者让特定用户跟随所有用户,那就很容易了。