用户活动数据库结构

Moe*_*ine 4 php mysql sql database data-structures

我正在社区网站上工作.我想在网站的2个位置显示用户的活动.

  1. 用户"A"配置文件.
  2. 用户"A"朋友的好友页面."你的朋友在做什么?"

例如,表格是:

  • 会员
  • members_gallery
  • members_videos
  • members_friends

我的问题是在Sql结构中.我读过这个问题 "用户最近的活动 - PHP MySql"

"联盟"的想法很好但我有另一个想法.我打算做个新桌子

  • members_activity

田野:

id | user_id | photo | video | friend | p_id | v_id | f_id | datetime
Run Code Online (Sandbox Code Playgroud)

假设用户刚上传了一张图片.

id | user_id | photo | video | friend | p_id | v_id | f_id | datetime
1  |   15    |   1   |   0   |    0   | 1203 |   0  |   0  |  NOW()
Run Code Online (Sandbox Code Playgroud)

好处:

  • 当我进行SELECT QUERY时,我可以很容易地知道它是照片,视频还是友谊活动.
  • 用户可以删除"照片活动"但保留照片.
  • 可以轻松通知用户的朋友.

缺点:

  • 大量的表行?

任何想法,或建议大型网站如何处理它?digg,facebook等

Jor*_*ing 8

我认为你的单表方法最好是正确的.然而,一个缺点是它不能很好地扩展 - 如果你想添加链接或评论活动类型怎么办?使用此模型,您必须为每个模型添加另一列.我在Rails-land中看到的一种方法是使用多态模型,它看起来像这样:

id | user_id | activity_type_id | p_id | v_id | f_id | datetime
Run Code Online (Sandbox Code Playgroud)

您可以看到我已经替换了视频,照片等activity_type_id.然后会有第二个表叫做activity_types:

 id | name
----+-------
  1 | photo
  2 | video
  3 | ...
Run Code Online (Sandbox Code Playgroud)

然后,当您创建一个members_activity记录时,您可以分配适当的记录activity_type_id,如果您想稍后创建新的活动类型,则相对SELECT轻松JOIN,您可以使用简单的特定类型的活动,例如:

SELECT * FROM members_activity
  JOIN activity_types ON members_activity.activity_type_id = activity_types.id
 WHERE activity_types.name = 'photo';
Run Code Online (Sandbox Code Playgroud)

  • 数组?你的意思是PHP?我认为最好在这种情况下使用MySQL的ENUM类型.http://dev.mysql.com/doc/refman/5.0/en/enum.html (2认同)