2011-01-20 76 views
0

我主要实现了关系数据库管理系统,但我认为它不适用于以下内容......我已经设置了多达10^4个相对复杂的“对象”,这些对象由“零件”编号组成10^2。零件被组装成'组件'。对象具有对它们执行的操作以在部件和组件之间建立模式,并与数据库中其他对象中存在的模式进行比较。哪个数据库模型?

使用RDBMS,我可以简单地将'部分'聚合到表B中,这些表中的上下文使用非常少(不同于发票上的项目编号),并将它们链接到表'中的父'对象' A'或'C'程序集。但是,我必须在整个表上运行一个SQL SELECT来“整理”对象,这些对象实际上只是表B中的一个串行子集。

或者,这些都可以在一个表中带有ParentID字段;缺少它表示“对象”,而不是“组件”或“部分”。

我在想每个对象的VIEWS都可以设置为'索引'表,但是。我不知道使用10,000个视图是否可行或最佳做法!

有没有另一种模式,我应该学习可以以更有利的方式组织数据?数据将是一组由其他'程序集'或'原子'部分'的'程序集组成的heirarchal对象。

有人能指出我正确的方向吗?

+0

你打算如何使用这些数据?它是重读还是写重? 10^4或10,000不是一个大数据集,那么你想要避免或解决什么? – 2011-01-20 16:24:40

+0

对不起,我的意思是100,000个物体和100个零件。它是对模式进行旋转的程序集嵌套。根据输入条件阅读复杂的模式匹配。 – Stephen 2011-01-20 16:28:55

回答

1

如果我在读你的正确对象模型的描述,听起来好像:

  • 1,许多地方都对象
  • 1-多部件在装配

听起来好像你原本想这样的:

 
Assembly 
    ID int 

Object 
    ID int 

Part 
    ID int 

ObjectPart 
    ObjectID 
    PartID 

AssemblyPart 
    AssemblyID 
    PartID 

你会则是能找到一个给定装配零件:我建议保持不同的和独立的实体

SELECT P.* 
FROM Parts AS P 
INNER JOIN AssemblyPart AS AP ON AP.PartID = P.ID 
WHERE AP.AssemblyID = @SomeAssemblyID 

,并避免PARENTID字段将决定实体的类型每行。我同意你的看法,即每个实体的视图都不是一个好的/可维护的方法。您希望从AssemblyID或AssemblyName的WHERE子句的View中进行选择。

也许发布一个快速的关系模式,你认为会给你的问题,并描述你的预期问题?

0

带RAIMA或Heirarchal和IBM IMS的网络模型是唯一可用的选项(专有)。所以它既可以像Zope一样使用XML,也可以使用在线方法来使用RDBMS来实现网络模型。

0

为了增加Stephen的回答,我为Raima工作,我们的一位工程师在Network Database Model上写了一篇非常详尽的文章,它如何工作以及与关系模型的区别。