2011-01-20 139 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上寫了一篇非常詳盡的文章,它如何工作以及與關係模型的區別。