尽管在网上阅读了大量不同的意见和建议,但我仍然无法真正决定解决当前要求的最佳解决方案。
本质上,我需要建立一个系统,在这个系统中,可以使用任意数量的属性对对象进行任意定义。应用程序跟踪这些对象的位置和状态,我不可能在编译时知道这些对象的完整策略是什么(除了这将被出售给许多公司以跟踪它们将会是什么)。
数据本身将具有某种形式的关系。其中最大的一个是位置层次结构的概念; think Country-> Province-> Town-> Postcode-> Building-> Room-> Locker-> Object
数据中也会有其他一些Parent-> Child关系。例如,汽车的实例具有发动机的实例,具有活塞的实例。
对象和数据的历史将是重要的。对象在不同时间和地点的状态将是该系统的一个重要使用特征。能够检索报告的完整历史记录也很重要。
我看到的选项:
EAV - SQL中的实体属性值(或混合)
优点:
它的关系和规范化
查询功能强大
数据的关系和层次结构部分符合这种范例
通过存储日期与属性
缺点:
查询复杂性
90%的时间对象的每个属性都需要给予 大量的联接
很可能到处都会有支点
其他
与XML的关系会捕获所有列:
优点:
关系善,ORM等等(以上所有)
如何存储历史记录?
缺点:
绝大多数属性都在此XML列中 (说大于70%)
慢查询?
其他
文档数据库
优点:
打开架构
历史就像检索旧文档一样简单
缺点:
我有相当数量的关系数据!
查询支持(我不太了解专业知识和专业知识 缺点是每个文档DB技术)
其他
正如您所知,我的经验主要来自关系数据库(SQL)。除此之外,我已经在SQL中使用和EAV / Relational混合物原型化了一个类似的解决方案,并且当事情变得非常复杂时发现它是一个彻头彻尾的痛苦。
我是技术不可知论者;我拥有大量技术人员的前后经验,并且不会对学习任何新东西产生不利影响。
对我的情况有什么看法;它的长短是以上每一种都是解决问题的有效方法,但我很想听听其他人的想法和经历,所以我可以尽量避免任何代价高昂的盲目方面。