我想知道是否有最佳实践可以决定何时应该使用XML建模系统以及何时应该使用关系数据库进行建模(我知道您可以将XML存储在数据库中,但是它们之间存在巨大差异使用规范化的db表对系统建模并使用XML-Schema对系统建模。为了具体起见,假设你在健身房锻炼身体。 “卧推”实际上是一系列的练习,而不是单一的练习。你可以躺在长凳上或球上。你可以强迫你退缩或允许作弊。您可以使用哑铃,杠铃,电缆或通用机器。如果您正在使用哑铃,您可以交替使用手臂或同时推动。您可以倾斜,倾斜或平坦的表面。我的想法是,由于复杂性(以及我尚未想到的可能的复杂性),最好使用xml建模。这是一个很好的评估吗?还应考虑其他哪些重要因素?
附录:当我说XML时,我脑子里想到的一种技术是RDF(虽然我不想将讨论局限于此),与实施相比,这似乎有利有弊。数据库表中的设计。我不确定一些用户对XML的普遍反感是否会一直延伸到RDF(可能如此),但这可能会有助于集中谈话。
答案 0 :(得分:12)
在20世纪60年代,数据管理系统被发明/构思/阐述,这些系统都基于数据可以按层次组织的想法。 IMS就是其中之一。这些系统的谬误/缺陷/缺点立即变得清晰,任何人都在密集使用它们(例如,它们往往导致'查询偏见':在分层系统中,通常很容易查询给定客户存在哪些合同,以及同时几乎不可能查询哪个客户参与给定的合同。)
所有这些缺陷最终导致了关系模型的发明。
因此,如果您想知道XML是否适合作为任何数据管理问题的解决方案,请问自己:“XML本质上是否是分层的?”。
XML在市场上的成功只能证明观察的正确性是“那些不了解历史的人注定要重复它”。
答案 1 :(得分:4)
您的锻炼示例可以通过多种方式进行建模。有关xml层次模型何时显示优势的一些经验和智慧,请阅读Ron Burrett:
http://www.rpbourret.com/xml/XMLAndDatabases.htm
有些情况下,当要存储的内容是半结构化时,本机xml DB显示RDB的巨大优势。 @Smout,将客户合同客户数据存储在RDB中更容易,更安全 - 但是当您还必须存储合同时会发生什么?
RDF与关系模型和xml模型形成对比。 RDF专为数据的“开放世界”表示而设计,在这种表示中,您无法确定在计算时是否了解所有内容。 RDF可以用xml表示的事实很方便,但是偶然的。它还有其他表达方式。
也可以阅读EMC XML Technologies和MarkLogic。
答案 2 :(得分:2)
通常,XML只是一种临时文件格式,用于将数据从一个系统发送到另一个系统。或者存储一小组数据,例如配置选项和更多数据。如果您的数据需求很小并且您正在处理单用户情况,那么XML就可以了。
如果您必须处理多用户环境,您仍然可以使用XML,但是您需要围绕它创建一个复杂的业务层,保持所有用户的修改跟踪,并基本上添加许多多用户功能正常的RDBMS标准提供。 如果您有大量数据,则存在XML文件过大的风险。 XML标准有点臃肿,如果你必须使用每个500 MB的XML文件,我希望你有很多耐心。
当然,还有其他选择。我创建了一个简单的网络爬虫,它会下载一个网页,提取其中的所有网址,然后为每个网址重复此操作。它使用了大约20个线程,这些线程都在下载页面,并且URL的数量将增长到数百万。我想避免两次下载单个URL,因此我不得不过滤掉重复的内容。考虑到数据量,使用XML将是一场噩梦。使用数据库是过度的,因为我需要的只是一个包含单个字段的表:URL。所以我写了一个特殊的哈希算法并创建了我自己的基于文件的哈希表解决方案。它真的很快,每秒检查数千个URL,如果它不必下载那些页面......
在本练习的情况下,我将首先使用一些XML建模工具创建一个简单的XML模式。 (Altova的XMLSpy很擅长这个。)当我认为我的数据很适合这个XSD时,我开始创建一个数据库,其中每个元素都将转换为一个表。因此,我将拥有一个良好的关系数据库以及一些XML格式的定义,可用于将相同的数据导入/导出数据库。
答案 3 :(得分:2)
你的锻炼身体很好,但我认为你得出了错误的结论。
我的想法是由于 复杂性(和可能的复杂性 我还没想到)这个 最好用xml建模。
我认为这个结论是基于错误的假设,即XML提供比关系模型更大的建模灵活性。实际上(正如Erwin Smout巧妙地描述的那样),关系模型本质上比XML更灵活,因为XML是严格分层的,而关系模型允许任意复杂性的多对多关系。
如果您不需要严格的架构并且希望能够存储任何内容,那么XML在运行时可能会更灵活。但是我们不再是在谈论建模了。
答案 4 :(得分:1)
“以上都不是”怎么样?
我首先使用像NORMA这样的概念建模工具对域进行建模。这将允许您专注于模型,直到您完成。此时,NORMA可以为几个流行的数据库生成DDL,以及XML模式。