2011-02-01 9 views
2

私はCodeigniterで誰もがサインインせずに、異なる入力タイプ(テキストボックス、ドロップダウン、チェックボックスなどを使用して記入するフォームを作成する)を作成します。 )。このフォームは1〜100の質問になります。完了すると、他の人にメールで送信され、サイトに記入されます。動的フォーム作成のための効率的なMySQLデータベース構造

私は最初にthis postに似たMySQLデータベースをセットアップしましたが、いくつかのテーブルはすべてわずかな列で構成されていました。私は索引付けし、外部キーを使用して情報をリンクしました。

それ以来、私はので、私は少数のクエリを作ってるんだ、このように変更して、私のデータベースを設定しています

Document 
    id, name, email, recipientname, recipientemail, document name 
Document Questions 
    document_id, question_id, question, type, comments 

が少ない列と複数のテーブルを持つが、私はやっている方法よりもクエリのより効率的ですそれは今?私はnormalizationが役割を果たしていることを理解していますが、あなたのテーブルを非常に小さくすることでパフォーマンスをどの程度まで阻害していますか?

答えて

1

正規化の観点からは、データをさらに正規化するためにできることがあります(受信者は独自のエンティティとタイプを持つこともできます)が、データにアクセスするのに必ずしも最適な方法ではありません。例えば

、あなたは4つの異なるエンティティ(タイプが同じように簡単にENUMすることができる)にあなたの問題を分割する場合:あなたがしてクエリを実行することになるアプリケーションのための単一のフォームを取得するためにその後

Documents 
Document Questions 
Recipients 
Types 

複数の結合。 MyISAMを使用している場合、クエリが終了するまで、4つのテーブルはすべてロックされます。悪い結合や悪いインデックスのクエリは非常に遅くなる可能性があります。

データベースで4つの個別のクエリを実行して(実行中の最も一般的なクエリに対してインデックスを追加する)、データを取得することができます。この方法では、テーブルは短時間ロックされたままです。

これは極端な例ですが、索引の最適化にもっと集中し、正規化とパフォーマンスのバランスをとることにします。

合計すると、完全に正規化されたデータは、パフォーマンスが低下することがあります。

+0

ありがとうございます。追加のエンティティとタイプを追加します。 – joshvermaire

関連する問題