2016-09-28 2 views
0

퀴즈 응용 프로그램을 만들고 단일 컬렉션에 결과를 저장하고 싶습니다 ('QuizResults'라고 가정 해 봅시다). 또한 관리자가 컬렉션에 저장할 수있는 '퀴즈 템플릿'을 만들 수 있기를 바랍니다 ('QuizTemplates'라고합시다). 관리자는 특정 사용자에게 특정 퀴즈를 '할당'할 수 있어야하며 이러한 과제를 세 번째 컬렉션에서 추적 할 것입니다 ('QuizAssignments'라고합시다).문서를 기반으로 스키마 정의

QuizAssignments 컬렉션에서 각 문서는 'AssignedTo'사용자 참조를 가지며 'TemplateForQuiz'는 'QuizTemplates'컬렉션에 대한 참조로 사용됩니다.

각 QuizResults 문서에는 QuizAssignment 참조와 QuizTemplate 참조가 있어야하지만 나머지 문서는 서식 파일에 의해 지정되어야합니다.

QuizTemplates: 
    QuizTemplate1: 
    Labels: ["What is 2+2?", "How do you say happy birthday in French?"] 
    Formats: [Number, String] 

    QuizTemplate2: 
    Labels: ["How do you say happy birthday in German?", "What is 3+3?"] 
    Formats: [String, Number] 

QuizAssignments: 
    User: Reference - User model 
    QuizTemplate: Reference - QuizTemplates model 

QuizResults: 
    User: Reference - User model 
    AssignedIn: Reference - QuizAssignments model 
    Template: Reference - QuizAssignments model 

/* for (let i = 0; i < this.template.Labels; i++) { 
    let qnNo = `${i + 1}`; 
    this["question" + i] = {}; 
    this["question" + i].label = this.template.Labels[i]; 
    this["question" + i].type = this.template.Formats[i]; 
} */ 

사람이이를 구현하는 가장 좋은 방법에 어떤 아이디어가 있습니까 : 그래서 적절히 기록되지 단순화하려고 - 내가 생각하고 무엇의 예로서

?

답변

0

mongodb를 갖는 한 가지 이점은 특정 스키마가 필요 없다는 것입니다. 따라서 접근 방식은 합리적인 데이터베이스에서와 비슷합니다.

당신은 다음과 같은 그것을 할 수 :

QuizTemplates: 
1: 
    Name: First template 
    Questions: 
    1: 
    Label:"What is 2+2?" 
    Format: Number 
    2: 
    Label: "How do you say happy birthday in French?"] 
    Format: String 
2: 
    Name: Second template 
    Questions: 
    1: 
    Label:"What is 3+3?" 
    Format: Number 
    2: 
    Label: "How do you say happy birthday in German?"] 
    Format: String 

Quizzes: 
1: 
    User: Reference - User model 
    answers: 
    1: 
    Label: How do you say happy birthday in German? 
    Answer: Alles Gute zum Geburtstag 
    2: 
    Label: What is 3+3? 
    Answer: 9 

당신은 포함 된 문서로 답변을 단순히를 포함 할 수 있습니다. 또한 명시 적으로 형식을 저장할 필요가 없습니다. 입력을 표시하는 것만 중요하지만 어쨌든 템플릿에 저장됩니다. 템플리트를 변경해도 결과에 영향을 미치지 않으므로 템플리트에는 추가 참조가 필요하지 않습니다. 원하는 경우 데이터 분석을 위해 이름이나 ID를 기록 할 수 있습니다.

좋은 시작은 데이터 모델링에 대해 MongoDB를의 문서를 읽고 당신이 날 요약 (당신의 입에 넣어 단어를 위험) 괜찮다면 그래서 https://docs.mongodb.com/manual/core/data-modeling-introduction/

+1

: 1. 결과에 대한 스키마 잊어; 2. QuizTemplate 문서를 사용하여 양식을 구성하십시오. 3. 양식의 데이터가 특정 키 아래의 결과 문서에 삽입됩니다. 맞나요? –

+0

1. 예, 앱이 데이터를 올바르게 처리해야합니다. 예를 들어 레일 앱에 루비가있을 수 있습니다. 모델의 구현은 유효성 검사와 구조를 담당합니다. 2. 예. 3. 예. 1에서 말했습니다. 그것은 데이터베이스가 아닌 애플리케이션의 작업입니다. –

+0

고마워, 내가 제대로 이해했는지 확인하고 싶었어. –