【问题标题】:How to redesign an EAV table如何重新设计 EAV 表
【发布时间】:2012-03-22 00:33:24
【问题描述】:

MySql 数据库中的大多数表都不是EAV tables。我一直在阅读 SQL Antipatterns 并试图确定重新设计此表的最佳方法。我知道我们会喜欢在我们的 spring 表单中更容易引用和更好的数据完整性的好处。

EAV table 具有可选属性,可能会带来费用。在代码中,现在有 55 个选项,而且这个数字还在不断增长。每笔费用的平均属性数为 2.719,单笔费用最多使用 39 个属性。

在这种情况下创建一个包含 55 个以上选项的表格是理想的,还是下一个必须在表格大小上保持这种畏缩的人?

【问题讨论】:

  • 如果您注意到只有某些选项子集在一起才有意义,那么您可以使用多种表继承形式之一将它们重构为子表。
  • 谢谢,我已经考虑过了,但每次我开始它都是一项艰巨的任务,因为这么多费用类型可能包含也可能不包含字段。我可能只需要坐下来把它写出来看看它是否能正常工作。

标签: java mysql entity-attribute-value


【解决方案1】:

这听起来像是研究 document-oriented storage 作为替代(非 SQL)设计的好时机,其中 EAV 三元组可以存储为例如MongoDB 中的 JSON 数据。您没有为此定义模式,因此查询语法与 SQL 不同,但在某些情况下它可能更强大。例如,我最近看到一个关于使用这种设置使用 RDF 制作linked-data 存储的演示文稿,然后它形成了一个公共层,支撑着其他服务的整个负载,例如REST、webservices、XMLRPC 等。显然,这些数据都标准化了。

请参阅this question 了解更多关于这是否是个好主意的想法。

【讨论】:

  • 感谢您的建议和链接。对于我们模式中的一个表,使用非 SQL 数据库是一个好主意吗?这对 ORM 是否有效?
  • 看起来我们将尝试使用 REST 获取字段的一个表。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多