2010-08-20 4 views
0

ActionScript 3.0에서 퀴즈에 대한 유연한 데이터 구조 (관계형 데이터베이스 등)를 만들기 위해 고심하고 있습니다.ActionScript 3.0에서 관계형 테이블 표현

질문

 
| id | alt1 | alt2 | correctAlt | 
--------------------------------------- 
| 0 | Sweden | Denmark | 1   | 
| 1 | Norway | Finland | 2   | 
| 2 | Iceland | Ireland | 1   | 

그리고 고유 ID를 가진 사용자의 수 :

나는이 개 대안 각 질문의 번호를 가지고

사용자

 
| id | age | sex | profession | totalCorrect | 
------------------------------------------------- 
| A5 | 25 | 0 | "Lorem" | 0   |    
| A6 | 45 | 1 | "Ipsum" | 0   | 
| A7 | 32 | 1 | "Dolor" | 0   | 

그리고 각 사용자가 질문에 대답 수 있습니다

 
| question_id | user_id | answer | 
---------------------------------- 
| 0   | A5  | 1  | 
| 1   | A6  | 2  | 
| 2   | A7  | 1  | 

가 어떻게 AS3이를 나타낼 수 있습니다 답변을?

A : 같은
그리고이 모든 데이터를 수집 한 때 내가 대답 할 수있는 방법 질문입니다. 얼마나 많은 사용자가 질문 1에 답변 했습니까?
b. 질문 1에 답변하는 사용자 중 몇 퍼센트가 맞습니까?
c. 그리고 어떻게 각 사용자에 대한 정답의 수를 합산하고 totalCorrect 열을 업데이트 할 수 있습니까?

+1

이것은 html + swf 응용 프로그램입니까, 아니면 AIR 응용 프로그램입니까? 왜 로컬 데이터베이스를 사용하지 않습니까? – dirkgently

+0

온라인 또는 오프라인 용으로 만든 단순한 swf입니다. 본질적인 AS3 데이터 구조를 사용하여 이러한 테이블과 관계를 복제 할 수있을 것이라고 생각했지만 분명히 잘못되었습니다. – dani

답변

0

. 특정 클래스를 만들 수 있습니다.

다음은 Question 클래스의 기본 예제입니다.

 
public class Question 
{ 
    private var _id:int; 
    private var _alternatives:Array; 
    private var _correctAnswer:int; 

    public function Question() 
    { 
    } 

    //----------- Group: Getters & Setters 
    // follow the same principle as alternatives for id & correctAnswer 

    public function set alternatives(value:Array):void 
    { 
     _alternatives = value; 
    } 

    public function get alternatives():Array 
    { 
    return _alternatives; 
    } 

    // etc..... 
} 

var question1:Question = new Question(); 
question1.alternatives = ["Sweden" , "Denmark"] 
question.correctAnswer = 1; 
question.id = 0; 

그런 다음 당신이 데이터를 조작 할 수 있습니다 또 다른 클래스를 만들고, 생성자

 
public class Question 
{ 
    private var _id:int; 
    private var _alternatives:Array; 
    private var _correctAnswer:int; 

    public function Question(id:int , alt:Array, correct:int) 
    { 
     _id = id; 
     _alternatives = alt; 
     _correctAnswer = correct; 

    } 

    var question1:Question = new Question(0 , ["Sweden" , "Denmark"] , 1); 

누구나 비슷한 작업을 수행하는 매개 변수를 전달하는 것도 가능합니다.

일반적으로 클래스 및 객체 지향 프로그래밍에 대한 리소스를 찾으십시오.

+0

좋아요,이 정도는 알지만 관계를 관리하는 데 어떻게 도움이됩니까? 그리고 a, b 및 c는 어떻게 대답합니까? 덕분에 . – dani

+0

더 이상은 없습니다 ... AS3에서는 질문의 첫 부분을 나타 냈습니다. 사용자 및 답변에서도 동일한 작업을 수행 할 수 있습니다. 관계형 데이터베이스와 마찬가지로 User 클래스에는 질문에 대한 답변 ID 배열 또는 답변이있는 질문 배열이있을 수 있습니다. 질문 클래스에서는 사용자 응답을 저장하는 currentAnswer 속성을 가질 수 있습니다. 어떻게 조작 할 것인지에 따라 속성을 만듭니다. 다른 알아야 할 것이 있는지 잘 모르겠습니다 ... – PatrickS

0

이 데이터를 SQL database에 저장하는 것이 좋습니다.
SQL 데이터베이스는 질문별로 데이터를 추출하는 데 도움이됩니다.

공기를 사용하는 경우 Air SQLite (로컬 데이터베이스)과 같이 쉽게 입력 할 수 있습니다.

을 사용하여 SQL 데이터베이스에 연결하거나 URLRequest() 메서드를 사용하여 보낸 SQL 요청으로 데이터를 가져올 서버에 POST 또는 GET 메서드를 사용할 수 있습니다.

질문 유형에 맞게 SQL 데이터베이스를 사용하는 것이 좋습니다. 여기

는 질문은 질문 하나를 대답 얼마나 많은 사용자가 SQL

  1. 로 번역이야?
    당신은
    SELECT users.id FROM users, answers, questions WHERE questions.id = 0 AND answers.question_id = questions.id AND answers.answer = questions.correctAlt;
  2. 얼마나 많은 사용자가 질문 한 대답 답 테이블에 ID를 추가하는 것을 잊었다?
    이 작업은 두 가지 쿼리로 수행 할 수 있습니다. 둘 다 많은 사용자를 반환합니다. 먼저 질문에 답변 한 모든 사용자. 둘째, 번역 된 첫 번째 질문과 동일합니다.
    SELECT users.id FROM users, answers, questions WHERE questions.id = 0 AND answers.question_id = questions.id;
    SELECT users.id FROM users, answers, questions WHERE questions.id = 0 AND answers.question_id = questions.id AND answers.answer = questions.correctAlt;
  3. 어떻게이 totalCorrect 열을 각 사용자에 대해 정답의 수를 합계하고 업데이트 할 수 있습니까?
    간단한 쿼리로 해결할 수 있으므로 테이블에 이러한 종류의 열조차 필요하지 않습니다. 데이터베이스를 사용하거나하지, 그것은 목적이 데이터를 표현하는 것은 여전히 ​​가능 여부
    SELECT answers.id FROM users, answers, questions WHERE answers.question_id = questions.id;
+0

저는 실제로 AIR을 사용하지 않습니다.하지만 아마도 ... AS3 객체를 사용하여 이것을 표현할 방법이 없습니까? SQL은 실제로 갈 방법입니까? 감사합니다. . – dani

+0

순수한 객체의 문제를 해결하는 방법은 항상 있지만 SQL이 데이터를 저장하고 쿼리에 응답하도록 만들어 졌으므로 왜 사용하지 않을까요? 단일 SQL 쿼리에 여러 시간의 프로그래밍을 저장할 수 있습니다! 내 대답의 편집을보고, 나는 당신의 질문을 SQL 질의로 번역했다. – AdamScott

0

나는 당신의 문제를 더 자세히 조사 할 시간을 가졌다. 질문, 사용자 & Answer 및 AnswerEvent 클래스의 모델로 세 클래스를 만들었습니다.

주 클래스는 데이터를 조작하기위한 중심점 역할을합니다. 사용자가 질문에 대답하면 사용자의 대답 (Answer 클래스)이 주 클래스에 알리기 위해 이벤트를 전달합니다. 대답에는 사용자 속성, 질문 속성 및 isCorrect 속성이 있으며 AnswerEvent에는 주 클래스에 저장할 수있는 Answer 개체가 포함되어 있습니다.

이벤트가 전달 된 후 응답은 응답 배열에 저장됩니다. 각 대답에는 사용자 데이터뿐만 아니라 대답 된 질문 &이 포함되어 있으므로이 배열을 사용하여 a, b & c 개의 질문에 대답 할 수 있습니다.

수업에 관해서, 나는 첫 번째 대답에 노출 된 것과 비슷한 원리를 따랐다. 방금 일부 발췌 록을 게시 했으므로 여기에 모든 코드를 게시 할 수있는 충분한 공간이 없다고 생각합니다.

 
//Inside the main class 
private var answers:Array = []; 

private function init():void 
{ 
    this.addEventListener(AnswerEvent.ANSWER , answerEventListener); 

    var q1:Question = new Question(0 , ["Sweden" , "Denmark"] , 0); 
    var q2:Question = new Question(1 , ["Norway" , "Finland"] , 1); 
    var q3:Question = new Question(2 , ["Iceland" , "Ireland"] , 0); 

    var user1:User = new User(5 , 25 , 0 , "Lorem" ); 
    var user2:User = new User(6 , 45 , 1 , "Ipsum" ); 
    var user3:User = new User(7 , 32 , 1 , "Dolor" ); 

    //if the answer is correct , the totalCorrect property is incremented 
    // in the User class, check the Answer class below for an explanation of the 
    //parameters  
    user1.answer(new Answer(this , user1 , q1 , 1)); 

} 

private function answerEventListener(event:AnswerEvent):void 
{ 
    answers.push(event.answer); 
    trace(this , event.answer.isCorrect); 
    trace(this , event.answer.user.age); 
} 

다음은 Answer 클래스의 모델입니다. 공간 부족으로 getter를 추가하지 않았습니다. AnswerEvent은 Event 클래스를 확장하고 Answer 유형의 대답 속성을 추가합니다.

 
public class Answer 
{ 
    private var _question:Question; 
    private var _answer:int; 
    private var _user:User; 
    private var _isCorrect:Boolean; 

    public function Answer(dispatcher:EventDispatcher , user:User , question:Question , answer:int) 
    { 
    this._user = user; 
    this._question = question; 
    this._answer = answer; 

    // not essential but will help iterate thru correct answers 
    // the _answer property should be _answerIndex really, in order not to be confused 
    // with an Answer object (quick job !)   
    if(question.correctAnswer == answer) 
    _isCorrect = true; 

    // the this keyword corresponds to this answer   
    dispatcher.dispatchEvent(new AnswerEvent(AnswerEvent.ANSWER , this)); 
    } 
} 
관련 문제