GLO*_*GLO 4 database entity-attribute-value
我有一个超过100K记录的数据库.许多类别和许多项目(每个类别具有不同的属性)所有内容都存储在EAV中.
如果我试图打破这个方案并为任何类别创建一个独特的表是我必须避免的?
是的,我知道我可能会有很多表,如果我想添加一个额外的字段,我需要更改它们,但这是错的吗?
我还读到,尽管有很多表,但db会填充更多文件,这对任何文件系统都不利.
有什么建议吗?
作为数据库设计中的主要结构,随着数据的增长,结构将失败.您知道数据库模式不适合业务模型的方式是您需要对其进行查询以进行报告.EAV需要许多变通方法和非本机数据库功能才能获得合理的报告.即,即使是最小的查询,您也在不断创建交叉表/数据透视查询.所有处理EAV并将其置于可查询格式的处理都会咀嚼CPU周期并且非常容易出错.此外,数据的大小在几何上增长.如果您有10个属性,则标准设计中的10行将生成100个EAV行.100个标准行将等于1000个EAV行,依此类推.
数据库管理系统旨在处理大量表,这不应该是一个担心.
可以创建混合解决方案,其中EAV结构是解决方案的一部分.但是,规则必须是您永远不能包含查询[AttributeCol] = 'Attribute'.即,您永远不能过滤,排序,限制任何属性的范围.您无法在报表或屏幕上的任何位置放置特定属性.它只是一小撮数据.结合系统其余部分的良好模式,拥有存储数据blob的EAV非常有用.实现这项工作的关键是在您自己之间执行,开发人员永远不要跨越属性的过滤或排序.一旦你沿着黑暗的道路前进,它将永远支配你的命运.