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