溶液はEntity Attribute Value(EAV)と呼ばれ、このモデルは、に対処するための王室の痛みをすることができます。だから、あなたはこれをできるだけ制限するべきです。
たとえば、ほとんどの場合フォーム(姓、名字、電子メールなど)にフィールドがあり、フィールドとしてテーブルに配置する必要があります。
あなたがしなければ誰か遅かれ早かれ、彼らはこれらの名前や電子メールを持っていることを認識し、あなたがこれを記述することができたときに、このクエリ
SELECT
Fname.value fname,
LName.Value lname,
email.Value email,
....
FROM
form f
INNER JOIN formFields fname
ON f.FormId = ff.FormID
and AttributeName = 'fname'
INNER JOIN formFields lname
ON f.FormId = ff.FormID
and AttributeName = 'lname'
INNER JOIN formFields email
ON f.FormId = ff.FormID
and AttributeName = 'email'
....
を構築することをお願いしようとしているではないので、その理由は、あなたが本当にもUNPIVOT
句
そのPを欠場するつもりだので
SELECT
common.fname,
common.lname,
common.email,
....
FROM
form f
INNER JOIN common c
on f.FormId = c.FormId
はまた、できるだけ早くすることができますようにSQL 2000の下車します過去に人々が遭遇した問題のアイデアを伝えるために前にSO EAV questionsを見ることは悪い考えではありません。
おそらく、私たちといくつかのフィールドと関係を共有することができます。時には、それは実際に目的に依存し、テーブルは正規化されなければならないことがあります。時には、テーブルを非正規化する必要があります(倉庫のような場合もあります)。 – Nonym
私はまだ設計の初期段階にありますので、いかなる手段によっても最終決定された。おそらく、gviewが以下に示唆するように、フォームタイプ、created_onなどのカラムを格納するフォームテーブルを持つつもりです...フォームテーブルは、フィールド名、タイプを格納するFormFieldテーブルと1対多の関係を持ちます、および値。 – pteranodonjohn
これは保険バックオフィスタイプのアプリだと付け加えたいと思います。フィールド値は、フィールドをアドレス指定するための運転免許証番号などの情報を保持します。 – pteranodonjohn