2

私は、ユーザーがユーザーのニーズに合わせてカスタム プロジェクトを作成できるアプリに取り組んでいます。プロジェクトは基本的に、別のユーザーが送信できるフォームです。

ユーザーがプロジェクト (基本フォーム) に新しいフィールド (Javascript を使用) を動的に作成し、各フィールドのカスタム値を選択できるようにしたいと考えています。

そして、プロジェクト (フォーム) の準備ができたら、それを送信することができ、ユーザーが指定した値がデータベースに送られます。次に、別のユーザーがフォームを送信すると、元のユーザーが選択した値がそのフォームのオプションになります。

値 (ユーザーによって動的に作成される) は、名前、電話番号、電子メールなどの基本的なデータになる可能性が最も高いですが、食べ物、住所などの特定のデータのオプションもあります。ユーザーができるようにしたい必要と思われるデータを求めること。

では、データベースをどのように構築すればよいでしょうか? ユーザーが自分のプロジェクトで何のフィールドを選択するかはわかりません。このアプリを従来のリレーショナル データベース (おそらく Postgres または Mysql) で実行することを考えていました。

それで、私が考えることができるすべてのデータの列を作成する必要がありますか(またはユーザーが作成できるようにする必要がありますか)、それとも他の方法でこれを行うことができますか?

4

4 に答える 4

1

評価アプリケーションで同様の状況に遭遇しました。各評価ではいくつかの質問が行われましたが、定期的に質問セットが変更されました。質問と回答のキーと値のペアを含む別のテーブルを作成するのではなく、PHP でのシリアル化を利用しました。

  1. すべてのフォームに含める必要があるデータを決定します (ID、送信者、送信日時、プロジェクト名、電話番号)。これらのデータ要素をテーブルに列にします。
  2. シリアル化されたデータ用の追加の列を作成します。これは、追加の属性を格納する場所です。

(必要なテーブルは 1 つだけです)

フォームの表示に関しては、シリアル化されたデータを使用して、必要な追加のフォーム要素を構築します。

このモデルでは、シリアル化されたデータに格納される追加データを検索することは困難ですが、開発は簡素化されます。数千の記録と評価ごとに 100 を超える「質問」があるため、まだ問題に遭遇していません。

于 2013-06-13T19:02:30.477 に答える
1

1 つの可能なオプション:

表: 入力

  • 説明:さまざまなタイプの入力を保存します (選択、複数選択、入力、チェックボックス、ラジオ)
  • フィールド: inputtypeid (プライマリ) input_type、、status

テーブル: フィールド

  • 説明: プロジェクト オーナーが作成した個々のフィールドを格納します。
  • フィールド: fieldid (プライマリ)、inputtypeid(参照入力)、label

表: 値

  • 説明:フィールドの値 (デフォルトおよびユーザーが送信した値) を保存します。
  • フィールド: valueid (プライマリ)、fieldid(参照フィールド) value、、default(bool yes/no)

テーブル: project_forms

  • 説明:プロジェクトに適用されるフィールドのリストを格納します。
  • フィールド: pfid (プライマリ)、projid(参照プロジェクト)、fieldid(参照入力)

ここで一点注意。ユーザーが個人を特定できる情報をこのようなものに保存できないように注意してください。または、そうする場合は、そのデータを保護するために必要な予防措置を講じてください。これは、このセットアップではほとんどの場合とは少し異なります.

于 2013-06-13T19:01:49.030 に答える
1

データベースには、フォーム仕様のテーブルに次の列が含まれている必要があります。

  • name (フォームの入力フィールドの「名前」属性として使用されるフィールドの名前)
  • ラベル (フォームに印刷する説明)
  • フォーマット(選択/入力/チェックボックスを区別したい場合)
  • 検証 (一連の検証ルールが必要な場合)
  • value_type (int/string/date/etc.. - ユーザーから受け取る値のタイプ。検証に役立ちます)
于 2013-06-13T19:00:10.303 に答える
1

EAVモデルを見てみたいかもしれません。必要な構造を柔軟に作成できるため、いくつかの利点がありますが、その後の取得とクエリにはいくつかの制限もあります。

于 2013-06-13T18:54:48.277 に答える