0

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

也就是说,我们在 web 表单上有数据字段(本质上是我的对象图中的节点),当一个 fieldK 被更新时,其他字段(FieldB、FieldT 等)会受到影响(取决于那个 fieldK)和由于更新 fieldK,还需要在返回中更新。这只是一个例子,fieldK。

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

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

我被要求a)将它存储在数据库中......在这种情况下是SQL Server 2008和b)创建一个NHibernate对象来表示图形,以便我们可以使用它并双向搜索和遍历节点(上下 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 Network Graph 对象的整个其他问题......然后我必须确定检索这些东西的最佳方法(创建节点的linkedLists,谁知道在 C# 中基于我拉从这些表中......还不知道我将如何做到这一点并形成一个我们可以搜索的对象)

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

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

4

1 回答 1

2

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

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

从 msdn 页面引用如何使用这种数据类型:

  • 组织结构

  • 一个文件系统

  • 项目中的一组任务

  • 语言术语的分类

  • 网页之间的链接图

此外,此链接可能有用: How to Model Your Data Hierarchies With SQL Server 2008 http://msdn.microsoft.com/en-us/magazine/cc794278.aspx

于 2013-03-25T10:00:08.353 回答