2012-03-21 86 views
4

我们的MySql数据库中的大多数表不是EAV tables。我一直在阅读SQL反模式,并试图确定重新设计此表的最佳方式。我知道我们会喜欢在春季表格中更容易引用的好处以及更好的数据完整性。如何重新设计EAV表

EAV table有可能带有费用的可选属性。在代码中,现在有55个选项,该数字不断增长。每项费用的平均属性数量为2.719,最多的单项费用为39项属性。

在这种情况下,创建一个包含55个选项的表格是否理想,或者下一个必须维持桌面大小的下一个人吗?

+1

如果您注意到只有某些选项的子集合才有意义,那么您可以使用多种表格继承形式之一将它们重构为子表格。 – Hiro2k 2012-03-21 15:09:22

+0

谢谢,我已经考虑过这个问题,但每次我开始执行一项艰巨的任务时,因为有太多费用类型可能包含或不包含字段。我可能不得不坐下来写下来看看它是否会运行良好。 – 2012-03-21 18:39:51

回答

3

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

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

+0

感谢您的建议和链接。在我们的模式中,使用非SQL数据库是否是一个好主意?这对ORM是否合适? – 2012-03-21 18:38:50

+0

看起来我们会尝试使用REST来获取字段。谢谢! – 2012-05-01 16:20:07