合并用户图片和帖子以作为用户条目显示的最佳方式

时间:2012-05-19 12:21:55

标签: php mysql database-design

我正在为一个小社区建立一个社交网络。每个用户都可以上传图片或发布推文,并与其他用户分享。

帖子存储在推文表中

tweets : id , user_id , text , date

图片在图片表中

pics : id , user_id , album_id , title(ie:pic.jpg) , text(description) , date

现在我想将所有这些内容显示为他墙上的用户帖子。我不确定这是最好的方法。

我可以通过添加第三个表来跟踪用户条目(例如

)来使用规范化
user_entries: id , entry_type(tweet , pic ) , date

现在我可以:

$entries = $db->get_entries( $user_id );
foreach ( $entries as $ent ){

   if($ent->entry_type == 'tweet' )
    $db->get_tweet($ent->id);
    // show a tweet and for each one get it's comments

   if($ent->entry_type == 'pic' )
    $db->get_pic($ent->id);
    // show a pic and for each one get it's comments

}

但这意味着更慢的代码和更多的数据库连接,更不用说我必须得到每个条目的注释,从长远来看这会减慢速度。

所以我希望找到一种方法来通过一个查询获得所有这些。我不知道,可能在两个表之间使用unoin或更改数据库设计?

2 个答案:

答案 0 :(得分:1)

有第三张表posts,如下所示:

post_id | user_id

为每个帖子/图片添加一个唯一的post_id,并从这个新表中选择所有帖子(这称为用户和帖子之间的多对多关系)。当您查询posts表时,JOIN其他表以获取所有适当的信息。

答案 1 :(得分:0)

如果你有一张很大的桌子;为什么不将pics表拆分成更小的表,然后使用PIC_ID,您可以稍后将表连接在一起,或者只是获取您需要的表。我会更快

  

TABLE_1

     

pic_id user_id

     

TABLE_2

     

pic_id album_id

     

TABLE_3

     

pic_id title(即:pic.jpg)

     

TABLE_4

     

pic_id text(description)

     

table_5

     

pic_id日期