2012-10-19 4 views
0

설명 :등급 시스템 구축 : 데이터베이스 구조 관련 user_id?

내가 mysql/php와 평가 시스템을 구축하고있다. 나는 데이터베이스를 어떻게 설정하는지 혼란 스럽다.

제 테이블 : 여기

내 문서 설정입니다

id | user_id | title | body | date_posted 

이 내 가정 평가 테이블 :

평가 테이블 :

id | article_id | score | ? user_id ? 

문제 :

등급 표에 user_id을 넣어야할지 모르겠다. 내 계획은이 같은 쿼리를 사용하는 것입니다

SELECT ... WHERE user_id = 1 AND article_id = 10 

을하지만, 나는 그것을 두 번 user_id를 저장으로 중복 데이터의 것을 알고있다. 테이블에서 JOIN을 찾아야하나요, 아니면 구조가 좋은가?

+1

'article_id'를 재사용하지 않으면 고유 한 결과를 얻기에 충분하지 않은'article_id = 10'이 아닌가요? 또는 사용자가 등급을 지정하는 'user_id'입니까? 중복되는 경우는 아닙니까? –

답변

0

세 번째 정규 양식으로 인해 독립성을 유지해야합니다.

"세 번째 정규형 (3NF)은 데이터베이스 정규화에 사용되는 일반 형식입니다 .3NF는 1971 년 EF Codd에서 처음 정의되었습니다. [1] Codd의 정의에 따르면 3NF는 다음과 같은 조건이 유지 :

  • 의 관계 연구 (테이블) 두 번째 정상 형태 (2NF)는
  • R의 모든 비 프라임 속성 R.의 모든 퍼키에 비 이적으로 의존하는 (즉, 직접 따라 다름)입니다 " 여기

출처 : http://en.wikipedia.org/wiki/Third_normal_form

먼저 일반 양식 : http://en.wikipedia.org/wiki/First_normal_form

이 제 2 정규형 : 당신이 정상화와 E/R 모델을 살펴한다 http://en.wikipedia.org/wiki/Second_normal_form

은 당신에게 많은 도움이 될 것입니다 . 위키 피 디아에서

정상화 : http://en.wikipedia.org/wiki/Database_normalization

+0

좋아요, 이건 정상화되지 않을 거란 걸 압니다, 하하. 나는 등급 표의'user_id'없이 어떻게 데이터를 검색 할 수 있었는지 모르겠습니다. – Phil

2

나는이 방법 아무 잘못 표시되지 않습니다. 두 번 저장되는 사용자 ID는 등급 항목과 관련이 있고 다른 하나는 기사 소유자와 관련되어 있으므로 특히 관련이 없습니다.

이 방법의 장점은 article_id 및 user_id를 고유하게 만들고 replace into를 사용하여 점수를 관리함으로써 각 사용자에 대해 여러 점수가 기록되는 것을 방지 할 수 있다는 것입니다.

게임을 방지하기 위해이 등급 시스템을 지능적으로해야하는지 여부에 따라 여러 가지 사항을 설명해야합니다. 사용자 기반 등.

나는 정상적인 사람이라면 내기를 걸어도 비교적 큰 규모의 시스템이라도 해를 끼치 지 않을 것입니다.

... 반 무관 :

그냥 참고로,이 점수의 중요성과 게임 양상에 따라, 당신은 STDDEV을 사용할 수 있습니다() 점수 열을 평균 인수를 표준 편차를 가져올 수 ...

SELECT STDDEV(`score`) FROM `rating` WHERE `article_id` = {article_id} 

사람들이 특정 기사를 털어 내거나 정당한 이유없이 그것을 털어 내고 칭찬 한 것처럼 보였다고 가정 할 경우, 이상 치를 고려해야합니다.

+0

대단히 감사합니다! 나는'STDDEV'를 사용할 것입니다. – Phil

2

에 따라 다릅니다. 기사가 개별 사용자에게 고유하다고 가정합니다. 이 경우, 나는 귀하의 평가 테이블의 USER_ID를 유지할 수있는 다음 단지에 쿼리를 변경 :

SELECT ... WHERE user_id = 1 

SELECT ... WHERE article_id = 10 

또는

당신이 끌어 하려는지 정보에 따라.

user_id를 사용하여 기사를 다른 테이블의 사용자와 연결된 고유 데이터에 연결하는 것과 같이 "두 번 user_id를 저장"하고 있지 않습니다. 귀하는 귀하의 질문을 제외하고는 올바른 접근 방식을 취하고 있습니다.

+0

내 목표는 기사 등급의 평균을 게시 한 사용자와 함께 끌어 올리는 것입니다. Article_id는 동일한 값의 100을 가질 수 있으며 평균을 낮출 것입니다. 나는 단지'article = 0'으로 풀 수 있다고 생각합니다. 고마워요. – Phil

+0

@Phil Actually ... 명확히하기 위해 기사 작성자의 user_id 또는 등급을 매기는 사용자의 user_id에 대한 user_id가 있습니까? 나는 후자를 추측하고있다. 그렇지 않다면 나의 대답이 정확하지 않을 수있다. – Mike

+0

나는 이전의 사용법을 의미하지만 당신은 올바른 방향으로 나를 지적했다. 하하. 등급 표에'user_id'를 넣지 않고 있습니다. 혼란 스럽습니다. – Phil