暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 用XML设计数据模型

ASKTOM 2021-02-25
284

问题描述

你好,问一下汤姆团队。

我正在创建一个数据模型,并考虑在Oracle数据库19c中创建一些XMLType列,因为我们以该格式接收数据,并且我们希望利用此Oracle功能。

我有一些问题:

1.开发人员说,如果我创建一个XMLType列来存储XML数据,当数据增加时,它将没有性能。正因为如此,他们告诉我,我应该在关系模型中放置一些XML列,以便在通过应用程序查询时获得性能,因为XML查询是 “慢” 的。我说我们可以使用XMLQuery查询XMLType列并为相关列建立索引。

例如:

如果我有XML:

1.0
value
value
value
value
复制


他们想要:
create table A
column1 varchar(x),
column2 varchar(x),
XML XMLType
复制


你觉得怎么样?

2.在具有XMLType列的表中,身份列是否仍用作PK?

3.使用XMLType列还应该考虑什么?

提前感谢。

问候,

专家解答

你需要考虑一下你在这里做出的权衡。

采用XML并将其直接插入XMLType列会使插入代码变得容易得多。但是它使查询变得复杂。虽然您可以使用XMLQuery,但这可能很难使用,特别是如果您的开发团队不熟悉它。

请记住,通常您在表上只有少数插入语句,但可以轻松地进行数百甚至数千个不同的查询!

这种权衡值得吗?

然后,您必须记住,如果XML的内容发生变化,该怎么办。如果你直接在XMLType中转储它,那么添加/删除元素就没什么可做的了。但是,当将其分解为关系结构时,您必须适当地更新表和代码。

如果XML定期更改,则可能会产生大量工作。

这种权衡值得吗?

您是正确的,您可以使用 (结构化或非结构化) XMLIndex、Oracle文本索引或基于目标函数的索引 (尽管这些索引已弃用) 来索引XML。

文档详细讨论了它们之间的差异。

https://docs.oracle.com/en/database/oracle/oracle-database/19/adxdb/indexes-for-XMLType-data.html#GUID-AEF30229-B377-4479-9627-45494B772392

这些会提供足够好的性能吗?它与常规表索引相比如何?你必须测试才能找到答案!

Are identity columns still useful as PK in tables with XMLType columns?

可能吗?同样,这取决于您为什么要添加这些。

如果你想让外键指向这个表,那么你很可能想要添加这些 (假设没有其他明显的PK候选)。

它还使查找特定行变得更加容易,这可以使一些搜索和调试变得更加容易。

如果您想了解更多有关使用XML的信息,XDB开发人员指南将详细讨论使用XML的来龙去脉。https://docs.oracle.com/en/database/oracle/oracle-database/19/adxdb/index.html
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论