지금은 복잡한 퀴즈 앱용 데이터베이스 (mysql) 스키마를 디자인하고 있습니다. 나는 지금 질문의 단계에 있으며, 테이블 디자인으로 조금 고투한다. 여기에 지금까지 가지고 무엇을 : 아이디어는 작업 테이블은 단지 몇 가지 기본적인 정보와 작업을 처리하는 방법을 결정하는 유형 필드를 가지고 있다는 것입니다복잡한 퀴즈 앱을위한 데이터베이스 디자인은 무엇입니까?
task id type etc. 1 mpc 2 text-input 3 matching 4 fill-gaps task_to_question task_id question_id 1 10 2 20 3 30 3 31 3 32 4 40 answer_set ->(task_to_question) id question_id answer_id correct 1 10 100 1 2 10 101 0 3 10 102 0 4 10 103 0 5 20 100 1 6 20 200 1 7 30 100 (1) 8 31 300 (1) 9 32 301 (1) 10 40 100 1 11 40 400 1 12 40 401 1 addon answer_set_id gap_number 10 1 11 1 12 2
질문입니다. 모든 작업이 동일한 테이블에 있습니다. 모든 작업에는 유형에 따라 하나 이상의 질문 (task_to_question)이 있습니다 (예 : mpc에는 하나의 질문이 있지만 질문 및 답변과 일치해야하는 작업에는 네 가지 질문이 있습니다. 똑같은 맥락에서 모든 질문은 복수 응답 (answer_set)을 가질 수 있습니다. 특히 하나 또는 두 단어의 텍스트 입력에 특히 중요합니다. 따라서 작업 유형 내에서도 질문과 답변의 수는 유동적입니다. 물론 이것은 나중에 제한 될 수 있으며 서브 타입도 추가 될 수 있습니다. 마지막 테이블은 작업 유형을 간단한 필드 유형으로 처리 할 수없는 경우에만 조인됩니다. 이 예에서는 "텍스트의 간격 채우기"작업에서 간격의 순서를 정의해야합니다. 이것은 하나의 addon-table이거나, 오버 헤드를 줄이기 위해 다른 작업 유형을위한 여러 테이블 일 수 있습니다.
가능한 한 많은 텍스트 문자열을 재사용하려고했습니다. 그래서 저는 mpc, input, fill-the-gap 및 부분적으로 일치하는 작업에 대해 동일한 질문 - 텍스트 및 동일한 답변 문자열을 가질 수 있습니다. 마찬가지로, 중복을 통해 정렬하지 않고도 자동 완성 필드에 대한 제안을 수집하는 것이 쉬울 것이라고 생각합니다.
그러나 생각해 보면 실제로는 너무 혼란 스럽다고 생각합니다. 이미 볼 수있는 문제는 예 : 질문에 옳고 그름이있을 때 이미 중복성이 있습니다. 정확한 열이 중복됩니다. 그리고 다른 질문 유형을 추가하더라도 내 대답은 varchar 여야합니다. 그리고 나서 어쨌든 매우 다른 작업 유형이있을 때 더 많은 테이블에 가입해야 할 수도 있습니다. 처음부터 별도의 테이블을 사용하지 않는 이유는 무엇입니까? 이것은 기본적으로 일리아에서 어떻게 이루어 졌는지입니다. 모든 유형의 테이블을 제거하는 것이 큰 이점입니까? 그런 다음 또 다른 모델 대신 모든 작업 유형에 대해 모든 처리기를 가져야하는 작업 모델 만 갖습니다.
와우는 많은 텍스트였습니다 ... 음, 전체를보기 위해 그것을 적어 두어야했습니다. 아직도 그것을 처리하는 방법을 확실히 모르겠습니다. 입력 기꺼이 감사!
편집 : 또 하나 ... 나만인가, 아니면 answer_set 테이블이 question_id를 참조하는 것이 이상한가? 그것이 올바른 방법인가요?