首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分层数据模型的一种替代

分层数据模型的一种替代
EN

Stack Overflow用户
提问于 2012-08-20 12:04:42
回答 4查看 1.2K关注 0票数 10

问题域

我正在开发一个相当大的应用程序,它使用分层数据模型。它获取图像,提取图像的特征,并在此基础上创建分析对象。因此,基本模型类似于对象-(1:n)-Image(1:1)-Image。但是同一组图像可以用于创建多个分析对象(具有不同的选项)。

然后一个对象和图像可以有很多其他连接的对象,比如分析对象可以用附加的数据进行细化,或者复杂的结论(解决方案)可以基于分析对象和其他数据。

电流溶液

这是解决方案的草图。堆栈表示一组对象,箭头表示指针(即图像特征链接到它们的图像,反之亦然)。某些部分:图像、图像特征、附加数据可能包含在多个分析对象中(因为用户希望对不同的对象集进行分析,组合方式不同)。

图像、特征、附加数据和分析对象存储在全局存储(上帝-对象)中.解决方案通过组合存储在分析对象中(并依次包含解决方案特性)。

所有实体(图像、图像特征、分析对象、解决方案、附加数据)都是相应类的实例(如IImage、.)。几乎所有的部分都是可选的(也就是说,在我们有了解决方案之后,我们可能想要丢弃图像)。

当前解决方案的缺点

  1. 导航这个结构是痛苦的,当你需要连接像草图中的虚线一样。如果您必须显示一个图像,上面有几个解决方案功能,那么首先必须遍历分析对象,以找到其中哪些是基于该图像的,然后遍历这些解决方案来显示它们。
  2. 如果要解决1.您选择显式存储虚线链接(即图像类将有指向与其相关的解决方案特性的指针),您将非常努力地维护这些指针的一致性,并在发生变化时不断更新链接。

我的想法

我想要构建一个更可扩展的(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++对象以获得解决方案的特性。

问题

所以我的主要问题是

  • 对于我描述的问题,使用RDBMS是一个合适的解决方案,还是不值得,并且有更好的方法在我的应用程序中组织信息?

如果关系数据库管理系统没有问题,我希望得到任何关于使用关系数据库管理系统和关系方法来存储C++对象关系的建议。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-29 05:32:46

我不推荐基于您对可扩展和灵活模型的需求的RDBMS。

  1. 无论何时更改数据模型,都必须更改DB模式,这可能涉及比更改代码更多的工作。
  2. 只有在运行时才会发现DB查询的任何问题。这会对维护费用产生很大的影响。

我强烈建议使用标准的C++ OO与STL编程。

  1. 通过更新相关对象和索引,您可以使用封装来确保任何数据更改都是正确的。
  2. 可以使用STL在数据上构建高效的索引。
  3. 您可以创建外观来轻松获取信息,而不需要转到多个对象/集合。这将是一次工作
  4. 您可以制作单元测试用例以确保正确性(与数据库的单元测试相比,要简单得多)。
  5. 您可以利用多态性来构建不同类型的对象、不同类型的分析等等。

所有这些都是非常基本的,但我认为,如果您改进当前的解决方案,而不是寻找基于DB的解决方案,您的努力将得到最好的利用。

票数 1
EN

Stack Overflow用户

发布于 2012-08-27 11:04:56

您可能希望了解语义Web技术,如RDF、RDFS和OWL,这些技术提供了一种可供选择的、可扩展的建模方法。有一些开源的三层存储,而一些主流的RDBMS也有三层存储功能。

特别是看看曼彻斯特大学的抗议者/OWL教程:http://owl.cs.manchester.ac.uk/tutorials/protegeowltutorial/

如果您认为这个方向值得进一步研究,我可以推荐工作本体论者的语义网

票数 4
EN

Stack Overflow用户

发布于 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可以回答该做什么来确保这是正确的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12037317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档