用于跟踪用户是否已查看项目的mysql数据库设计

时间:2017-09-09 09:24:46

标签: mysql database database-design

我想向用户显示他尚未查看的内容。 我考虑过存储一个字符串,其中包含由','分隔的项目的ID。用户已查看但我认为我不知道字符串的可能长度。 我能找到的替代方案是将其存储为日志。像

这样的表格
$customers = Tag::all();
$total_earnings_janunary = 0;

$query_date = '2017-01-04';
$start_date_janunary = date('Y-01-01', strtotime($query_date));     
$end_date_janunary = date('Y-m-t', strtotime($query_date));  

foreach ($customers as $customer) {
    if (Auth::User()->gym_code == $customer->gym_code ) { 
        $main_data_janunarys = DB::table('tags')->whereBetween('created_at', [$start_date_janunary,$end_date_janunary])->get();
    }
}

for ($i=0; $i <= count($main_data_janunarys); $i++) {
    $total_earnings_janunary = $total_earnings_janunary + $main_data_janunarys[$i]->amount;
    dd($total_earnings_janunary);            
}

对于大约一万个用户和数千个项目,哪种方法会更好。

1 个答案:

答案 0 :(得分:1)

像这样的对的表只有10M行。那是&#34;中等规模&#34;如桌子一样。

有无

PRIMARY KEY(user_id, item_id),
INDEX(item_id, user_id)

并且,如果您没有超过10K和1K,请考虑使用SMALLINT UNSIGNED(最多64K,2字节)。或者,更保守一点,MEDIUMINT UNSIGNED(3字节最多16M)。