2010-12-06 3 views

답변

4

가 : 각 기사보기 위해

daily_article_views(
    ,article_id 
    ,view_date 
    ,view_count 
    ,primary key(article_id, view_date) 
    ,foreign key(article_id) references articles 
); 

을, 당신은 현재 날짜를 사용하여 테이블에서 행을 조회 것이며, 현재보고있는 기사의 ID입니다. 행이 있으면 카운터를 증가시킵니다. 행이 없으면 view_count (그리고 잘린 날짜)에 값 1을 붙여서 삽입합니다. 그런 다음 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은 일부 사용자 ID는 저장할 필요가 무엇이든, 어쩌면 IP 주소 또는를 나타내는 열 것입니다. 이 디자인에서는 시간 (시, 분, 초)을 포함한 기사보기의 시간을 저장합니다. 이렇게하면 기사를 볼 때 정확히 하루 동안 데이터를 분석 할 수 있습니다.

마지막 디자인의 단점은 쿼리를 더 느리게 만들 수있는 많은 데이터를 생성 할 가능성이 있다는 것입니다. 물론 두 가지 대안을 모두 구현할 수있는 방법은 없습니다.

1

당신은 확실히 당신은 당신이 필요하지만 공격마다의 view_count 열을 증가하고 싶지 않을 수도 3 열

article_id 
date 
view_count 

있는 테이블을 사용할 수있는 시각 정보에 관심을하지 않습니다. 응용 프로그램에 일부 정보를 캐시하고 일괄 적으로 업데이트 할 수 있습니다. 이 기사는이 같은 것을 사용할 수 표시 횟수 충분히 알고있는 경우

관련 문제