【发布时间】:2010-12-06 16:40:02
【问题描述】:
我正在调查一个个人 Grails 项目,并希望组合一个域模型来表示产品目录。我真的无法决定最好的方法。我将有许多不同的产品类别,尽管许多类别将只有一组在所有类别之间共享的基本属性(例如产品名称、产品描述、价格等)。但是,某些产品将具有特定于其类别的其他属性。
我研究了实体属性值 (EAV) 模型技术,该技术提供了一种非常可扩展的解决方案。而且,我考虑了使用显式 OO 继承模型的路线,其中我有基础 Product 类的子类来表示具有附加属性的任何产品。
显然,第二种方法的可扩展性较差 - 添加新产品类别需要一个新实体,并且可能需要一个用于前端的自定义视图/编辑器。然而,作为一名开发人员,我认为编程模型明显更清晰,更适合编写代码。
EAV 方法将允许动态可扩展性,但会导致更神秘的编程模型,并且会在数据库中产生性能开销(复杂的表连接)。前端的视图/编辑器可以动态生成,以包含产品类别的任意数量的自定义属性——尽管我确信从可用性的角度来看,这种动态生成还不够的情况会出现。
当我考虑像 Grails 这样的框架时,沿着创建显式继承模型的路线走下去似乎是有意义的。我不相信像 Grails 这样的框架会非常适合 EAV 方法 - Grails 的许多好处会在复杂性中丢失。但是,我不确定这种方法是否会随着产品类别数量的增加而实际扩展。
我真的很想听听其他人在此类建模挑战中的经验!
【问题讨论】:
标签: database database-design grails data-modeling