2009-06-08 149 views
10

我想知道是否有最佳实践来决定何时应该使用XML建模系统,何时应该使用关系数据库建模(我知道您可以将XML存储在数据库中,但是使用规范化数据库表建模系统和使用XML-Schema建模系统之间存在巨大差异)。为了具体起见,假设您在健身房进行了模拟练习。 “卧推”实际上是一系列练习,而不是单一练习。你可以躺在长椅上,或一个球。你可以强迫你平躺或允许作弊。您可以使用哑铃,杠铃,电缆或通用机器。如果您正在使用哑铃,您可以同时交替手臂或推动。你可以有一个倾斜的,下降的或平坦的表面。我的想法是,由于复杂性(以及我还没有想到的可能的复杂性),最好使用xml来建模。这是一个很好的评估吗?还有什么其他重要因素需要考虑?建模:Xml与关系数据库

附录:当我说XML的技术,我在我的脑海里RDF的是在后面的一个(虽然我不希望仅限于讨论这一点),这似乎各有利弊相比,实施数据库表中的设计。我不确定一些用户对XML的一般反感会不会延伸到RDF(也许是这样),但也许这有助于将对话集中在一点点。

+4

问问你自己为什么要考虑XML。那是什么给你买的? – Apocalisp 2009-06-08 21:37:52

回答

4

您的练习示例可以通过多种方式进行建模。对于一些经验和智慧,就当XML的层次模型显示出优势的问题,请阅读罗恩Burrett:

http://www.rpbourret.com/xml/XMLAndDatabases.htm

有地方原生XML DB的显示RDBS的巨大优势情况下,当要存储的内容是半-结构化的。 @Smout,将客户合同 - 客户数据存储在RDB中更容易,更安全 - 但是当您还必须存储合同时会发生什么?

RDF与关系模型和xml模型形成对比。 RDF专为“开放式世界”数据表示而设计,在这种表示中,您无法确定在计算时您什么都知道。 RDF可以用xml表达的事实很方便,但偶然。它还有其他表达方式。

请仔细阅读EMC XML Technologies和MarkLogic。

2

通常,XML只是一种临时文件格式,用于将数据从一个系统发送到另一个系统。或者存储一小部分数据,比如配置选项和更多的数据。如果您的数据需求很小,而且您正在处理单用户情况,那么XML就会很好。

如果您必须处理多用户环境,您仍然可以使用XML,但您需要围绕它创建一个复杂的业务层,记录所有用户的修改情况,并基本上添加大量多用户功能一个正常的RDBMS作为标准提供。 如果您有大量数据,那么存在您的XML文件变得太大的风险。 XML标准有点臃肿,如果你必须使用每个500 MB的XML文件,我希望你有很多很多的耐心。

当然,还有其他的选择。我创建了一个简单的网络抓取工具,可以下载网页,提取其中的所有网址,然后针对每个网址重复此操作。它使用了大约20个线程,这些线程全部下载页面,URL的数量将增长到数百万。我想避免两次下载单个URL,因此我必须过滤掉重复项。考虑到数据量,使用XML将是一场噩梦。因为我需要的只是一个带有单个字段的单个表:URL,所以使用数据库是过度的。于是我写了一个特殊的哈希算法,并创建了我自己的基于文件的哈希表解决方案。这真是太快太,检查几千URL的每秒的,如果没有下载使用一些模型的网页...

有了这样的锻炼情况,我将通过创建一个简单的XML模式启动XML的工具。 (Altova的XMLSpy擅长这一点。)当我认为我的数据很适合这个XSD时,我开始创建一个数据库,每个元素都将被转换为一个表格。因此,我将拥有一个良好的关系数据库,并为XML格式定义一些可用于从数据库导入/导出相同数据的XML格式。

+0

基本上,我说的是用XML开始建模。当你满意时,将其转换为数据库。 – 2009-06-08 21:31:31

1

如何“以上都不是”?

我会用概念建模工具,如NORMA第一个模型域。这将允许你专注于模型,直到完成。那时,NORMA可以为几个流行的数据库以及XML模式生成DDL。

12

在1960年代,数据管理系统被发明/怀孕/阐述其都是基于这样的思想:数据可以分层组织。 IMS就是其中之一。这些系统的谬误/缺陷/缺点立即变得清晰,任何人都可以深入使用它们(例如,它们倾向于导致“查询偏差”:在分层系统中,查询给定客户的哪些合同存在通常很容易,并且同时几乎不可能查询哪些客户参与给定的合同)。

所有这些缺陷最终导致了关系模型的发明。

因此,如果您想知道XML是否适合作为任何数据管理问题的解决方案,那么请问自己:“XML本质上是否等同于?”。

XML在市场上的成功仅仅证明了“那些不了解历史的人注定要重复它”这一观察的正确性。

+0

+1感谢您的良好历史观点 – KLE 2009-09-01 14:10:10

2

你的锻炼例子是一个很好的例子,但我认为你得出了错误的结论。

我的想法是,由于 复杂性(以及可能的复杂性 ,我还没有想到的),这将 最好使用XML来模拟。

我认为这个结论是基于错误的假设,即XML提供了比关系模型更高的建模灵活性。事实上(正如Erwin Smout巧妙地描述的那样),关系模型本质上比XML更灵活,因为XML是严格分层的,而关系模型允许任意复杂度的多对多关系。

如果您不需要严格的模式并希望能够存储任何内容,则XML在运行时可能会更灵活。但是,我们并没有真正谈论建模。