2012-04-07 9 views
0

私は問題がある、私は非常に複雑なフォームを作成しています。フォームの一部は動的に作成されます。ドロップダウンから特定のオプションを選択すると、余分なフィールドがフォームに注入されます。動的フォームデータをデータベースに挿入します。 PHP

どのような方法でデータを保存するのが最適でしょうか?私は複数のテーブルを使用せずに試してみたいと思います。なぜなら私はアプリケーション全体を非常に複雑にするからです。

私のモデルでは、すべての値を「0」として初期化することを考えていました。その後、それらをポストデータで上書きし、配列全体をテーブルに格納するだけです。誰もがこのアプローチの問題を参照してください?

答えて

0

多くのことは、フォームデータで何をしたいか、またどのくらいの頻度で行うかによって異なります。

直列化された単一フィールド

最も単純なユースケースでは、(シリアライズ($データ))、すべてのデータをBASE64_ENCODE可能性があり、データベース内の1つの列の中にそれを置きます。

  • シンプル
  • 入力フィールドを追加/変更する
  • 簡単に挿入して高速
  • 困難で、(特にスケールでの)値を検索するスロー
  • プログラムであなたが作る必要があるの更新が難しいですデータの系統的な変更
  • 常にすべてのデータをdbから取り出して、シリアライズされた文字列内のデータによってSQLクエリを絞り込むことはできません。

メタデータテーブル

第2のメタデータテーブルを追加すると、もう少し柔軟性を提供できます。 2番目のテーブルには、メインフォームのサブミット、メタデータ名、および値に対する外部キー参照があります。これにより、多対1のリレーションシップが非常に柔軟になり、簡単に格納、検索、操作することができます。これの例をwordpressで見ることができます。

  • 2のテーブルが、あなたは常にすべて取得しない場合は、体系的
  • パーフェクトを更新する方がはるかに簡単はるかに良いSQL
  • 経由で検索/変更入力フィールド
  • を追加するために、まだ簡単な
  • 簡単データまたはフォームデータによる検索を絞り込む必要があります

そして、別の方向を検討することもできます。ドキュメントベースのデータベースliあなたがこの種のデータをたくさん扱っているなら、MongoDBかCouchDBを使ってください。

2

モデルで複数のテーブルを使用する必要は、保存するデータの量(モデルの数)に依存しません。モデルのロジックによって異なります。したがって、あなたのモデル(f.e. 1:n、n:m)で関係を使用する論理的な理由があるならば、やってみてください!

モデルを作成する際の基本的な規則に従わない場合は、f.eを試してみてください。すべてのデータを1つのテーブルに格納するには、多数のテーブルに分割する必要がありますが、すぐに後悔します。将来的にコードが変更されると、より多くの作業が必要になります。また、ある時点で独自のコードを理解できず、ルールを再作成する必要があります。)

私のモデルを開発するのに2週間以上を費やしました。それは後で、よく開発され、計画されたモデルを使ってはるかに迅速かつ効果的に働くことができるからです。

一方、1つのテーブルに100以上のフィールドを格納すると意味があります。論理に依存します。したがって、いくつかの例を提供するなら、多分あなたは1つ以上のテーブルを扱うべきかどうかを言うことができます。

関連する問題