2011-06-13 3 views
0

제품의 특정 세부 정보가 특정 제품에 대한 검토를 작성한 사용자의 총 응답에서 결정되는 검토 사이트를 만듭니다. 예를 들어, 사용자가 제품 Macbook Air를 검토 할 때 1-5 개의 별을 평가하고 랩톱을 사용하여 자신의 경험에 대한 설명을 300 단어로 작성하면 짧은 "설문 조사"를 수행하여 확인란을 선택할 수 있습니다.사용자 제출 데이터의 값을 결정하기위한 데이터베이스 설계

  1. 오피스 스위트
  2. 게임
  3. 그래픽 디자인
  4. 영화 감상

예를 들어, 사용자가 '오피스 스위트'의 체크 박스를 선택할 수 있습니다 :이 제품을 추천합니다 및 '영화 감상'. 이 맥북 에어 제품에 대한 모든 리뷰어의 모든 응답이 '사무실 스위트'에 대해 100 표, 다른 옵션에 대해 50 표, 20 표 및 10 표를 얻는 경우를 가정합니다. '오피스 스위트'옵션은 맥북 에어의 제품 페이지에서 가장 많은 표를 가지고 있기 때문에, 명시됩니다

Product recommended for: Office Suite

방법이에 대한 데이터베이스를 설계에 대해 갈 것인가? 'rec_office_suite', 'rec_games', 'rec_graphic_design', 'rec_watching_movies'열에 각각 별도의 표가있는 것을 고려하고 있습니다. 리뷰어가 리뷰를 제출하고 미니 설문 조사를 채울 때마다, 데이터베이스 테이블은 자신이 +1하기로 선택한 필드로 업데이트됩니다.

이것은 많은 필드가있는 테이블로 끝날 수 있습니다. 이것이 문제가됩니까?

답변

1

제안 된 솔루션과 노비타의 방법을 조합하여 사용하는 것이 좋습니다.

Nobita는 연결된 테이블을 사용하는 것이 데이터를 저장하는 올바른 방법이라는 점에서 정확합니다. 나중에 확장 할 때 유용합니다 (간단히 새 카테고리 레코드 추가). 나는 이렇게 시작했다.

각 제품 페이지에 결과를 표시하는 경우 데이터베이스에서 각 제품의 모든 카테고리에 대한 모든 투표 수를 계산해야합니다. 따라서 빠른 읽기를 위해 일종의 캐시에 데이터를 복제하는 것이 좋습니다. 각 카테고리의 표 열에 대한 아이디어는 나중에 확장하기 쉽지 않으며 매우 커질 수 있습니다. 대신 제품 표에 MEDIUMTEXT (또는 이와 비슷한) 열에 투표를 저장하는 것이 좋습니다. JSON 형식 또는 직렬화 된 PHP 배열을 사용하면 매우 간단합니다. 캐시는 누군가가 카테고리 투표를 추가하거나 새로운 카테고리가 추가 될 때마다 업데이트 만하면됩니다.

둘 다 사용하면 나중에 복잡한 SQL 쿼리를위한 제품/카테고리/투표 데이터에 쉽게 액세스하고 제품 페이지에 대한 빠른 쿼리를 사용할 수 있습니다.

희망이 있다면, 잠이 들었습니다.

1

나는 다음을 수행하지만,의 사람들이 추천 무엇을 보자 것이다 :

  1. 이 세 개의 필드가있는 테이블 만들기 : PRODUCT_ID - CATEGORY_ID - 투표
  2. 때마다 해당 제품에 해당 범주에 대한 사용자 투표 위 표의 증분 투표 필드.

이 디자인은 해당 제품과 관련된 투표를 처리 할 중간 테이블을 가지고 있기 때문에 많은 제품과 관련된 카테고리를 보유하는 데 도움이됩니다.

이 정보가 도움이되기를 바랍니다.