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

Подзапросы не выбирают столбец id, поэтому нет a.shid для сравнения. А поскольку подзапросы сгруппированы по месяцам, вы не можете выбрать в них столбец id.

Вам нужно присоединиться к третьей таблице в подзапросах.

select 
    (a.count_one / b.count_two) as final_count, a.orders,
    a.Months, b.Sum
from 
    (
        select count(*) as count_one, DATE_FORMAT(`date`, "%M %Y") AS `Months`, orders 
        from first_table
        JOIN third_table ON first_table.shid = third_table.id
        WHERE third_table.name = 'Any name'
        GROUP BY Months)
    ) a
INNER JOIN
    (
        select count(*) as count_two, DATE_FORMAT(`date`, "%M %Y") AS `Months`, sum(a) AS Sum
        from second_table
        JOIN third_table ON second_table.shid = third_table.id
        WHERE third_table.name = 'Any name'
        GROUP BY Months)
    ) b
ON a.Months = b.Months
12
задан 3 revs 1 September 2009 в 10:21
поделиться

11 ответов

Если Вы не видите, что потребность затем не изменяется!

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

5
ответ дан 2 December 2019 в 06:10
поделиться

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

5
ответ дан 2 December 2019 в 06:10
поделиться

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

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

3
ответ дан 2 December 2019 в 06:10
поделиться

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

1
ответ дан 2 December 2019 в 06:10
поделиться

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

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

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

2
ответ дан 2 December 2019 в 06:10
поделиться

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

Функции выше существуют от SQL Server 2000 MS или 2005.

1
ответ дан 2 December 2019 в 06:10
поделиться

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

1
ответ дан 2 December 2019 в 06:10
поделиться

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

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

0
ответ дан 2 December 2019 в 06:10
поделиться

Гибкость является одной причиной.

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

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

0
ответ дан 2 December 2019 в 06:10
поделиться

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

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

3
ответ дан 2 December 2019 в 06:10
поделиться

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4
ответ дан 2 December 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: