在SQL Server中存储依赖图,并在NHibernate/ c#中创建相应的图对象

本文关键字:创建 对象 NHibernate Server SQL 存储 依赖图 并在 | 更新日期: 2023-09-27 18:05:25

我基本上有4天的时间来得到一些基本的工作,这意味着得到一个在NHibernate中创建的图形网络对象。没有什么完美的,只是一些可以通过一个hibernate的图形对象(模型)来搜索的东西。

也就是说,我们在web表单上有数据字段(本质上是我的对象图中的节点),例如,当一个字段k更新时,其他字段(FieldB, FieldT等)受到影响(取决于该字段k),并且也需要在更新字段k的结果中更新。这只是一个例子,fieldK。

我们更新的这个字段k也可以在其他字段的"树"中(我认为在这种情况下是图形)。因此,如果我们更新FieldA,我们需要进行搜索,看看FieldA在哪些其他图中并找到它,然后遍历它的子节点并更新这些子节点字段。

所以你本质上有一个图的网络类型的结构。

我被要求a)存储在DB ..在这种情况下是SQL Server 2008和b)创建一个NHibernate对象(s)来表示图形,这样我们就可以使用它,搜索和遍历节点双向(上下x树),找到FieldA,并做我们需要的,例如更新它的依赖字段。

所以我的第一个想法是:

1)创建一个保存树结构的表,例如:

表:DataFieldTrees

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          
...

所以这将把第一棵树链接到第二棵树(因为第一棵树中的节点800连接到节点15)。

我知道我把这些树称为我认为的"图"集,但我对所有这些都是新手,当我开始思考如何做到这一点时,我试图阐明需求和我的想法。

然后是在c#中创建并解析它为NHibernate网络图形对象的整个其他问题…然后我必须确定检索这些东西的最佳方法(创建节点的linkedLists,谁知道在c#中基于我从这些表中拉出来的东西…我还不知道该怎么做,如何创建一个可以搜索的对象)

我要么是错的,要么是对如何去做有一些体面的想法,但不确定我是否接近正确的思考,就人们如何处理这个问题而言…

这里需要一些帮助和/或指导或保证我的想法是有意义的。

在SQL Server中存储依赖图,并在NHibernate/ c#中创建相应的图对象

Sql server 2008有一个名为"hierarchy-id"的数据类型。这基本上允许您表示字段并为分层对象执行查询

数据类型http://msdn.microsoft.com/en-in/library/bb677173 (v = sql.105) . aspx

从msdn页面中引用如何使用此数据类型:

  • 组织结构

  • 文件系统
  • 项目中的一组任务

  • 语言术语分类

  • 网页间的链接图

同样,这个链接可能有用:如何用SQL Server 2008建立数据层次结构模型http://msdn.microsoft.com/en-us/magazine/cc794278.aspx