2012-04-10 17 views
12

私は複数の選択肢のクイズを実装しようとしており、すべての質問と回答をSQLiteデータベースに保存したいと考えています。私は多くの疑問を抱き、それぞれの質問に対して2つ以上の答えが表示されます。データベースに複数の選択肢のクイズを保存する - スキーマを決定する

私の質問は、質問と回答をデータベースにどのように保存すればよいですか? (:INT、questionString:文字列、correctAnswerID:int型questionID

私は(太字の主キー)

質問(多くの多くの)として

  1. スキーマのための2つのアイデアを持っています

    の回答(answerID:INT、answerString:String)を

    questions_and_answers(questionIDanswerID

    2.

    質問(questionID:INT、questionString:文字列、correctAnswerID:int型)

    の回答(answerID:INT、answerString:文字列、questionID: int 外部キー

    どちらが良いか、別の方法があるかわかりません。

    おそらくquestions_and_answersが非常に大きくなり、長い検索時間とメモリの問題が発生しますか?次に、私はquestion_and_answersが主キーで索引付けされると仮定します。 2番目のスキーマでは、answersは​​に索引付けされ、questionIDではなく?テーブル全体を検索する必要があるため、検索時間が増えるでしょうか?

    〜10,000〜20,000件の回答があります。 (クイズはモバイルデバイス上で実行される可能性があり、質問は「瞬時に」表示する必要があります)

    注:質問間の回答の重複はあまりありません。 questions_and_answersテーブルで必要な余分なスペースを考慮して、重複量が少なくて済むとは思いません。

+0

あなたの回答は複数の質問に重複している可能性がありますか? – Tenner

+0

おおまかな推測では、回答の30%が複数の質問に表示される可能性があります。 –

答えて

7

実際のドメインをモデル化しているため、2番目のスキーマが優れています。答えのセット。重複した回答を一度保存​​してデータを圧縮することができたとしても、は実際のドメインと一致しません。

あなたは答えを編集したいと思うでしょう。スキーマ1では、最初にその回答が存在するかどうかを検索することを意味します。それが存在する場合は、古い質問に依然として依頼があるかどうかをチェックする必要があります。それが存在しない場合は、他の質問がその回答に依存しているかどうかを確認してから、その回答を所定の場所で編集するか、新しい回答を作成する必要があります。

スキーマ1は、人生を本当に難しくしています。

インデックスの質問に答えるには、questionIdにインデックスを追加する必要があります。そのインデックスを取得したら、質問の回答を調べることで規模を拡大する必要があります。

今、全く異なる注釈で、なぜこのためのデータベースを使用しますか? jsonのような標準形式で簡単な文書として保存することを検討してください。いつでもあなたは質問を照会すると、ほとんどの場合答えが欲しくなり、その逆もあります。複数のクエリを実行する代わりに、ドキュメント全体を1つの手順で読み込むことができます。

さらに高度なストレージ(クエリ、冗長性など)が必要な場合は、MongoDBやCouchDBなどのドキュメントデータベースに移動できます。

+0

質問を削除する方法について考えて、スキーマ1でもっと難しくなると考えました。今私に感謝!質問を検索/管理/保存/編集する方が簡単だと思ったのでデータベースを使うと思った。ドキュメントとして保存することは決して私には起こりませんでした。これはパフォーマンスが著しく向上すると思いますか?あなたの答えをありがとう –

+1

あなたのデータの使い方が私の予想どおりであれば、文書ベースのソリューションは簡単に改善されます。ドキュメントソリューションは、(質問+回答)と比較して1つのルックアップ(ドキュメント)しか持たない。 –

-1

questionID列がに外部キーと呼ばれているとしてテーブルとcorrectAnswerID列に答える(円形ループ)デッドロックらしいが質問テーブルの外部キーと呼ばれています。

答えテーブルにビットタイプの列を作成して、正しい答えをマークし、correctAnswerID列を削除する方が良いです。

関連する問題