问题域
我正在开发一个相当大的应用程序,它使用分层数据模型。它拍摄图像、提取图像的特征并在这些特征之上创建分析对象。所以基本模型就像Object-(1:N)-Image_features-(1:1)-Image。但是同一组图像可用于创建多个分析对象(具有不同的选项)。
然后一个对象和图像可以有很多其他连接的对象,例如可以使用附加数据细化分析对象,或者可以基于分析对象和其他数据得出复杂的结论(解决方案)。
当前解决方案
这是解决方案的草图。堆栈代表一组对象,箭头代表指针(即图像特征链接到它们的图像,但反之则不然)。某些部分:图像、图像特征、附加数据,可能包含在多个分析对象中(因为用户想对不同的对象集进行分析,组合方式不同)。
图像、特征、附加数据和分析对象存储在全局存储(上帝对象)中。解决方案通过组合存储在分析对象中(并依次包含解决方案特征)。
所有实体(图像、图像特征、分析对象、解决方案、附加数据)都是相应类的实例(如 IImage,...)。几乎所有部分都是可选的(即,我们可能想在找到解决方案后丢弃图像)。
当前解决方案的缺点
- 当您需要像草图中的虚线这样的连接时,导航这个结构是很痛苦的。如果您必须在顶部显示具有几个解决方案特征的图像,您首先必须遍历分析对象以查找其中哪些基于该图像,然后遍历解决方案以显示它们。
- 如果要解决 1. 您选择显式存储虚线链接(即图像类将具有指向与其相关的解决方案特征的指针),您将付出很大的努力来保持这些指针的一致性并在某些情况发生变化时不断更新链接.
我的想法
我想建立一个更可扩展(2)和灵活(1)的数据模型。第一个想法是使用关系模型,分离对象及其关系。为什么不在这里使用 RDBMS - sqlite 对我来说似乎是一个合适的引擎。因此,复杂的关系可以通过数据库上的简单(左)JOIN 访问:伪代码“ images JOIN images_to_image_features JOIN image_features JOIN image_features_to_objects JOIN objects JOIN solutions JOIN solution_features
”),然后按 ID 从全局存储中获取解决方案功能的实际 C++ 对象。
问题
所以我的主要问题是
- 使用 RDBMS 是解决我所描述的问题的适当解决方案,还是不值得并且有更好的方法在我的应用程序中组织信息?
如果 RDBMS 没问题,我将不胜感激有关使用 RDBMS 和关系方法存储 C++ 对象关系的任何建议。