我主要实现了关系型DBMS,但我不认为它适合以下......我设置了多达10 ^ 4个相对复杂的“对象”,这些对象由“部件”编号组成到10 ^ 2。零件组装成“组件”。对象对它们执行操作以在部件和组件之间建立模式,并与数据库中其他对象中存在的模式进行比较。
使用RDBMS,我可以简单地将“部分”聚合到表B中,这些部分几乎没有上下文使用(例如,与发票上的项目编号不同),并将它们链接到表'A'中的父项'对象'表C中的'或''程序集'。但是,我必须在整个表上运行一个SQL SELECT来“整理”对象,这些对象实际上只是表'B'中的一个串行子集。
或者,这些都可以在一个包含ParentID字段的表中;没有表示'对象',而不是'汇编'或'部分'。
我认为可以为每个对象设置VIEWS,以便对表进行“索引”。我不知道使用10,000次观看是否可行或最佳做法!
我是否应该学习另一种模式,以更有利的方式组织数据?数据将是一组由其他“组件”或原子“部件”的“组件”组成的层次对象。
有人能指出我正确的方向吗?
答案 0 :(得分: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上撰写了一篇非常详尽的文章,它是如何运作的,以及与关系模型的差异。