寻找可扩展,灵活和快速的数据库设计,以“建立自己的形式”风格的网站 – 例如Wufoo.
规则:
>用户只有1个可以构建的表单
>用户可以创建自己的字段或从“标准”字段中选择
>用户1表单包含用户想要的字段数
>值可以是另一个值的兄弟E.g照片值可以具有名称,位置,宽度,高度作为兄弟值
特别规则:
>用户每天最多可以提交5次表格
>价值日期很重要
>报告值的灵活性(针对单个用户,跨所有用户,1个字段,许多字段)非常重要 – 数据可视化(大多数将基于时间顺序,例如所有用户的2009年7月的所有照片).
表“用户”
UID
表“field_user” – 将字段分配给用户表单
瞎话
UID
weight – int – 用于对用户表单上的字段进行排序
表“字段”
瞎话
creator_uid – int – 字段’creator’
label – varchar – 例如电子邮件
value_type – varchar – 用于确定将填充’values’表中的哪个字段(例如,如果’int’,则此字段的值将数据提交到values.type_int字段中 – 并且所有其他.type_x字段将为NULL) .
field_type – varchar – 例如’email’ – 用于特殊情况,例如验证规则
表“值”
VID
parent_vid
瞎话
UID
日期 – 日期
date_group – int – 值1-5(用户每天最多可提交5个表格)
type_varchar – varchar
type_text – 文本
type_int – int
type_float – float
type_bool – bool
type_date – 日期
type_timestamp – 时间戳
据我所知,这种方法意味着’Value’表中的记录只有1个数据,其他.type_x字段包含NULL …但从我的理解,这个设计将是’最快的’解决方案(更少的查询,更少的连接)表)
解决方法:
昨天OSCON,Josh Berkus给出了关于数据库设计的一个很好的教程,他花了很大一部分时间无情地撕裂了这些“EAV”il表;你应该很快就能在OSCON网站上找到他的幻灯片,并最终在线录制他的整个教程(后者可能需要一段时间).
你需要一个每个属性的连接(值表的多个实例,你正在获取或更新的每个属性一个)所以我不知道“少连接表”是什么意思.加入同一个表的许多实例并不是一个特别快的操作,并且您的设计使索引几乎不可行且无法使用.
至少作为一个小的改进,使用每个类型的单独的表来表示你的属性值(也许某些索引可能适用于那种情况,尽管MySQL限制为每个查询每个查询一个索引,即使这有点可疑).
标签:dynamic-data,mysql,database-design,dynamic,field
来源: https://codeday.me/bug/20190730/1584519.html