问题域
我正在开发一个相当大的应用程序,它使用分层数据模型。它获取图像,提取图像的特征,并在此基础上创建分析对象。因此,基本模型类似于对象-(1:n)-Image(1:1)-Image。但是同一组图像可以用于创建多个分析对象(具有不同的选项)。
然后一个对象和图像可以有很多其他连接的对象,比如分析对象可以用附加的数据进行细化,或者复杂的结论(解决方案)可以基于分析对象和其他数据。
电流溶液
这是解决方案的草图。堆栈表示一组对象,箭头表示指针(即图像特征链接到它们的图像,反之亦然)。某些部分:图像、图像特征、附加数据可能包含在多个分析对象中(因为用户希望对不同的对象集进行分析,组合方式不同)。

图像、特征、附加数据和分析对象存储在全局存储(上帝-对象)中.解决方案通过组合存储在分析对象中(并依次包含解决方案特性)。
所有实体(图像、图像特征、分析对象、解决方案、附加数据)都是相应类的实例(如IImage、.)。几乎所有的部分都是可选的(也就是说,在我们有了解决方案之后,我们可能想要丢弃图像)。
当前解决方案的缺点
我的想法
我想要构建一个更可扩展的(2)和灵活的(1)数据模型。第一个想法是使用关系模型,将对象及其关系分离。为什么不在这里使用RDBMS呢? sqlite似乎是一个合适的引擎。因此,复杂的关系可以通过数据库上简单(左)联接的方式访问:伪代码"images JOIN images_to_image_features JOIN image_features JOIN image_features_to_objects JOIN objects JOIN solutions JOIN solution_features"),然后通过ID从全局存储中获取实际的C++对象以获得解决方案的特性。
问题
所以我的主要问题是
如果关系数据库管理系统没有问题,我希望得到任何关于使用关系数据库管理系统和关系方法来存储C++对象关系的建议。
发布于 2012-08-29 05:32:46
我不推荐基于您对可扩展和灵活模型的需求的RDBMS。
我强烈建议使用标准的C++ OO与STL编程。
所有这些都是非常基本的,但我认为,如果您改进当前的解决方案,而不是寻找基于DB的解决方案,您的努力将得到最好的利用。
发布于 2012-08-27 11:04:56
您可能希望了解语义Web技术,如RDF、RDFS和OWL,这些技术提供了一种可供选择的、可扩展的建模方法。有一些开源的三层存储,而一些主流的RDBMS也有三层存储功能。
特别是看看曼彻斯特大学的抗议者/OWL教程:http://owl.cs.manchester.ac.uk/tutorials/protegeowltutorial/
如果您认为这个方向值得进一步研究,我可以推荐工作本体论者的语义网。
发布于 2012-08-24 16:26:59
根据图表,我建议RDBMS解决方案确实可以工作。自从我开发RDMS (当然称为RDM!)以来已经有很多年了,但是我能够更新我的知识,并获得了很多关于数据结构和布局的宝贵见解,这与您通过阅读Stephane Faroult的“SQL的艺术”( the Art of SQL)所描述的非常相似。他的书对回答你的问题有很大帮助。
为了确保准确性,我在亚马逊上添加了一个链接:http://www.amazon.com/The-Art-SQL-Stephane-Faroult/dp/0596008945
你阅读它不会出错,即使最终它不能完全解决你的问题,因为作者做了如此出色的工作,以明确的措辞打破关系,并提出了优雅的解决方案。这本书不是SQL的手册,而是对如何思考数据和数据之间的相互关系的深入分析。看看这个!
使用RDBMS来跟踪数据之间的链接可以有效地存储和思考您正在寻找的分析,并且链接是“软的”--也就是说,当它们链接的硬对象被删除时,它们就会消失。这确保了数据的完整性;Mssr Fauroult可以回答该做什么来确保这是正确的。
https://stackoverflow.com/questions/12037317
复制相似问题