1

次の機能を備えた PHP でアプリを開発したい

  • ユーザーは、フォーム デザイナーを使用して、必要な数のフィールドを持つ複数のフォームを作成できます。
  • すべてのフォーム送信は mysql に保存されます
  • ユーザーは後でそれぞれのフォーム送信を確認できます

UI部分とフォームデザイナーを担当しました。

問題

フォーム送信を受け入れるためのデータベースを設計する方法を理解できません。たとえば、ユーザーが次のフィールドを持つフォームを作成した場合

  • 名前
  • Eメール
  • 主題
  • クエリ

ただし、後でユーザーは、データベースの設計をいじることなくフィールドを追加または削除できます。

フォームをテーブルに保存して送信するためのMySQLデータベースの設計を手伝ってください。

4

1 に答える 1

3

このようなもの:

CREATE TABLE forms (
  form_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, -- the UID of this form
  owner   INT,                                     -- the user who "owns" the form
  PRIMARY KEY (form_id)
);

CREATE TABLE fields (
  form_id  BIGINT UNSIGNED NOT NULL,
  field    VARCHAR(10),                            -- the field name
  PRIMARY KEY (form_id, field),
  FOREIGN KEY (form_id) REFERENCES forms (form_id)
);

CREATE TABLE submissions (
  submission_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  form_id       BIGINT UNSIGNED NOT NULL,
  field         VARCHAR(10),
  value         BLOB,                              -- stores PHP's serialize($var)
  PRIMARY KEY (submission_id),
  FOREIGN KEY (form_id) REFERENCES forms (form_id),
  FOREIGN KEY (form_id, field) REFERENCES fields (form_id, field)
);

フォームのデザインを変更した場合は、データベースに新しい (コピー) フォームを作成して、古いデザインに基づく過去の送信が無効にならないようにすることをお勧めします。

于 2012-07-09T07:14:43.900 に答える