哪个数据库模型?

时间:2011-01-20 16:16:02

标签: database

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

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

或者,这些都可以在一个包含ParentID字段的表中;没有表示'对象',而不是'汇编'或'部分'。

我认为可以为每个对象设置VIEWS,以便对表进行“索引”。我不知道使用10,000次观看是否可行或最佳做法!

我是否应该学习另一种模式,以更有利的方式组织数据?数据将是一组由其他“组件”或原子“部件”的“组件”组成的层次对象。

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

3 个答案:

答案 0 :(得分: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中进行SELECT。

也许发布一个您认为会给您带来问题的快速关系模式,以及您对预期问题的描述?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为了补充Stephen的答案,我为Raima工作,我们的一位工程师在Network Database Model上撰写了一篇非常详尽的文章,它是如何运作的,以及与关系模型的差异。