Database XML数据库如何进行深度查询?

Database XML数据库如何进行深度查询?,database,basex,xml-database,Database,Basex,Xml Database,我想问一个关于XML数据库如何工作的问题,但我将给出一个我在标准关系数据库上理解的示例,希望人们能够解释它如何在XML数据库上工作 假设我们的数据有: Countries Businesses Employees 在关系数据库中,您可能会执行以下操作: COUNTRY_BUSINESS_TAB: COUNTRY_ID, BUSINESS_ID BUSINESS_EMPLOYEES_TAB: BUSINESS_ID, EMPLOYEE_ID 让我们忘记为ID指定有意义的名称,而直接使用ID 现

我想问一个关于XML数据库如何工作的问题,但我将给出一个我在标准关系数据库上理解的示例,希望人们能够解释它如何在XML数据库上工作

假设我们的数据有:

Countries
Businesses
Employees
在关系数据库中,您可能会执行以下操作:

COUNTRY_BUSINESS_TAB: COUNTRY_ID, BUSINESS_ID
BUSINESS_EMPLOYEES_TAB: BUSINESS_ID, EMPLOYEE_ID
让我们忘记为ID指定有意义的名称,而直接使用ID

现在,假设我们想按员工搜索,这很简单,我们在
业务员工选项卡中放置一个索引
员工ID
,我们可以快速获得员工工作地点的业务ID。一旦建立了索引,就不需要进行完整的表扫描

现在让我们说数据是XML格式的。在顶层,标签中有大量的国家ID。作为子标记,有业务ID。作为子标签,还有员工ID

XML数据库能在不扫描整个文档的情况下快速找到员工工作的所有位置吗


我问这个问题是因为我有大量的XML数据,我曾考虑解析这些数据并将其放入SQL数据库,但现在我正在考虑将其直接放入XML数据库,比如,使用XQuery而不是SQL。我只需要一个解释或一个简单的参考来阅读如何在XML数据库中解决这个问题。XML数据库提供了XPath和XQuery语言来查询XML数据。例如,以下查询可用于返回员工的工作地点(要使其工作,您必须使其适应实际的XML数据):


在一些XML DBMS中,例如BaseX,上面的查询将自动重写以利用索引结构。这样,查询处理器将只检索那些对查询结果很重要的XML文本节点。

如果在Stackoverflow上搜索XML数据库,您将获得大量关于此问题的深入分析。总的来说:Xml不是一个数据库,Xml文件本身对于查询来说是完全无用和低效的。然而,有一些软件可以加载Xml文件并对其进行索引,从而使其在某种程度上更加高效。但是,只有当您无法将数据与关系模型相适应时,才可以这样做。@MobyDisk很抱歉这么说,但您的评论完全是错误的。“有点效率”是一个很大的轻描淡写,因为在某些情况下,原生XML数据库速度非常快。您可能只需要选择一个值,而不必在关系模型中进行多个联接。您的评论没有证据支持,而是受到对XML陈旧过时的偏见的支持。在您询问参考资料时,您可能希望查看我们关于索引的文档,并添加以下内容:。另外,请记住索引是特定于实现的,因此如何在内部处理索引取决于您使用的实际数据库。
//employee[name = 'john']/parent::business/parent::country/@name