Подтвердить что ты не робот

Почему я бы решил хранить и манипулировать XML в реляционной базе данных?

Современные РСУБД поддерживают XML-типы столбцов и функциональность для работы с XML в хранимых процедурах. Исторически я всегда имел сопоставленные иерархические данные (будь то объекты OO или XML) для реляционных таблиц. Учитывая широко распространенную поддержку базы данных XML, я должен изменить свои пути?

4b9b3361

Ответ 1

Если вы не видите необходимости, не изменяйте!

Иногда вам приходится сохранять данные, которые не имеют известной структуры, или ее структура очень изменчива. В этих случаях вместо создания таблицы просто сохраните XML в своей существующей таблице

Ответ 2

У меня есть хороший пример в реальной жизни. Один из моих клиентов очень часто получает XML файл от своих поставщиков с некоторыми важными данными. Он глубоко вложен. Им нужно сравнить его с предыдущим XML файлом, чтобы узнать, что изменилось. Без поддержки XML в базе данных мне пришлось создать инструмент, который выполняет итерацию через узлы XML и ищет совпадения в таблицах реляционной базы данных. Я мог бы использовать некоторый инструмент сравнения XML-XML, но некоторые проверки относятся к некоторым другим данным, которые не пришли из файла XML, и мне нужно объединить все это вместе. Хорошо, все это не так уж и важно, но все же - с базами данных XML вы получаете эту функциональность из коробки.

Ответ 3

Единственная причина, по которой я когда-либо буду использовать ее снова, - это когда для расширяемости и гибкости.

Накладные расходы на xml (xpath) и обслуживание (пространства имен) действительно не стоят проблем, если вы можете избежать этого. Мы ранее хранили большие объемы данных в xml и использовали скалярные функции для его извлечения, но он слишком медленный, и причиной огромных головных болей является структура xml или пространство имен.

Но гибкость фантастическая. Вы можете добавлять новые свойства, когда захотите, вы можете иметь данные проекта/клиента/задания, которые не требуют соответствующих столбцов. XML не должен находиться в статической структуре - вам просто нужен factory, который может порождать экземпляры для работы с разными XML (которые должны быть связаны с проектом/клиентом/заданием).

При добавлении новой таблицы в существующую систему, особенно той, которая содержит много существующих данных и не может быть легко изменена, я добавлю столбец XML. В будущем, если мне когда-либо понадобится добавить еще один столбец в эту таблицу, я могу просто использовать столбец XML, а не расстраиваться и делать много переделок.

В заключение вы не начинаете, добавляя существенные свойства в XML. Но вы должны добавить XML, когда знаете, что ваша таблица, возможно, потребуется расширить, именно потому, что она дает вам возможность расширения.

Ответ 4

Вот пример реального мира из системы, над которой я работаю. У нас есть базовая система и создается код, специфичный для клиента, в java. В зависимости от того, какой клиент совершает транзакции, может быть вызван другой класс. Иногда этот настраиваемый код должен что-то хранить, и мы помещаем его в столбец XML в соответствующей таблице. Это спасает нас от моделирования всего под солнцем. Добавление нового клиента обычно означает только запись и установку кода Java.

Недостатком является то, что отчеты, запросы и обновления сложнее в столбце XML. Нет никаких обычных хороших функций базы данных, таких как проверки ограничений и т.д.

Ответ 5

Я использую тип столбца XML, чтобы скопировать копию всех критически важных для бизнеса сообщений, которые мы получаем от сторонней службы. Это очень удобно по нескольким причинам.

1) В случае повреждения данных мы можем отслеживать, какие данные приходили, когда и в каком формате.
2) Будущие работы по разработке систем могут основываться на реальных данных из таблицы журналов - просто десериализовать и использовать данные, как если бы они пришли из вызова службы 3p

3) Удовлетворяет, что ребята из инфраструктуры заняты распределением дискового пространства на сервере БД.;)

Ответ 6

Например, вы получаете XML-документы из какой-либо другой системы, с очень богатой или сложной структурой, которую вы хотите сохранить; но для получения этих данных вам понадобятся только несколько четко определенных запросов. В этом случае просто проанализируйте данные, необходимые для создания некоторых индексов, и сохраните всю структуру XML в одном поле.

Для этого вам не нужна большая поддержка XML для механизма БД, но она по-прежнему помогает выражать запросы.

Кроме того, я бы предположил, что некоторые DMBS с хорошей поддержкой XML могут позволить вам просто хранить XML-документ, возможно, не указав, как его индексировать. Вы просто используете XQuery и надеетесь, что он каким-то образом оптимизирует ваши потребности.

Ответ 7

Скажем, у вас есть сущность с атрибутами. Вы можете хранить все эти атрибуты в XML вместо создания отдельной таблицы атрибутов. XML будет более гибким.

Ответ 8

Вы можете обрабатывать данные XML непосредственно на сервере SQL. Например. вы можете применять выражения XPath и просто отправлять отфильтрованный набор результатов клиенту. Функции SQL-сервера могут впоследствии использовать возможности обработки XML.

В приведенных выше функциях существуют от MS SQL Server 2000 или 2005.

Ответ 9

У меня не было необходимости хранить XML до сих пор, но я часто использую возможность возврата XML из хранимой процедуры. Это делает некоторые вещи очень полезными - в основном, отчеты. Я могу запустить SP для генерации отчета, отправки результатов в XML, а затем использовать XSLT для быстрого отображения результата на сайте.

Ответ 10

Здесь вы можете хранить созданный пользователем XML.

Если такой веб-сайт, как stackoverflow, использовал некоторую разметку XML вместо отметки, вы можете сохранить вопрос/ответы как XML в базе данных. Возможно, вы обнаружите, что пытаетесь разобрать этот XML файл, созданный пользователем, для поиска собственных тегов.

Ответ 11

Гибкость - одна из причин.

Если структура ваших данных может различаться, вы можете сохранить общую таблицу RDBMS вместе с запросами и т.д., которые после нее будут обрабатываться с несколькими переменными структурами.

Если вам нужно добавить поле в какой-то момент, вы можете сделать это, не изменяя структуру таблицы RDMS и, таким образом, не нарушайте все остальные запросы.