0

単純化しようとしてきた興味深い問題があります。私には、いくつかのサインアップフォームを持っている電気通信クライアントがいます-それぞれが異なるプログラム/オファーを表しています。各フォームは基本的に同じですが、他のフォームにはないフォームフィールドがあるものもあります。ご想像のとおり、これはデータベースとCRUDコードの両方で悪夢です。

現在のところ、各フォームは個別に処理され、アプリケーションフォームごとに専用のMySQLテーブルに入ります。恐ろしいことに、各アプリケーションには個別のCRUDコードがあります。この状況に最もよく対処する方法については、経験豊富な人に任せたいと思います。

フォーム要素をCSVに解析することを考えました。CRUDが1つのテーブルで簡単に機能できるように、要素を識別する種類のスキーマを定義します。ただし、これらのフォーム要素が変更されることがあり、すべてを整理してクリーンに保つことが困難になることがあるため、これは問題です。また、標準要素を含む基本フォームを使用することについても、異なる要素を必要とするフォームは、FKを使用して別の場所に格納されます。

これを簡単にするために何ができるかについて、私は本当に途方に暮れています。アプリケーション用にいくつかのテーブルがあり、処理用にいくつかのCRUDがあるのは嫌いです...

TLDR; データベース内のいくつかの一意の/かなり大きい(20個の要素)フォームの処理/保存を最適に管理し、それらにCRUDを実装するにはどうすればよいですか?

御時間ありがとうございます。

編集私はまた、フォーム要素と受け入れられるデータ型を定義するJSONまたはXMLの実装についても考えました。これはシステムによって変更される可能性があり、保存時に、キャッシュされたHTMLフォームページと各アプリケーションの更新されたSQLコードを生成する可能性があります。そうすれば、編集の問題を解決できます。ただし、この実装に基づくと、まだいくつかのテーブルが必要です。

4

1 に答える 1

1

これを実現する1つの方法は、ある種のIDを含め、すべてのフォームに共通するいくつかのフィールドを定義するベーステーブルを用意することです。次に、残りのすべてのフォームデータを各フォームの名前と値で格納する個別のテーブルがあります。実際には、オブジェクト番号があり、フォーム内の各データの属性名/値のセットがあります。

CREATE TABLE submission {
    submission_id INT,
    creation_date DATETIME
};

CREATE TABLE submission_attributes {
    submission_id INT,
    attr_name VARCHAR(50),
    attr_value VARCHAR(255)
};

ここでの秘訣は、あらゆる提出物を有用なPHPオブジェクトまたは配列(どちらか操作したい方)に変換できる汎用のハイドレーション関数を用意することです。

データベースは文字列のみを処理するため、検証機能は、有効な送信とそうでないものを知るタスクに対応する必要があります。無効なデータを拒否するためにデータベースに依存することはできません。

別のアプローチは、オブジェクトデータベースを使用することです。私のお気に入りはMongoDBです。これを使用すると、任意の複雑なデータをJSONとして保存でき、深くネストされたオブジェクト属性でインデックスを作成/検索することもできます。しかし、仕事を成し遂げる他のツールもあります。

于 2012-10-09T16:39:02.967 に答える