【发布时间】:2010-11-12 16:41:01
【问题描述】:
为“构建自己的表单”风格的网站寻找可扩展、灵活且快速的数据库设计 - 例如 Wufoo。
规则:
- 用户只能构建 1 个表单
- 用户可以创建自己的字段或从“标准”字段中进行选择
- 用户的 1 个表单具有用户想要的尽可能多的字段
- 值可以是另一个值的兄弟值,例如照片值可以具有名称、位置、宽度、高度作为兄弟值
特别规则:
- 用户每天最多可以提交 5 次表单
- 值的日期很重要
- 报告值的灵活性(对于单个用户、跨所有用户、1 个字段、许多字段)非常重要——数据可视化(大多数将按时间顺序排列,例如所有用户 2009 年 7 月的所有照片)。
表“用户”
uid
表格“field_user” - 将字段分配给用户表单
fid
uid
weight - int - 用于对用户表单上的字段进行排序
表格“字段”
fid
creator_uid - int - 字段'creator'
标签 - varchar - 例如电子邮件
value_type - varchar - 用于确定 'values' 表中的哪个字段将被填充(例如,如果 'int' 则该字段的值将提交数据到 values.type_int 字段 - 所有其他 .type_x 字段将为NULL)。
field_type - varchar - 例如'email' - 用于特殊情况,例如验证规则
表“值”
视频
parent_vid
fid
uid
日期 - 日期
date_group - int - 值 1-5(用户每天最多可以提交 5 个表单)
type_varchar - varchar
type_text - 文本
type_int - int
type_float - 浮动
type_bool - bool
type_date - 日期
type_timestamp - 时间戳
我知道这种方法意味着“值”表中的记录将只有 1 条数据,而其他 .type_x 字段包含 NULL……但据我了解,这种设计将是“最快”的解决方案(更少的查询, 少连接表)
【问题讨论】:
标签: mysql database-design dynamic dynamic-data field