XML в MySQL

Почему-то мало кто слышал, что в MySQL с версии 5.1.5 появился «чудесный» способ нарушать 1NF, при этом работая с частями поля таблицы, как со сложной структурой.

Кавычки вокруг слова «чудесный» какбэ намекают, что я не очень-то одобряю этот шаг, хотя понимаю, что иногда он оправдан. Просто я понимаю его опасность — можно увлечься этой возможность и забыть чем грозит нарушение первой нормальной формы.

Речь идёт о двух функциях — ExctractValue и UpdateXML. Если в поле таблицы хранится XML, то первая функция позволит выбрать данные при помощи XPath, а вторая — (при помощи XPath же) изменить какую-то их часть. Ничего неожиданного — функции могут работать как с полями таблицы, так и со строкой, переменной, результатом функции или любой комбинацией вышеперечисленного.

Примерно так:
SELECT ExtractValue('<a>c</a><b/>', '//a');

SELECT UpdateXML('<a><b>ccc</b><d></d></a>', '/a', '<e>fff</e>');

SELECT * FROM users WHERE ExtractValue(info, '//firstname') == 'Иван' AND ExtractValue(info, '//surname') == 'Сагалаев';
В случае, если XPath не дал результата или в поле оказался не XML, функции вернут NULL (версии MySQL до 5.1.12 содержат баг и частично могут работать даже с not-well-formed XML).
24 декабря 2009 23:15

astur (astur.net.ru)
25 декабря 2009, 10:06

Ещё немного фантазии, и можно сделать документо-ориентированную ДБ на основе MySQL.

bolk (bolknote.ru)
25 декабря 2009, 12:29, ответ предназначен astur (astur.net.ru):

Не-не, лучше что-то специализированное. Они и версии хранят нативно и шардятся лучше.

astur (astur.net.ru)
25 декабря 2009, 22:06, ответ предназначен bolk (bolknote.ru):

Понятно, что лучше, но сама идея... :)

jankkhvej (jankkhvej.blogspot.com)
27 декабря 2009, 01:46

http://trends.google.com/trends?q=DB2+XML,+MySQL+XML&date=all&geo=all&ctab=180663936&sa=N

(там, к сожалению, данных ранее 2004 года нет, это несколько сглаживает драму)

То есть именно в тот момент, когда этот XML в реляционных БД уже всем успел надоесть, MySQL занимается изобретением велосипеда.
И так у них во всём. Жалко тех, что сейчас делает что-то с MySQL. И приятно наблюдать естественный отбор в действии.

bolk (bolknote.ru)
27 декабря 2009, 11:23, ответ предназначен jankkhvej (jankkhvej.blogspot.com):

А мне не жалко :) Если так рассуждать, то мне жалко, например, тех, кто делает partitions в PostrgeSQL, везде свои недостатки.

jankkhvej (jankkhvej.blogspot.com)
28 декабря 2009, 18:19

Ну в конкретном случае с MySQL и его продажей надо мигрировать, пока ещё можно.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)