0

問題があります。非常に複雑なフォームを作成しています。フォームの一部は動的に作成されます。ドロップダウンから特定のオプションを選択すると、追加のフィールドがフォームに挿入されるとしましょう。

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

モデルで可能なすべての値を「0」として初期化することを考えていました。そして、それらを投稿データで上書きし、配列全体をテーブルに保存するだけです。このアプローチに問題がある人はいますか?

4

2 に答える 2

2

モデルで複数のテーブルを使用する必要性は、保存する必要があるデータの量 (フィールドの数) には依存しません。モデルのロジックに依存します。したがって、モデル (fe 1:n, n:m) で関係を使用する論理的な理由がある場合は、それを実行してください!!!

モデルを作成する際の基本的なルールに従わず、多くのテーブルに分割する必要があるにもかかわらず、すべてのデータを 1 つのテーブルに格納しようとすると、すぐに後悔することになります。将来コードを変更すると、さらに多くの作業が必要になり、ある時点で自分のコードを理解できなくなり、今度はルールに従ってコードを書き直さなければならなくなります ;)

また、適切なモデルの開発に多大な労力がかかる場合でも心配しないでください (最近、モデルの開発に 2 週間以上投資しました)。これは本当に理にかなっています。モデル。

一方、100 以上のフィールドを 1 つのテーブルに格納することが理にかなっている場合もありますが、これはロジックによって異なります。したがって、いくつかの例を提供する場合、1 つ以上のテーブルを操作する必要があるかどうかを言うことができます。

于 2012-04-07T14:31:58.457 に答える
0

後でフォーム データをどうするか、およびどのくらいの頻度で行うかによって、多くのことが異なります。

シリアル化された単一フィールド

最も単純な使用例では、すべてのデータを base64_encode(serialize($data)) し、それをデータベースの単一の列に入れることができます。

  • 単純
  • 挿入が速い
  • 入力フィールドの追加・変更が容易
  • 値の検索が困難かつ遅い (特に大規模な場合)
  • データに体系的な変更を加える必要がある場合、プログラムによる更新が困難
  • 常にデータベースからすべてのデータを引き出し、シリアル化された文字列のデータで SQL クエリを絞り込まない場合に最適です。

メタデータ テーブル

2 つ目のメタデータ テーブルを追加すると、柔軟性が少し向上します。2 番目のテーブルには、メイン フォーム送信への外部キー参照、メタデータ名、および値が含まれます。これにより、簡単に保存、検索、および操作できる非常に柔軟な多対 1 の関係が可能になります。この例はワードプレスで見ることができます。

  • 2 つのテーブルですが、それでもシンプルです
  • 入力フィールドの追加・変更が容易
  • SQLによる検索がはるかに優れています
  • 体系的な更新がはるかに簡単
  • 常にすべてのデータを取得できるとは限らない場合や、フォーム データで検索を絞り込む必要がある場合に最適です。

別の方向性 - このタイプのデータを大量に扱っている場合は、MongoDB や CouchDB などのドキュメント ベースのデータベースを検討することもできます。

于 2012-04-07T14:19:52.007 に答える