powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Схема БД на основе xsd
24 сообщений из 24, страница 1 из 1
Схема БД на основе xsd
    #36042337
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть xsd-схема. Она описывает формат документа, которыми должны обмениваться организации. Как наиболее рационально спроектировать реляционную БД под эту xsd-схему?

Спасибо.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36043265
Дмитрий16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не нужны частые и специфические поиски - то просто табличка с полем типа XML (типизированная по XSD)
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36341042
Alexander_111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmaw,

Схему надо отмапинговать и сгенерировать БД.
Смотри
http://sql.ru/forum/actualthread.aspx?tid=713110

Тогда все документы можно класть в репозитарий и обрабытвать их средствами SQL.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36344262
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий16Если не нужны частые и специфические поиски - то просто табличка с полем типа XML (типизированная по XSD)Скорее всего, лучьше не типизированная, если данные не удаляются после завершения обмена. Ведь формат документа будет меняться.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36352218
Alexander_111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Документы XML в Oracle можно хранить в CLOB в обычных реляционных таблицах.
Можно в файлах, размещенных в папках репозитария XDB. Весь вопрос в типах индексов и типах данных. В CLOB все данные текстовые, а в object-relation store - каждый тип данных переводится в свой оракловый тип. Во втором случае схему XSD надо зарегистрировать, то есть заранее описать структуру данных. Если регистрировать схему на лету в процедурах и функциях, то время операций будет больше, чем, если бы сперва зарегистрировать структуру, а затем заносить по схеме данные.
Все зависит от частоты выполнения операций. Если операция выполняется редко, то можно описывать схему на лету. При этом в служебные таблицы kus***.xsd пишутся метаданные о структуре схемы.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36352369
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_111Во втором случае схему XSD надо зарегистрировать, то есть заранее описать структуру данных. Если регистрировать схему на лету в процедурах и функциях, то время операций будет больше, чем, если бы сперва зарегистрировать структуру, а затем заносить по схеме данные.Я честно говоря, с ораклом не знаком...

Я считал, что для всех СУБД, если поле типа xml типизированно по XSD, то записываемые данные должны соответствовать описанию; а если мы меняем описание, то старые данные должны проходить верификацию новой схемой XSD. Вот и обращал на это внимание ТС.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36352610
Alexander_111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Схему в Oracle можно модифицировать также как и структуру таблицы оператором ALTER.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36353418
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_111alexeyvg,

Схему в Oracle можно модифицировать также как и структуру таблицы оператором ALTER.Разумеется, в любой системе данные можно модифицировать :-) Трудно представить СУБД, в которой это сделать нельзя.

Только вопрос не про это.

alexeyvgЯ считал, что для всех СУБД, если поле типа xml типизированно по XSD, то записываемые данные должны соответствовать описанию; а если мы меняем описание, то старые данные должны проходить верификацию новой схемой XSD. Вот и обращал на это внимание ТС.В оракле вводимые данные не верифицируются на соответствие со схемой или при изменении схемы не верифицируются старые данные?
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36355015
Alexander_111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

все верифицируется, можно не волноваться по этому поводу. Менять схему надо с головой, предусмотреть потенциал типов, правильно организовать иерархию типов. Опять же мепинг объектов на типы объектов в БД прописать. Если что-то непонятно в моих постах, значит в других СУБД пока не реализована объектно-реляционная модель представления данных.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36355812
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_111alexeyvg,

все верифицируется, можно не волноваться по этому поводу.Ну, так значит, я правильно предостерегал автора топика?

ЗЫ. Вы вообще вопрос и ответы читали?
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36364302
Alexander_111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Предупрежден - не значит, что осмылен. Похоже, alexeyvg, вы меняете структуру таблиц также часто, как схемы XSD. Просто пианист какой-то. Схемой туда, схемой сюда... Просто поручик Ржевский...
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36364777
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_111alexeyvg,

Предупрежден - не значит, что осмылен. Похоже, alexeyvg, вы меняете структуру таблиц также часто, как схемы XSD. Просто пианист какой-то. Схемой туда, схемой сюда... Просто поручик Ржевский...В реальной системе не вы будете менять схемы XSD, а вам их будут менять.

Вам внешние организации будут присылать xml с ежемесячно меняющимся форматом, и вы его должны будете обрабатывать, причём старые версии должны будут сохраняться и обрабатываться наряду с новыми. Понятное дело, при изменениях версий обычно будет приходить xml в новом формате, но иногда и в одном из старых.

Вот я и советую ТС, как правильно разрабатывать архитектуру приложения и базы.

Хотя проще, конечно, работать со сферическим конём в ваакуме, сказать пару фраз про крутой маппинг в объекты, очень к месту упомянуть про возможность апдэйта данных в оракле и назвать собеседника поручиком Ржевским :-)
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36389916
Alexander_111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgХотя проще, конечно, работать со сферическим конём в ваакуме, сказать пару фраз про крутой маппинг в объекты, очень к месту упомянуть про возможность апдэйта данных в оракле и назвать собеседника поручиком Ржевским :-)

Зачем волну гнать. Значит все еще проще, если XML сторонний. Нужно лишь настроить XML на реляционную таблицу. XML разные, а таблица одна. Хранить еще проще, раз назад в сторонние организации данные не нужно посылать. А как я понял, XML посылают без XSD.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36390374
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_111alexeyvgХотя проще, конечно, работать со сферическим конём в ваакуме, сказать пару фраз про крутой маппинг в объекты, очень к месту упомянуть про возможность апдэйта данных в оракле и назвать собеседника поручиком Ржевским :-)

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

Мы обсуждали, нужно-ли при хранении XML указать констрейн по XSD для этого XML

Ответ - нет, не нужно, и делать так неправильно.

Вариант - "не хранить XML, а хранить только распарсенные данные" - не подходит.
Первичку затирать нельзя. Замучаетесь потом доказывать "раз у нас такие данные в таблицах, значит, такой пришёл XML, но самого XML у нас нету, а какой код преобразования был при обработке файла № 00101A9098181091A9A9010981000101A 3 года назад, мы доказать не можем и повторить этот конверт тоже не можем"

Оставляю за кадром то, что такой подход и архитектурно неправильный. Отлаживать и сопровождать систему, в которой первичные факты не сохраняются в исходном виде, а попадают в систему после (возможно) сложной обработки (может быть, там тысячи строк кода, которые писались и модифицировались много лет разными программистами).
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36392772
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgМы обсуждали, нужно-ли при хранении XML указать констрейн по XSD для этого XML
Ответ - нет, не нужно, и делать так неправильно.Тема - типичный "сферический конь".
Реализация XML полностью зависит от вида СУБД. В DB2 и, если не ошибаюсь, в Оракле поле XML может хранить документы с разными схемами, тогда все схемы регистрируются в БД и каждая запись может соответствовать своей схеме. Тогда оно и нужно, и правильно.
В MS SQL, насколько помню, допустима только одна схема на поле, да и хранение не бинарное. У остальных РСУБД XML в еще более противозачаточном состоянии (если вообще есть), и тут уже надо извращаться с декомпозицией. Или взять правильную СУБД :)
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36392987
Alexander_111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnРеализация XML полностью зависит от вида СУБД.

Вот это точно, "конь в сфере"...
Вроде DB2 и ORACLE РДМ поддерживают. Так и базы, организованные по ООМ, тоже с XML работают. Милай, для чего XML созавался? Ответ: совместно описывать и хранить данные и метаданные. Весь вопрос в том, как и что системы с этим делать могут. Вот DB2 и Oracle по XSD создают объекты и сохраняют структуру и данные XML в БД. Другие это делать не умеют. Объясняешь любопытным умам, что данные в XML type таблицах и содержимое XML файлов - одно и тоже, так ведь не доходит. В репозтарии файл будет лежать, но с пустым размером, но если его извлечь, то он будет наполнен содержимым. Контент это называется...
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36393558
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnalexeyvgМы обсуждали, нужно-ли при хранении XML указать констрейн по XSD для этого XML
Ответ - нет, не нужно, и делать так неправильно.Тема - типичный "сферический конь".
Реализация XML полностью зависит от вида СУБД. В DB2 и, если не ошибаюсь, в Оракле поле XML может хранить документы с разными схемами, тогда все схемы регистрируются в БД и каждая запись может соответствовать своей схеме. Тогда оно и нужно, и правильно.
В MS SQL, насколько помню, допустима только одна схема на поле, да и хранение не бинарное. У остальных РСУБД XML в еще более противозачаточном состоянии (если вообще есть), и тут уже надо извращаться с декомпозицией. Или взять правильную СУБД :)Спасибо за замечание, я не учёл такой возможности, как констрейн записей на разные схемы - теперь буду знать.

Тем не менее, в реальной системе, а не в "сферическиом коне", задача ставится так:

Имеем от разных контрагентов поток запросов в виде xml-пакетов
Каждый xml-пакет сохраняем и присваиваем ему входящий номер
Клиенту посылаем тикет по обработке этого пакета с результатом (может быть и многофазная обработка - принял, распарсил-проверил, обработал, но эти детали к вопросу не относятся)

Вопрос - что делать, если полученный xml не верифицируется ни по одной из схем?
Если он вообще невалидный как xml (например, количество скобок не соответствует) - не хранить? забить? Типа - у нас всё правильно и не колышет?

На мой взгляд, если хранить входящие данные в БД, то правильнее хранить входящий пакет "как есть", хранить те байты, которые поступили.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36393971
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

хм, это ведь твой бизнес. Решай сам, как тебе надо.

Я почти на 100% уверен, что в БД подсистемы обработки запросов их надо хранить в структурированном виде, чтобы удобно было манипулировать этими данными.

В подсистеме приёма запросов хранить первоначальный запрос в бинарном виде неплохая идея. Иногда это даже обязательное требование.
Это нужно для выяснения, почему формат запроса не разбирается и т.п. задачь. Не факт, что ошибка в данных, а "у нас всё правильно". Бывает, что запросы не парсятся из-за ошибки "у нас".
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36394043
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander_111Милай, для чего XML созавался? Ответ: совместно описывать и хранить данные и метаданные.Милай, как раз создавался он просто как стандартизированное человекопонятное средство обмена для B2B. И метаданные в нем не хранятся, а хранятся они именно в XSD, по которому документы валидируются. Потом уже к нему прикрутили XSLT для трасформаций, XPath для навигации и XQuery для запросов/модификаций.
Alexander_111Весь вопрос в том, как и что системы с этим делать могут. Вот DB2 и Oracle по XSD создают объекты и сохраняют структуру и данные XML в БД. Другие это делать не умеют. Объясняешь любопытным умам, что данные в XML type таблицах и содержимое XML файлов - одно и тоже, так ведь не доходит. В репозтарии файл будет лежать, но с пустым размером, но если его извлечь, то он будет наполнен содержимым. Контент это называется...Мне не понятна Ваша приверженность к декомпозиции XML в реляционные структуры. Это хорошо только в весьма частных случаях. В остальном "хорошие" в смысле XML СУБД позволяют работать с ним как со сколь угодно строго типизированными иерархиями, эффективно обрабатывая именно навигацию по "лесу" деревьев, для чего реляционные структуры предназначены плохо. И еще хуже они предназначены для XML с меняющимися метаданными, т.е. XSD.
Не зря все-таки XQuery ввели в стандарт SQL, начиная с SQL:2003.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36394094
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgИмеем от разных контрагентов поток запросов в виде xml-пакетов
Каждый xml-пакет сохраняем и присваиваем ему входящий номер
Клиенту посылаем тикет по обработке этого пакета с результатом (может быть и многофазная обработка - принял, распарсил-проверил, обработал, но эти детали к вопросу не относятся)
Детали хранения XML нужно описывать исходя из его структуры и использования. Если это "глубокое" дерево, если обрабатывать его надо именно как дерево, а не как список, если XSD часто меняется или вообще отсутствует - нужна СУБД с нормальными XML-полями.
Если все проще или деревья не используются - можно и в реляционную структуру заносить.
Если же XML нужен только как протокол передачи вполне себе реляционных данных - и говорить не о чем, можно тупо скормить XSLT и получить плоский файл для импорта, например.

alexeyvgВопрос - что делать, если полученный xml не верифицируется ни по одной из схем?
Если он вообще невалидный как xml (например, количество скобок не соответствует) - не хранить? забить? Типа - у нас всё правильно и не колышет?

На мой взгляд, если хранить входящие данные в БД, то правильнее хранить входящий пакет "как есть", хранить те байты, которые поступили.Хранить приходящие "со стороны" пакеты нужно практически всегда "как есть", но только для архива после парсинга (зипом их и в BLOB, например).
Если XML не верифицируется по указанной в нем схеме, тем более вообще как XML - это ошибочный документ, и обрабатывать его просто опасно в смысле целостности данных. Если данные в нем хоть кому-то нужны, его надо просмотреть человеком и вылечить или запросить повторно.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36394145
Alexander_111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnСУБД позволяют работать с ним как со сколь угодно строго типизированными иерархиями, эффективно обрабатывая именно навигацию по "лесу" деревьев, для чего реляционные структуры предназначены плохо. И еще хуже они предназначены для XML с меняющимися метаданными, т.е. XSD. Не зря все-таки XQuery ввели в стандарт SQL, начиная с SQL:2003.

Вот уж перепутал, Милай, что курица, а что яйцо... Первична структура и данные, а форма вторична. XML - форма, РДМ - тоже форма. Так чем одна форма лучше другой? Почему это ОРМ плохо обрабатывает деревья? Вы такое Oracle не брякните, засмеют... XQUERY скрестили с SQL и что? Раньше все запросы к серверам любого типа шли через буферы запросов. XQUERY ничем не отличается, как задается путь к узлу по тегам (XPATH), так и я в буферах запросов задавал такие-же пути. В другой форме, но смысл от этого не меняется, Милай. В чем вопрос, меняется структура - как ее отследить? Выход - все просто хранить в файловом виде в файловом репозитарии. Что пришло, то пусть и лежит. И обрабатывать средствами XML парсера. Но нужны XSD, чтобы отпарсить. Если XSD нет, то XML - простой текст. И его надо обрабатывать как текстовую информацию. Что тут-то не понятно?
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36394191
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabВ подсистеме приёма запросов хранить первоначальный запрос в бинарном виде неплохая идея. Иногда это даже обязательное требование.Вот я об этом и говорю.

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

FavnalexeyvgВопрос - что делать, если полученный xml не верифицируется ни по одной из схем?
Если он вообще невалидный как xml (например, количество скобок не соответствует) - не хранить? забить? Типа - у нас всё правильно и не колышет?

На мой взгляд, если хранить входящие данные в БД, то правильнее хранить входящий пакет "как есть", хранить те байты, которые поступили.Хранить приходящие "со стороны" пакеты нужно практически всегда "как есть", но только для архива после парсинга (зипом их и в BLOB, например).
Если XML не верифицируется по указанной в нем схеме, тем более вообще как XML - это ошибочный документ, и обрабатывать его просто опасно в смысле целостности данных. Если данные в нем хоть кому-то нужны, его надо просмотреть человеком и вылечить или запросить повторно.Тут у меня другой взгляд на обработку.

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

Кстати, приходилось вытягивать данные из невалидного xml: в начале xml может получится выцепить ИД транзакции, тогда в ответе об ошибке можно его указать, что упрощает обработку ошибки на стороне контрагента.

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

Речь тут идёт не о xml-файле, присылаемом письмом раз в неделю, а о, например, сообщениях от смс-агрегаторов, которые идут потоком, и обработать ошибку вручную по каким-нибуть текстовым логам программы-парсера невозможно.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36394401
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander_111Вот уж перепутал, Милай, что курица, а что яйцо... Первична структура и данные, а форма вторична. XML - форма, РДМ - тоже форма. Так чем одна форма лучше другой?Милай, тяжело мне не запутаться, ибо "форма данных" - понятие для меня новое и неизученное. Можно ссылку? :)
Я знаю понятие "модель данных". Модели суть: реляционная, иерархическая, сетевая, объектная... XML есть частный случай слаботипизированной иерархии. Его можно сделать сильнотипизированной иерархией с помощью XSL, являющимся метаданными отн. валидируемых по нему XML. Модели отн. друг друга не лучше и не хуже - они разные, а вот эмуляция одной одели с помощью другой, например декомпозиция XML в реляционные таблицы, связана с серьезными накладными расходами.
Alexander_111Почему это ОРМ плохо обрабатывает деревья? Вы такое Oracle не брякните, засмеют...Я где-то написал, что плохо? Оракл прикрутил для обработки XML имеющееся у него иерархическое расширение, а в DB2 сделали отдельный XML движок. Умеет Оракл хранить в одой таблице XML с разными схемами? А вообще без схемы, но именно как дерево с эффективной навигацией и индексированием? Если нет - плохо, если да - причем тут ОРМ, разве он не просто реализация хранения? Просветите, а то я XML в Оракл знаю слабо.
Alexander_111XQUERY скрестили с SQL и что? Раньше все запросы к серверам любого типа шли через буферы запросов. XQUERY ничем не отличается, как задается путь к узлу по тегам (XPATH), так и я в буферах запросов задавал такие-же пути. В другой форме, но смысл от этого не меняется, Милай.Ктож их скрещивал-то? XQuery - отдельный язык. Какая связь между ним, "узлами" и "буферами запросов"? Или "буфера запросов" - это что-то Оракл-срецифичное? Дайте ссылку, а то под это словосочетание подходит куча разных технологий.
Alexander_111В чем вопрос, меняется структура - как ее отследить? Выход - все просто хранить в файловом виде в файловом репозитарии. Что пришло, то пусть и лежит. И обрабатывать средствами XML парсера. Но нужны XSD, чтобы отпарсить.Опять - "где футбол, а где Житомир"(С)? Что хранить в файлах - XSL? И зачем тогда СУБД? Подход в DB2: меняется структура - в БД регистрируется новый XSL - новые XML валидируются по ней, старые лежат как лежали со ссылкой на старый XSL. В Оракл так нельзя? Если нет - я думал о нем слишком хорошо.
Alexander_111Если XSD нет, то XML - простой текст. И его надо обрабатывать как текстовую информацию. Что тут-то не понятно?Не понятно, с каких пор XML стал "простым текстом". Он - по определению иерархия. Просто без XSL - иерархия строк, без бинарных типов. Иерархический способ его хранения и доступность для индексирования и XQuery в DB2 при этом никак не меняется.
...
Рейтинг: 0 / 0
Схема БД на основе xsd
    #36394413
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg...Тут у меня другой взгляд на обработку...
Речь тут идёт не о xml-файле, присылаемом письмом раз в неделю, а о, например, сообщениях от смс-агрегаторов, которые идут потоком, и обработать ошибку вручную по каким-нибуть текстовым логам программы-парсера невозможно.Сойдемся на том, что обработка ошибок - дело крайне зависящее от задачи и общих рецептов тут не бывает.
В любом случае, если пришедший XML невалидный, автоматически его обрабатывать надо с большой осторожностью, т.к. ошибочный документ с большой вероятностью просто испорчен и может содержать ошибочные данные.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Схема БД на основе xsd
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]