我正在为一个小社区建立一个社交网络。每个用户都可以上传图片或发布推文,并与其他用户分享。
帖子存储在推文表中
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或更改数据库设计?
答案 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日期