2012-03-07 2 views
1

데이터베이스에 테스트/퀴즈 점수를 기록하려고합니다. 테스트와 사용자가 많이 필요할 때 가장 좋은 방법은 무엇입니까?MySQL에 퀴즈 결과를 저장하는 가장 좋은 방법

다음과 같은 몇 가지 옵션이 있습니다. 사용자를 위해 각 퀴즈와 행에 대해 새 열을 만들어야합니까? 아니면 제한이 있습니까? 이건 천천히 할 수 있을까요? 각 사용자에 대해 새 행을 만들어야합니까? & 퀴즈? 원래 '사용자'데이터베이스를 고수하고 텍스트로 인코딩해야합니까?

계획에 약간의 정교함을 넣으십시오 : JavaScript 퀴즈, AJAX로 점수 제출 및 스크립트가 데이터베이스로 보냅니다. 나는 새로운 접근법을 잘 모르겠다.

어떤 도움이 크게 :) 감사이 공정한 학교 과학을위한 것

답변

0
나는 어쩌면, 모든 학생들 (이름, 생년월일, 학생 ID)를 나열하는 등을 데이터베이스 테이블을 만들 말할 것

하나는 모두 시험 (점수, 날짜, 작성자). 당신 만이 DB에 접속할 수 있습니까? 아니면 학생들도 액세스 할 수 있습니까? 후자의 경우, 학생이 한 번에 자신의 성적만을 볼 수 있도록 (정확한 사람이 아닌) 정확한 보안 또는 "의견"을 만들어야합니다.

+0

제 아이디어는 학생들이 나중에 점수를 얻을 수 있다는 것입니다. 나는 당신의 솔루션을 좋아해서 학생과 테스트로 검색 할 수 있습니다 : D는 문제에 접근하는 가장 좋은 방법에 대해 조금 확신하지 못했습니다 – MaxQ

1

데이터베이스에 3 개의 데이터 테이블 (학생, 테스트 및 점수)을 제안합니다.

각 학생은 ID 및 그 밖의 (이름, dob 등) 필드에 대해 기록해야합니다. 테스트에는 ID 및 기타 (이름, 날짜, 무게 등)에 대한 필드가 있어야합니다. 점수에는 학생 ID, 시험 ID 및 점수 (기타)가 있어야합니다.

이것은 학생을 쿼리하고 점수 테이블에 가입하여 모든 학생의 점수를 얻을 수 있음을 의미합니다. 테스트 테이블에이 결과를 추가하여 각 점수에 레이블을 붙이고 점수와 무게에 따라 점수를 계산할 수도 있습니다.

테스트를 쿼리하고 점수로 참여하여 주어진 테스트의 모든 점수를 얻으면 클래스 통계를 얻을 수 있습니다.

+0

감사합니다! 테이블 설정 : QuizUserId, QuizId, QuizScore, QuizTimestamp – MaxQ

0

확실히 동적 열을 만들지 마라! (각 퀴즈에 대한 열 없음). 또한 사용자 (또는 일반적으로 모든 테이블)에 사용자 (또는 일반적으로 테이블 항목)를 식별하지 않을 때 열을 추가하는 것은 좋지 않습니다. ...

이것은 예를 들어 normalization인데, . 이를 위해 3 개의 표를 만들고 foreign keys을 작성하여 점수가 항상 기존 사용자 및 퀴즈를 참조하는지 확인하십시오. 예컨대 :

  1. users-id, nickname, name
  2. quizzes-id, quizName, quizOtherData
  3. scores-id, user_id(참조 users.id), quiz_id, (ref.quizzes.id) score

, 그리고 퀴즈 사용자 당 scores 테이블에 행을 추가합니다. 또한 user_idquiz_id 열에 UNIQUE 키를 만들어 사용자가 1 회 이상 퀴즈를 완료하지 못하도록 할 수 있습니다.

이것은 빠르며 중복 된 (불필요한 여분의) 데이터를 저장하지 않습니다.

예를 들어 퀴즈 결과를 보려면 다음과 같이 입력하십시오. 내가 바로 여기에 가입하지 않은 사용자가있을 수 있기 때문이다 사용하는 이유

SELECT users.*, scores.score 
FROM scores RIGHT JOIN users ON(users.id=scores.user_id) 
WHERE scores.quiz_id = 4 
ORDER BY score DESC 

이유 : 낮은 점수로 가장 높은에서 주문이 퀴즈를 제출의 백성, 4 및 사용자 정보, 당신은 같은 쿼리를 할 것 퀴즈, 그러나 모든 항상 인해 foreign keys

모든 사용자의 전반적인 정보를 얻으려면 (기존 사용자 & 퀴즈를 점수, 퀴즈 및 점수 당신은 같은 것을 할 것 :

SELECT * 
FROM quizzes 
LEFT JOIN scores ON(quizzes.id=scores.quiz_id) 
LEFT JOIN users ON(users.id=scores.user_id) 
ORDER BY quizzes.id DESC, scores.score DESC, users.name ASC 

을 BTW : PHP를 처음 접했거나 다른 사람이이 정보를 읽는다면 PHP's PDO 인터페이스를 사용하여 데이터베이스와 통신 할 수 있습니다. mysql_query와 같은 AVOID 함수는 적어도 mysqli_query을 사용하지만 이식성을 위해서는 PDO를 사용하는 것이 좋습니다.

관련 문제