Sql server 如何在SQL Server 2016中设计版本表

Sql server 如何在SQL Server 2016中设计版本表,sql-server,database,Sql Server,Database,首先,我会说我对数据库设计是新手 我一直在努力重写一些遗留代码,这些代码控制我们的一个软件的导入过程。这个新过程的一部分包括修改传入的XML文件(通过FTP进入我们的系统),以删除某些元素以及特殊情况下的交换值 作为新系统的一部分,我们正在数据库中实现一种版本控制方法,这样我们就可以直接从中提取最新版本的xml,而不是反复修改文件。为了证明这是可以做到的,我在SQL Server 2016中创建了一个非常简单的表来存储XML,然后编写了一个简单的PowerShell脚本来从数据库中提取XML文件

首先,我会说我对数据库设计是新手

我一直在努力重写一些遗留代码,这些代码控制我们的一个软件的导入过程。这个新过程的一部分包括修改传入的XML文件(通过FTP进入我们的系统),以删除某些元素以及特殊情况下的交换值

作为新系统的一部分,我们正在数据库中实现一种版本控制方法,这样我们就可以直接从中提取最新版本的xml,而不是反复修改文件。为了证明这是可以做到的,我在SQL Server 2016中创建了一个非常简单的表来存储XML,然后编写了一个简单的PowerShell脚本来从数据库中提取XML文件并将其存储在对象中。现在我知道这确实是可能的,我需要改进我如何设计表

这就是我的专业知识开始受到冲击的地方。截至目前,该表包含三列:
xml\u Version
xml\u FileID
,以及
xml\u FileContents

一般的想法是有一个绑定到每个xml版本的GUID(
xml\u FileID
),另一列指示xml的版本。我还假设您也需要某种方式将XML的每个版本绑定到它的原始文件

我希望有人能为我指明正确的方向,告诉我应该如何着手设计桌子来完成这项任务。如果需要,我可以提供更多信息

谢谢


编辑:我想我最难掌握的是当我试图从数据库中获取数据时应该引用的内容。用唯一标识符将XML存储在表中是很容易的,但不幸的是,XML本身没有任何东西可以唯一地识别数据库中的相关数据。这有意义吗?

只是好奇——您在每个版本中存储的XML文件有多大?它多久更改一次?您可能需要考虑这些因素,以确定是要将整个XML保存在数据库中,还是只保存到文件的链接,甚至只是版本之间的增量。。。另外,尽管你没有问,你有没有看过像git这样的版本控制产品?这有助于为您的案例指出最佳解决方案……XML文件可能相当大(它们来自第三方供应商,因此包含许多我们不使用的信息)——它们可以从500行到50000行。即使我们正在删除大量的数据,如果需要的话,我们仍然希望能够返回并引用原始XML。此外,我们确实使用git,但在这种情况下,这并不能真正起作用。其思想是导入脚本将直接从数据库中提取XML的最新版本,而不是像当前一样依赖于文件路径。在表中有一列,该列对于给定文档的每个版本都是相同的。表上的另一列指示状态(基本上是“当前版本”、“存档版本”,可能还有“根版本”)。这样,只需使用文档标识符和“当前”状态,就可以轻松获取文档的最新版本。带有版本号的第三列对于提取存档版本很有用。我不会将这些信息隐藏在XML blob本身中。为提高效率,将此信息设置为自己的栏。