Database 哪种数据库模型?

Database 哪种数据库模型?,database,Database,我主要实现了关系型DBMS,但我认为它不适合以下情况……我设置了多达10^4个相对复杂的“对象”,它们由编号高达10^2的“部分”组成。零件组装成“组件”。对象对其执行操作以在零件和部件之间建立模式,并与数据库中其他对象中存在的模式进行比较 使用RDBMS,我可以简单地将“零件”聚合到表B中,表B几乎没有上下文以外的用途(例如,与发票上的项目编号不同),并将它们链接到表“A”中的父“对象”或表C中的“程序集”。然而,我必须在整个表上运行SQL SELECT来“整理”对象,它们实际上只是表“B”中

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

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

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

但是,我认为可以为每个对象设置视图,以“索引”表。我不知道使用10000个视图是否可行或最佳实践

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


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

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

  • 1-一个对象中有多个零件
  • 1-多个零件在一个总成中
听起来好像你最初是这样想的:

Assembly ID int Object ID int Part ID int ObjectPart ObjectID PartID AssemblyPart AssemblyID PartID 我建议保留不同且独立的实体,并避免使用ParentID字段,该字段将指定每行的实体类型。我同意你的观点,每个实体的视图不是一个好的/可维护的方式。您希望在AssemblyID或AssemblyName上使用WHERE子句从视图中进行选择


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

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

为了补充Stephen的答案,我为Raima工作,我们的一位工程师写了一篇非常透彻的文章,介绍了它的工作原理以及与关系模型的区别。

您将使用这些数据做什么?它读得重还是写得重?10^4或10000不是一个大的数据集,所以您试图避免或解决什么问题?对不起,我指的是100000个对象和每个对象100个部分。程序集的嵌套使模式复杂化。读取基于输入条件的复杂模式匹配。模式的格式是什么?实际上,我想的更多是:Object ID Int Assembly1。模式的格式是什么?2.实际上,我考虑的更多是:对象{ID int}Assembly{ID int,ParentObject int}Part{ID int,ParentAssembly int}3。我真的没有预料到问题;我只是想使用合适的工具来完成这项工作,我从未尝试过OODBMS或Heirarchal DBMS,如果有人实际使用后者的话(印象中他们来自COBOL时代)。4.也许这个项目类似于福特存储汽车数据的方式。类似于使用MonetDB/XQuery实现的XML数据库(尽管我不知道是什么模型)?P.Campbell的基本模式是几十年来的工作方式,很容易通过几个索引进行优化,非常适合关系数据库。XML将慢得多。
 SELECT P.* 
 FROM Parts AS P 
 INNER JOIN AssemblyPart AS AP ON AP.PartID = P.ID
 WHERE AP.AssemblyID = @SomeAssemblyID