【发布时间】:2012-08-15 18:18:45
【问题描述】:
问题域
我正在开发一个相当大的应用程序,它使用分层数据模型。它拍摄图像、提取图像的特征并在这些特征之上创建分析对象。所以基本模型就像Object-(1:N)-Image_features-(1:1)-Image。但是同一组图像可以用于创建多个分析对象(具有不同的选项)。
然后一个对象和图像可以有很多其他连接的对象,例如可以使用附加数据细化分析对象,或者可以基于分析对象和其他数据得出复杂的结论(解决方案)。
当前解决方案
这是解决方案的草图。堆栈代表对象集,箭头代表指针(即图像特征链接到它们的图像,反之亦然)。某些部分:图像、图像特征、附加数据,可能包含在多个分析对象中(因为用户想对不同的对象集进行分析,组合方式不同)。
图像、特征、附加数据和分析对象存储在全局存储(god-object)中。解决方案通过组合存储在分析对象中(并依次包含解决方案特征)。
所有实体(图像、图像特征、分析对象、解决方案、附加数据)都是相应类的实例(如 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++ 对象关系的任何建议。
【问题讨论】:
-
嗨骏马。你问的是一个非常困难的问题。你也问了很多问题,不是一个。您将什么称为数据模型?您是否打算通过网络使用数据模型,将其写入内存中的文件?如果没有更多细节和具体问题,答案会变得更加困难
-
我打开一个文件,创建数据结构,使用它,保存回一个文件。 “数据模型”是指将有关现实世界对象的信息以及它们之间的关系存储在内存中。我会尝试编辑问题以专注于单个问题。
-
如果我需要进一步改进问题(如何?),请告诉我。
-
您似乎正在结合对您正在尝试做的事情的描述,对您提出的解决方案的描述以及关于使用什么解决方案的问题。这些都可以成为一个好问题的有用部分,但我认为您需要将它们分开一点并准确说明您在问什么。
-
我只是想了解您当前解决方案的结构。当您说“树状结构”时,您的意思是它是在单个类中完成的吗?还是相关类的集合? “数据重复” => 为什么会这样?为什么不维护相关数据的链接而不是复制它? “如果你有一片叶子,应该做很多工作” => 这是否意味着更多的实施工作或更多的运行时间?基本上,您是在寻找时间优化或更可维护/易于编码的解决方案吗?
标签: c++ hierarchical-data datamodel