我正在构建一个小型社交网络,用户可以与其他用户建立联系,就像我需要的所有其他社交网络一样。
我看到了一些类似的问题,但我不确定其他解决方案
所以我提出了这样的事情:
Activity { UserId, ToUserId, ActivityTypeId, ActivityDate, IsRead, ItemId }
UserId - 生成活动的用户,
ToUserId - 应该看到此活动的用户,
ActivityTypeId - 新连接,照片,评论等,
ActivityDate ,
的 IsRead
ItemId - 基于我知道从哪个表中获取数据(用户,评论,照片等)的类型。
ActivityType { ActivityTypeId, Text}
文字 - 例如有新的连接,添加新评论,编辑他的个人资料数据等。
例如,当我的连接获得新连接时,我应该得到:
您的连接[fetch name based on UserId]
有新连接[fetch data (by ItemId) from table user]
或
您的关联[fetch name based on UserId]
已向[fetch data (by ItemId) from table (for example) Photo]
添加了新评论
我的问题:
这是不好的设计,为什么?
有更好的方法吗?
更新:
当用户创建一个新活动时,我会获取他所有的连接ID,并为每个连接我在Activity
表中添加该活动。
或者这个答案是更好的选择?
How to implement the activity stream in a social network
答案 0 :(得分:1)
随着您的数据库和用户的增长,添加连接将花费更长时间,因为有更多活动要为具有新连接的用户生成。此外,如果他们断开连接(非朋友)会发生什么?它们都应该被发现,这可能是许多行的数据。
也许最好是拥有一个连接类型并在Activity表中使用它而不是ToUserId。然后,当有人建立某种类型的连接时,除了连接表中的一行(FromUserId,ToUserId,ConnectionTypeId)之外,没有新数据要生成(或者当它们彼此不相互时删除)。
我不是说这更好,只是要考虑一下。