2010-08-19 4 views
4

Что касается обсуждения, начатого в this question, я решил поставить его в качестве вики-вопроса сообщества.Каковы общие проблемы, связанные с хранением данных XML в реляционных базах данных?

Корень вопроса, следовательно, целесообразно хранить данные XML в реляционной базе данных? Существуют ли вообще лучшие способы реализации одной и той же цели? Какие механизмы баз данных обеспечивают хорошую поддержку типов данных XML (таких как SQL Server) и каковы проблемы, связанные с так называемыми «индексами XML»?

ответ

3

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

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

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

Так, как и многие другие вещи в программном обеспечении, «это зависит».

+0

Раньше было, что XML в РСУБД был непрозрачным и неуязвимым. За последнее десятилетие это было все меньше и меньше. –

+0

@Steven Sudit: извините мое невежество, но как RDBMS даже знает, что это XML? Это всего лишь куча байтов. Почему простой текст ascii можно было бы искать, но простой текст ascii, который выглядит так, как XML не может быть доступен для поиска? –

+0

@Bryan: столбец явно объявлен как тип 'xml', а не просто' nvarchar (max) ', и может даже иметь связанную с ним схему. (Это для MS SQL Server 2008, но другие базы данных имеют схожие функциональные возможности. Обзор этого продукта см. По адресу http://www.microsoft.com/sqlserver/2008/en/us/wp-sql-2008-whats- new-xml.aspx) –

0

Фактически это зависит от того, какие данные вы храните в своей БД, это нормально для того, чтобы хранить информацию XHTML в базе данных. Одним из принципов реляционной базы данных является то, что информация является атомарной, я имею в виду, вы должны хранить что-то вроде

name | professions 
---------------------- 
Clark | writer, journaliste, superhero 

так я бы против того чтобы хранить что-то вроде

name | information 
---------------------- 
Clark | <profession> writer </profession><profession> journaliste </profession><profession> superhero </profession> 
1

Одна из проблем, с поддержкой XML в СУБД является то, что не существует AFAIK нет общепринятых правил для сравнения XML документы. Реляционная база данных в принципе может хранить любое значение атрибута, которое может поддерживать назначение и сравнение - это важно для реляционной проекции, например, потому что значения каждого атрибута должны быть сопоставимы друг с другом. Сравнение не является проблемой для большинства типов: строки, числа, двоичные файлы и т. Д. Это потенциально более сложно для типа документа XML.

Некоторые СУБД SQL (то есть нереляционные СУБД) просто не позволяют сравнивать значения XML вообще. Например, Microsoft SQL Server позволяет использовать столбцы с типом XML, но их нельзя сравнивать, и, кроме всего прочего, SELECT DISTINCT не поддерживается.