Если вам достаточно знать, сколько раз была показана статья, вы можете использовать что-то вроде этого:
daily_article_views(
,article_id
,view_date
,view_count
,primary key(article_id, view_date)
,foreign key(article_id) references articles
);
Для каждого просмотра статьи вы должны найти строку в таблице, используя текущую датуи идентификатор статьи, которая просматривается в данный момент.Если строка существует, вы увеличиваете счетчик.Если строки не существует, вы вставляете ее со значением 1 для view_count (и усеченной даты).Затем вы можете свести данные из этой таблицы, используя SUM (view_count), к недельным, ежемесячным или годовым данным в качестве необходимых.
Однако, если вам нужно хранить информацию о каждом отдельном представлении, вы можете использовать структуру таблицы, аналогичнуюк следующему.
article_views(
,view_id
,article_id
,view_date
,additional_data_about_each_view
,primary key(view_id)
,foreign key(article_id) references articles
);
Additional_data_about_each_view будет столбцами, представляющими некоторый идентификатор пользователя, может быть, IP-адрес или все, что вам нужно сохранить.Обратите внимание, что в этом дизайне вы будете хранить время просмотра статьи, включая время (часы, минуты, секунды).Это позволило бы вам анализировать данные в течение дня, именно тогда, когда статьи просматриваются.
Недостатком последнего дизайна является то, что он потенциально может генерировать много данных, которые могут замедлять запросы.Конечно, ничто не мешает вам реализовать обе альтернативы:)