「独自のフォームを作成する」スタイルの Web サイト (例: Wufoo ) 用のスケーラブルで柔軟かつ高速なデータベース設計を探しています。
ルール:
- ユーザーが作成できるフォームは 1 つだけです
- ユーザーは独自のフィールドを作成するか、「標準」フィールドから選択できます
- ユーザーの 1 フォームには、ユーザーが必要な数のフィールドがあります
- 値は別の値の兄弟になることができます。たとえば、写真の値は、兄弟の値として名前、場所、幅、高さを持つことができます
特別ルール:
- ユーザーは 1 日に最大 5 回フォームを送信できます
- 値の日付は重要です
- 値をレポートする柔軟性 (単一ユーザー、すべてのユーザー、1 つのフィールド、複数のフィールド) は非常に重要です。データの視覚化 (ほとんどの場合、すべてのユーザーの 2009 年 7 月のすべての写真など、時系列に基づいています)。
テーブル「ユーザー」
イド
テーブル "field_user" - フィールドをユーザー フォームに割り当てます
フィッド
イド
weight - int - ユーザーフォームのフィールドの順序付けに使用
テーブル「フィールド」
フィッド
Creator_uid - int - フィールド「作成者」
ラベル - varchar - 例: 電子メール
value_type - varchar - 「値」テーブルのどのフィールドが入力されるかを決定するために使用されます (たとえば、「int」の場合、このフィールドの値はデータを values.type_int フィールドに送信します - 他のすべての .type_x フィールドは NULL になります) .
field_type - varchar - 例: 'email' - 検証ルールなどの特別な条件に使用
表の「値」
ビデオ
parent_vid
フィッド
イド
日付 - 日付
date_group - int - 値 1 ~ 5 (ユーザーは 1 日に最大 5 つのフォームを送信できます)
type_varchar - varchar
type_text - テキスト
type_int - int
type_float - フロート
type_bool - ブール
type_date - 日付
type_timestamp - タイムスタンプ
このアプローチは、「値」テーブルのレコードが NULL を含む他の .type_x フィールドを持つ 1 つのデータしか持たないことを意味することを理解しています... しかし、私の理解では、この設計は「最速」のソリューションになります (クエリが少なく、結合が少ない)テーブル)