0

NHibernate で作成されたグラフ ネットワーク オブジェクトを取得するという意味で、基本的なレベルで何かを取得するには、基本的に 4 日間かかります。完璧なものはなく、HNibernate グラフ オブジェクト (モデル) を介して検索できるものです。

つまり、たとえばある fieldK が更新されると、他のフィールド (FieldB、FieldT など) が影響を受ける (その fieldK に依存する) Web フォームにデータ フィールド (基本的にオブジェクト グラフのノードになる) があり、 fieldK を更新した結果として返される値も更新する必要があります。これは、fieldK という 1 つの例にすぎません。

更新したこの fieldK は、フィールドの他の「ツリー」にもある可能性があります (この場合はグラフだと思います)。したがって、FieldA を更新する場合、検索を実行して FieldA が含まれている他のグラフを確認し、それを見つけてから、そのサブノードをトラバースしてそれらのサブノード フィールドを更新する必要があります。

したがって、基本的にネットワーク オブ グラフ タイプの構造があります。

私は、a) DB に保存するように求められました..この場合は SQL Server 2008 であり、b) グラフを表す NHibernate オブジェクトを作成して、グラフを操作し、ノードを双方向に検索およびトラバースできるようにします ( x ツリーを上下に移動)、FieldA を見つけて、たとえば依存フィールドの更新に関して必要なことを行います。

だから私の最初の考えは次のとおりです。

1) ツリー構造を保持するテーブルを作成します。次に例を示します。

表: DataFieldTree

DataFieldTreeID     DataFieldID      ParentDataFieldID    Level
---------------     -----------      -----------------    -----
       0                 12                 NULL            0    (Tree1) 
       1                 232                 12             1
       2                 32                  12             1
       3                 100                 12             1
       4                 210                 100            3
       5                 500                 100            3
       6                 600                 32             4
       7                 800                 600            5
       8                 44                 NULL            0     (Tree2)
       9                 400                 44             1
       10                55                  44             1
       11                111                 55             2
       12                211                 55             2
       13                600                 111            3
       14                43                  600            4
       15                15                  600            5

   ....more trees and so on

たとえば、両方のツリーに 600 と 100 のノードがあることに注意してください。

複数のツリーで見つかったノードを RootTreeID に結び付ける方法が必要なので、次のブリッジ テーブルを作成しました。

表: DataFieldRootDataField

RootFieldID は、ツリーのルート (NULL の行) である最初のテーブルのフィールドです。

DataFieldID   RootDataFieldID
-----------   --------------- 
    100             0
    100             8
    600             0
    600             8

これにより、ルックアップ目的で特定のノードがどのツリーにあるかをすばやく把握できると考えました

最後に、グラフを修正してグラフにするために、グラフ (ツリー) をリンクする (関連付ける) テーブルを作成しました。

表: DataFieldTreeRelation

RootDataFieldID    DataFieldTreeID    RelatedDataFieldTreeID
---------------    ---------------    ----------------------
      8                   800                 15          
...

これにより、最初のツリーが 2 番目のツリーにリンクされます (最初のツリーのノード 800 がノード 15 に接続されているため)。

これらのツリーが「グラフ」のセットだと思うときにこれらのツリーと呼んでいることは知っていますが、私はこれらすべてに慣れておらず、これを行う方法を考え始めるときに要件と私の考えを明確にしようとしています。

次に、これを作成して C# の NHibernate Network Graph オブジェクトに解析するという別の問題があります...そして、このものを取得するための最良の方法を決定する必要があります (私がプルしたものに基づいて C# で知っているノードの linkedLists を作成します)。これらのテーブルから...どのようにこれを行い、検索できるオブジェクトを形成するかはまだわかりません)

私はかなり外れているか、おそらくそれをどうやって進めるかについていくつかのまともな考えを持っていますが、人々がこれにどのように対処しているかという点で、私が正しい考えに近づいているかどうかさえわかりません...

ここで助けが必要であり、および/または私の考えが理にかなっているというガイダンスまたは安心が必要です。

4

1 に答える 1

2

Sql サーバー 2008 には、「hierarchy-id」と呼ばれるデータ型があります。これにより、基本的にフィールドを表し、階層オブジェクトのクエリを実行できます

データ型: http://msdn.microsoft.com/en-in/library/bb677173(v=sql.105).aspx

このデータ型の使用方法に関する msdn ページからの引用:

  • 組織構造

  • ファイルシステム

  • プロジェクト内の一連のタスク

  • 言語用語の分類

  • Web ページ間のリンクのグラフ

また、次のリンクも役立つ場合があり ます。 SQL Server 2008 を使用してデータ階層をモデル化する方法 http://msdn.microsoft.com/en-us/magazine/cc794278.aspx

于 2013-03-25T10:00:08.353 に答える