繁体   English   中英

SQL Server中具有历史记录的树形结构

[英]Tree Structure With History in SQL Server

我不确定这是否是一个重复的问题,但是在这个问题上我什么都找不到。

在表中存储树结构并能够存储该结构的更改历史记录的最佳方法是什么。

感谢您的任何帮助。

更新:

我有雇员表,我需要在表中存储分支机构,部门,部门,子部门的结构。 我需要在员工分支机构,部门上存储历史信息,以便即使结构已更改,也能够检索员工分支机构,部门,部门,子部门。

更新2:

有一种解决方案可将结构的每次更改都保存在历史表中,但这是最好的方法吗?

更新3:

还有订单表。 我必须在每个订单上存储员工的职位,分支机构,部门,部门,子部门及其他。 这是存储历史记录的主要原因。 它会经常使用。 换句话说,我应该能够显示过去一天的数据库数据。

更新4:

也许使用architectureid是一种选择?

如果节点被重命名怎么办? 如果我在旧订单上需要使用旧名称,该怎么办?

我认为您正在寻找类似的东西。 它提供了完整的树结构。 这用于目录,但可以用于任何事物:部门,部门,部门等。

历史记录是独立的,最好是在考虑历史记录之前先了解一下Node结构。 对于任何表的历史记录,所需要做的就是在PK中添加DateTime或TimeStamp列。 历史记录在当前行的图像之前存储。

使用纯SQL执行诸如(a)解析树的路径和(b)查找某个时间点上当前的相关历史记录行之类的功能。 使用MS,您可以将递归CTE用于(a),或在存储的proc中编写更简单的形式。

对于(b),我将实现表的派生版本(节点,部门等),以返回相关时间点的当前行; 然后将其用于(a)的历史版本。

不必在每次更改时都复制并保存整个树结构。

如果您需要任何澄清,请随时提出问题。

资料模型

▶具有历史数据模型的树结构

不熟悉关系建模标准的读者可能会发现▶IDEF1X Notation有用。

根据将使用历史信息的方式,将确定您需要临时解决方案还是仅需要审核解决方案。 在临时解决方案中,您将存储一个日期范围,一个给定节点在其给定位置上应用,并且“当前”层次结构是通过使用当前日期和时间来查询活动节点以便报告该层次结构而得出的。 说这是一个复杂的解决方案是轻描淡写。

鉴于我们正在谈论员工等级制度,我敢打赌,审计解决方案就足够了。 在审核解决方案中,您具有一个用于当前层次结构的表,并将更改存储在其他可访问的位置。 应该注意的是,“其他地方”并不一定是数据。 如果很少更改公司层次结构,那么您甚至可以使用技术含量较低的解决方案来创建公司层次结构的报告(或一系列报告)并将其存储为PDF格式。 当某人想了解去年五月的层次结构时,他们可以找到相应的PDF打印输出。

但是,如果希望审核跟踪是可查询的,则可以考虑使用类似SQL Server 2008的更改跟踪功能或第三方解决方案之类的方法。

请记住,“最佳”问题比结构本身还重要。 对于需要多少工作量及其提供的功能进行了成本效益分析。 如果利益相关者需要随时查询层次结构,并且该层次结构频繁波动(不想在那里工作:)),那么临时解决方案可能是最好的,但实施起来的成本更高。 如果层次结构很少更改,并且没有必要进行精细审核,那么我倾向于仅定期存储层次结构的PDF。 如果确实需要查询更改或需要进行详细审核,那么我将看一下审核工具。

变更追踪

快速搜索,这里有几个第三方审计解决方案:

ApexSQL

发光技术

有几种方法,但是由于您的信息有限,我想说要使用具有父关系的单个表,因为历史记录,您可以简单地对表进行审计

更新:根据您的新信息,我将不使用单个表数据存储,看起来您的层次结构比简单的树要复杂得多,而且看起来您具有一些结构明确的节点,尤其是在顶部进入各节和小节; 因此,多表关系可能更适合;

就审计表而言,有足够的资源来找出最适合您的审计方法,每行和每列的审计等等。

要注意的一件事是您不必对树结构进行历史化。 它总是只会增长,永远不会变小。

棘手的是节点的使用。 他们的数据可能会改变。

对于eaxample网站。

/ A / B / C

将永远存在。 A可能是文件夹,b也可能是ca文件。 稍后,a可能会像c那样成为一个笨拙的ba墓碑(目前此处没有数据)。 但是树本身永远不会改变。

然后,添加版本号,并为每个节点添加历史记录/使用列表(节点类型)以及开始版本(可能为null)。

然后,用于显示版本X的代码现在可以轻松构建“真实”树。

为了支持节点的移动,请具有“重新钩挂”类型,以指示该节点已被移动到该版本的另一个项目。

瞧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM