2013-04-24 64 views
0

我使用各种模式编写和使用XML编写的技术文档。我开发了一个相当简单的Windows Forms应用程序,我们现在在办公室用作工作流系统。该程序可以签入,签出并移动验证过程。该程序使用通用的'data.xml'文件来读取和写入,从中记录笔记,作者,状态和其他各种事物。我应该使用关系数据库来存储我的XML文档

但是,此时应用程序指向共享驱动器上的文件夹结构,其中包含每个项目中的所有xml文件以及包含程序项目数据的data.xml文件。所以当有人检出一个文件时,应用程序只是简单地将文件从一个文件夹移动到另一个文件夹(用户不可见),更新data.xml文件,他们更新UI中的listViews。

这工作正常,除非当然有几个人正在同一个项目,并且客户端应用程序尝试同时写入data.xml文件。

所以我想我想要做的是将整个系统迁移到数据库。因此,不是将XML文件存储在文件夹中,而是将它们存储在SQL等数据库中。现在我完全没有数据库的经验,所以希望有一个指针能把我朝正确的方向发展。理想情况下,我需要能够查询数据库中的xml文档,所以我希望能够使用Xquery,并理想地在所有文件上运行进程。例如,目前我可以在整个项目的客户端上运行XSLT,他们只是坐在一个文件夹中。

所以我的问题是,我应该看什么类型的数据库以保留这种功能?像SQL这样的关系,或者一个xml数据库?

注意:xml文件最多为每个数百Kbs。

回答

0

而不是将xml文档存储在数据库中,我会说为项目和客户特定的数据使用数据库。如果大多数xml文件不会推迟太多,则可以使用xml模板并返回到使用XSLT的目的,以便在呈现之前使用有用的数据更新这些模板。我的xml模板在哪里?它可以在您的文件系统或数据库中。这样可以避免存储大量的xml文档,并避免在数据库中重复使用xml代码。

+0

感谢您的评论。 xml或至少xml标签中的内容在文档和文档之间是非常不同的。我最终希望以任何方式将它全部存入数据库,所以我想知道建议哪种方式。谢谢。 – Daedalus 2013-04-24 11:40:13

-1

“...为了保留这种功能,我应该查看哪种类型的数据库?”

确实只有一种数据库类型 - RDBMs。所有类型的关系数据库都支持XML,文本或二进制存储以用于诸如文件和文档之类的东西。

对我来说,更大的问题是,在普通编程和SQL数据库中,您是否能够在多用户环境中支持文档存储。简短的回答是,我不这么认为,至少在没有大量工作的情况下。

问题是这样的:假设你和我在同一间办公室工作。我转到文档DB并下载文档XYZ.xml的副本并开始进行更改。同时,您还可以获得该文档的副本并开始进行更改。当我完成后,我会检查我的更改(sql中的正常更新函数)。然后当你检查你的更改时,你的更改将覆盖我的。大问题。但是,如果您可以将文档检出过程限制为“独占”使用(即,一次只能有一个人可以签出并签入文档),那么SQL上的XML文档存储就可能不需要大量的时间工作的。这可以简单地在文档存储表中设置一个标志,就像DocInUse = True一样。如果DocInUse = True,那么文档在重新检入并且DocINUse字段= False之前不能再次下载。我相信你会跟随。

顺便说一下,有这样的应用程序可以为您做到这一点。有来自微软的Team Foundation Server和Source Safe,以及允许进行这种存储和检出/登记处理的其他程序......但这些程序并不便宜。

我希望这会有所帮助。

+0

我清楚地没有解释我自己。我不打算让几个人在同一个xml文档上工作,只是data.xml文件,它实际上是应用程序本身的配置文件,它存储关于谁拥有文档的数据,关于它的注释和各种其他数据位关于xml文件本身。这是目前唯一需要同时共享的文件,这是因为我在数据库之外工作。 – Daedalus 2013-04-24 13:51:05

+0

我意识到有其他的应用程序可以做类似的事情,但是它们也有很多我们不需要的功能,并且没有太多的功能需要我们去做。为了清晰起见,我简要介绍了应用程序,而不想深入讨论它。 该程序工作正常,正是我们所需要的,我只想将它全部包含在数据库中。就这些。 – Daedalus 2013-04-24 13:51:43

0

而不是所有的猴子的业务,你能找到一个源代码管理系统,只允许一个人一次签出一个文件。或者只是使用某种文件锁定机制来限制一次只能访问一个人。

相关问题