web-dev-qa-db-ja.com

EAVにするかしないか?

私はさまざまな形式のデータを記録するアプリケーションに取り組んでいます。新しいフォームは、管理者が動的に作成できます(作成する予定です)。このデータをデータベースに保存する正しい方法は何でしょうか?私の最初の推測はEVAを使用することですが、すべての悪い宣伝を考えると、私は少し躊躇しています。

私には2つの形式があるとしましょう:

#form 1
description = TextField()
score = IntegerField()

#form 2
feedback = TextField()
NOR_score = IntegerField()

可能な属性の数を予測する方法はありません。私は2つのアイデアで遊んでいますが、もっと良いアプローチを提案できるかもしれません。

アイデアI:

unique_id | entity | attribute   | value
1         | form 1 | description | test123
2         | form 1 | score       | 90
3         | form 2 | feedback    | blabla
4         | form 2 | NOR_score   | 5

アイデアII:

unique_id | entity | value
1         | form 1 | {"description": "test123", "score":"90"}
2         | form 2 | {"feedback": "blabla", "NOR_score":"5"}

提案を事前に感謝します。

1
Bart

あなたの例(アイデアII)は、responseをフォームに保存する方法を示しているように見えます。フォームの説明(管理者が作成したもの)を次のように同じファッションに保存しますか?

 id |名前|値
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - --------------- 
 1 | form1 | {"question1": "description"、 "question2": "score"} 

このルートを使用する場合は、フォームの完全な説明を非常に長いテキスト文字列として保存する必要があることを意味します。フォーム間で質問を再利用することはできません。どのフォームに特定の質問があったかを(簡単に)照会して見つけることはできません。多肢選択式など、より興味深いタイプのフォームの質問をすることは可能ですが、それはきれいではありません(そしてオプションセットを再利用することはできません)。

EAVソリューションが必要だと思う理由がわかりません。非常に単純なスキーマは次のようになります。

 form 
 ---- 
 id 
 name 
 
 question 
 ------- -
 id 
 form_id 
 question_text 
 
 
 question_answer 
 ---------- ----- 
 id 
 user_id 
 question_id 
 answer_value 
 
データ:
 
 form 
 ---- 
 id |名前
 ----------- 
 1 | form1 
 
質問
 -------- 
 id | form_id | querstion_text 
 ----------------------------- 
 1 | 1 |説明
 2 | 1 |スコア
 
回答
 ------ 
 id | question_id | answer_text |ユーザーID
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
 1 | 1 | test123 | 1 
 1 | 2 | 90 | 1 

これは機能しませんか?