2013-10-29 2 views
0

내가 검색 및 평가 시스템에 대한 책을 읽은를 많이 해 봤는데,하지만 난 달성하기 위해 노력하고있어에 대한 해결책을 찾을 수 없습니다 ... 내가 가진MySQL 데이터베이스 - 저장 다중 기준 등급

일단 로그인 한 사용자가 제품을 제출할 수있는 웹 사이트. 이제 다른 사용자가 3 가지 기준에 따라 해당 제품을 평가할 수 있기를 바랍니다. PHP와 MySQL 데이터베이스를 사용하여 모든 정보를 저장하고 있으며, 등급을 통합하는 방법을 잘 모르겠습니다.

현재 카테고리에 따라 다양한 테이블을 보유하고있는 PRODUCTS 데이터베이스가 있습니다. 여기에 테이블의 예

TOASTERS 
--- 
ID (auto-incrementing) 
Brand 
Set 
Number 
Name 
Edition 
Image (stores the location of the image the user uploads) 

모든 사용자는 다음 세 기준 (품질, 가격, 미용) 10에서 테이블의 행을 평가할 수 있습니다. 각 기준의 사용자 평균은 각 제품 페이지에 표시되지만 프로필 페이지에 등급의 간단한 기록을 표시 할 수 있도록 각 사용자의 개별 등급을 저장하고 싶습니다. 또는 홈페이지에 최신 사용자 등급의 라이브 피드를 보유하십시오.

제가하려는 것은 awwwwards.com과 상당히 비슷합니다. (내가 말하는 라이브 피드를 보려면 페이지의 오른쪽 하단을보십시오)

미리 감사드립니다!

+0

제품 ID와 사용자 ID의 외래 키와 품질, 가격 및 미적 등급에 대한 열이있는 RATINGS 테이블이 필요하지 않습니까? – andrewsi

답변

0

나는 하나의 PRODUCTS 테이블을 사용하거나 적어도 PRODUCTS 테이블을 만들고 그것과 카테고리 테이블 사이의 상속을 에뮬레이션해야한다고 생각한다.

각 범주에 대한 테이블을 만들면 각 범주에 특정 속성이 있으면 몇 가지 장점이 있지만 각 테이블에 대해 별도의 코드를 작성해야 할 필요가 있습니다. 또는 두 개의 테이블을 사용하여 '세로로'모든 사용자 지정 속성을 저장할 수 있습니다 : PROPERTIES(propertyID,PropertyName), PROPVALUES(productID,propertyID,PropertyValue).

여러 테이블이 상속을 모방하도록 선택하는 경우

, 다음과 같이 얻을 수있다 :

PRODUCTS 
--- 
ID (auto-incrementing) 
Brand 
Set 
Number 
Name 
Edition 
Image 
VoteCount <+ 
SumQuality +-updated by trigger 
SumPrice  | 
SumAesthetic <+ 

TOASTERS 
--- 
productID (PK and FK to PRODUCTS) 
(toaster specific fields go here, if any) 

당신이 테이블 표를 만들 수있을 것보다, 테이블 제품

VOTES 
--- 
productID (FK to PRODUCTS) 
userID (FK to USERS) 
Quality  
Price  
Aesthetic 
VoteDateTime 

하는 경우를 참조 전체 제품 등급이 투표 기록보다 훨씬 자주 조회되는 것은 사실입니다. 최적화로 이미 srdjans으로 표시된 VoteCount, AvgQuality, AvgPrice, AvgAesthetic을 PRODUCTS 테이블에 추가 할 수 있습니다. 이 추가 필드는 테이블 VOTES의 트리거 또는 PHP 코드의 수동으로 업데이트 할 수 있습니다.

+0

모든 제품에서 속성이 동일하기 때문에 하나의 PRODUCTS 테이블이 더 합리적이라고 가정합니다. 그래서 저는 하나의 PRODUCTS 테이블과 VOTES 테이블을 가지고 갈 것입니다.그리고이 경우에는 각 기준의 평균을 PRODUCTS 테이블에 저장하는 것이 좋습니다 (해당 VOTES 행이 추가 될 때마다 업데이트되는 것으로 가정합니다). – user2910809

+0

예, 평균을 저장하고 새 투표가 'avgPrice1 = (avgPrice0 * voteCount0 + votePrice)/voteCount1' 또는 * 더 나은 * 스토어 요약 투표 : 'sumPrice1 = sumPrice0 + votePrice'와 같은 업데이트 및'sumPrice/voteCount as avgPrice'와 같은 쿼리 평균 –

+0

정말 고마워, 이것은 많은 도움이되었다. 해결 된 – user2910809

0

사용자 개별 등급 (기본 키, 사용자 ID, 제품 ID 및 등급)을 저장하기위한 별도의 테이블을 만듭니다. 평균을 저장하기 위해 "제품"에 추가 필드를 생성하십시오. 일부 사용자가 일부 제품을 평가할 때마다 "등급"표에 레코드를 삽입 한 다음 지정된 제품에 대한 평균을 다시 계산하고 제품의 행을 업데이트합니다. 이렇게하면 평점에 쉽게 액세스 할 수 있으며 사용자 개인 평점도 분석 할 수 있습니다.

Ps - 제품을 평가 한 사용자 수를 몇 명이나 저장할 수도 있습니다.