Если достаточно, чтобы знать, сколько раз статья была отображенных вы могли бы использовать что-то вроде этого:
daily_article_views(
,article_id
,view_date
,view_count
,primary key(article_id, view_date)
,foreign key(article_id) references articles
);
Для каждого вида статьи, вы LookUp строку в таблице с помощью текущей даты и идентификатор просматриваемой статьи. Если строка существует, вы увеличиваете счетчик. Если строка не существует, вы вставляете ее со значением 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-адрес или все, что нужно для хранения. Обратите внимание, что в этом дизайне вы сохраните время просмотра статьи, включая время (час, минуты, секунды). Это позволит вам анализировать данные в течение дня, точно, когда просматриваются статьи.
Недостатком последнего дизайна является то, что он потенциально может генерировать множество данных, которые могут замедлять запросы. Конечно, ничто не мешает вам реализовать обе альтернативы :)