评论我的MySQL数据库设计中的无限动态字段
寻找一个可扩展的,灵活的和快速的数据库设计为“建立自己的形式”风格的网站-例如 规则:评论我的MySQL数据库设计中的无限动态字段,mysql,database-design,dynamic,dynamic-data,field,Mysql,Database Design,Dynamic,Dynamic Data,Field,寻找一个可扩展的,灵活的和快速的数据库设计为“建立自己的形式”风格的网站-例如 规则: 用户只能生成一个表单 用户可以创建自己的字段或从“标准”字段中进行选择 用户的1表单具有用户所需的任意多个字段 值可以是另一个值的同级值,例如照片值可以具有名称、位置、宽度和高度作为同级值 特别规则: 用户每天最多可以提交5次表单 值的日期很重要 报告值的灵活性(对于单个用户、所有用户、1个字段、多个字段)非常重要——数据可视化(大多数将按时间顺序进行,例如,所有用户2009年7月的所有照片) 表格“用户”
值表的实例,每个正在获取或更新的属性一个),所以我不知道“少连接表”是什么意思。连接同一个表的多个实例并不是一个特别快的操作,而且您的设计使得索引几乎不可行且不可用
至少作为一个小小的改进,为属性的值使用每种类型的单独表(在这种情况下可能会使用一些索引,尽管MySQL的限制是每个表每个查询一个索引,尽管这有点可疑)。您应该真正研究无模式的数据库,比如,像这样的问题正是这些类型的数据库想要解决的。在许多现代rdbms实现中,您可以在运行时执行创建表、更改、添加列等操作。为什么是埃维尔?尤其是当您使用动态sql时
这不是给胆小鬼的。我记得波音公司的一个实现,它在一个数据库中生成了70000个表
显然,动态表创建中存在缺陷,但EAV表也存在缺陷。例如,同一个键的两个属性表示相同的事实。或可传递依赖项和其他规范化问题。那么,为什么不至少代表您利用RDBMS的力量呢?我同意约翰·欧文的观点
与查询EVA表相比,从模式动态创建查询的代价很小。尤其是如果桌子很大的话
通常,表列被视为“接口”。依赖于动态变化的接口的设计通常是不好的,但EAV数据是一种特殊情况,在这种情况下,您没有很多选择。您必须在慢速非直观查询和动态模式之间进行选择。感谢您提供了指向OSCON和EAV的链接。Josh是否为EAV'il数据库场景提出了另一种数据库设计方案?在SQL中没有真正好的方法实现“完全灵活的模式”,请参阅许多PGExpert演示文稿的幻灯片链接,包括OSCON 09演示文稿(“有效的数据库”也应该有一些内容);EBlob本质上是另一种选择,当然它也有很多问题(不同于EAVil)。。。我可以试着用MySQL从一个圆圈中挤出一个正方形,但这是我的选择。不过CouchDB看起来确实很有趣,谢谢你的提示;-)