Каковы общие проблемы, связанные с хранением данных XML в реляционных базах данных? - PullRequest
4 голосов
/ 19 августа 2010

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

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

Ответы [ 3 ]

3 голосов
/ 19 августа 2010

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

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

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

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

1 голос
/ 21 августа 2010

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

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

0 голосов
/ 19 августа 2010

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

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

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

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