|
|
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
Есть xsd-схема. Она описывает формат документа, которыми должны обмениваться организации. Как наиболее рационально спроектировать реляционную БД под эту xsd-схему? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 21:46 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
Если не нужны частые и специфические поиски - то просто табличка с полем типа XML (типизированная по XSD) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 12:46 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
kmaw, Схему надо отмапинговать и сгенерировать БД. Смотри http://sql.ru/forum/actualthread.aspx?tid=713110 Тогда все документы можно класть в репозитарий и обрабытвать их средствами SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2009, 13:39 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
Дмитрий16Если не нужны частые и специфические поиски - то просто табличка с полем типа XML (типизированная по XSD)Скорее всего, лучьше не типизированная, если данные не удаляются после завершения обмена. Ведь формат документа будет меняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2009, 17:53 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Документы XML в Oracle можно хранить в CLOB в обычных реляционных таблицах. Можно в файлах, размещенных в папках репозитария XDB. Весь вопрос в типах индексов и типах данных. В CLOB все данные текстовые, а в object-relation store - каждый тип данных переводится в свой оракловый тип. Во втором случае схему XSD надо зарегистрировать, то есть заранее описать структуру данных. Если регистрировать схему на лету в процедурах и функциях, то время операций будет больше, чем, если бы сперва зарегистрировать структуру, а затем заносить по схеме данные. Все зависит от частоты выполнения операций. Если операция выполняется редко, то можно описывать схему на лету. При этом в служебные таблицы kus***.xsd пишутся метаданные о структуре схемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2009, 15:25 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
Alexander_111Во втором случае схему XSD надо зарегистрировать, то есть заранее описать структуру данных. Если регистрировать схему на лету в процедурах и функциях, то время операций будет больше, чем, если бы сперва зарегистрировать структуру, а затем заносить по схеме данные.Я честно говоря, с ораклом не знаком... Я считал, что для всех СУБД, если поле типа xml типизированно по XSD, то записываемые данные должны соответствовать описанию; а если мы меняем описание, то старые данные должны проходить верификацию новой схемой XSD. Вот и обращал на это внимание ТС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2009, 16:23 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Схему в Oracle можно модифицировать также как и структуру таблицы оператором ALTER. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2009, 17:50 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
Alexander_111alexeyvg, Схему в Oracle можно модифицировать также как и структуру таблицы оператором ALTER.Разумеется, в любой системе данные можно модифицировать :-) Трудно представить СУБД, в которой это сделать нельзя. Только вопрос не про это. alexeyvgЯ считал, что для всех СУБД, если поле типа xml типизированно по XSD, то записываемые данные должны соответствовать описанию; а если мы меняем описание, то старые данные должны проходить верификацию новой схемой XSD. Вот и обращал на это внимание ТС.В оракле вводимые данные не верифицируются на соответствие со схемой или при изменении схемы не верифицируются старые данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2009, 10:45 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
alexeyvg, все верифицируется, можно не волноваться по этому поводу. Менять схему надо с головой, предусмотреть потенциал типов, правильно организовать иерархию типов. Опять же мепинг объектов на типы объектов в БД прописать. Если что-то непонятно в моих постах, значит в других СУБД пока не реализована объектно-реляционная модель представления данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2009, 17:43 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
Alexander_111alexeyvg, все верифицируется, можно не волноваться по этому поводу.Ну, так значит, я правильно предостерегал автора топика? ЗЫ. Вы вообще вопрос и ответы читали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2009, 10:21 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Предупрежден - не значит, что осмылен. Похоже, alexeyvg, вы меняете структуру таблиц также часто, как схемы XSD. Просто пианист какой-то. Схемой туда, схемой сюда... Просто поручик Ржевский... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 09:54 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
Alexander_111alexeyvg, Предупрежден - не значит, что осмылен. Похоже, alexeyvg, вы меняете структуру таблиц также часто, как схемы XSD. Просто пианист какой-то. Схемой туда, схемой сюда... Просто поручик Ржевский...В реальной системе не вы будете менять схемы XSD, а вам их будут менять. Вам внешние организации будут присылать xml с ежемесячно меняющимся форматом, и вы его должны будете обрабатывать, причём старые версии должны будут сохраняться и обрабатываться наряду с новыми. Понятное дело, при изменениях версий обычно будет приходить xml в новом формате, но иногда и в одном из старых. Вот я и советую ТС, как правильно разрабатывать архитектуру приложения и базы. Хотя проще, конечно, работать со сферическим конём в ваакуме, сказать пару фраз про крутой маппинг в объекты, очень к месту упомянуть про возможность апдэйта данных в оракле и назвать собеседника поручиком Ржевским :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 12:49 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
alexeyvgХотя проще, конечно, работать со сферическим конём в ваакуме, сказать пару фраз про крутой маппинг в объекты, очень к месту упомянуть про возможность апдэйта данных в оракле и назвать собеседника поручиком Ржевским :-) Зачем волну гнать. Значит все еще проще, если XML сторонний. Нужно лишь настроить XML на реляционную таблицу. XML разные, а таблица одна. Хранить еще проще, раз назад в сторонние организации данные не нужно посылать. А как я понял, XML посылают без XSD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2009, 14:26 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
Alexander_111alexeyvgХотя проще, конечно, работать со сферическим конём в ваакуме, сказать пару фраз про крутой маппинг в объекты, очень к месту упомянуть про возможность апдэйта данных в оракле и назвать собеседника поручиком Ржевским :-) Зачем волну гнать. Значит все еще проще, если XML сторонний. Нужно лишь настроить XML на реляционную таблицу. XML разные, а таблица одна. Хранить еще проще, раз назад в сторонние организации данные не нужно посылать. А как я понял, XML посылают без XSD.Вопрос-то был не в этом. Мы обсуждали, нужно-ли при хранении XML указать констрейн по XSD для этого XML Ответ - нет, не нужно, и делать так неправильно. Вариант - "не хранить XML, а хранить только распарсенные данные" - не подходит. Первичку затирать нельзя. Замучаетесь потом доказывать "раз у нас такие данные в таблицах, значит, такой пришёл XML, но самого XML у нас нету, а какой код преобразования был при обработке файла № 00101A9098181091A9A9010981000101A 3 года назад, мы доказать не можем и повторить этот конверт тоже не можем" Оставляю за кадром то, что такой подход и архитектурно неправильный. Отлаживать и сопровождать систему, в которой первичные факты не сохраняются в исходном виде, а попадают в систему после (возможно) сложной обработки (может быть, там тысячи строк кода, которые писались и модифицировались много лет разными программистами). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2009, 16:57 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
alexeyvgМы обсуждали, нужно-ли при хранении XML указать констрейн по XSD для этого XML Ответ - нет, не нужно, и делать так неправильно.Тема - типичный "сферический конь". Реализация XML полностью зависит от вида СУБД. В DB2 и, если не ошибаюсь, в Оракле поле XML может хранить документы с разными схемами, тогда все схемы регистрируются в БД и каждая запись может соответствовать своей схеме. Тогда оно и нужно, и правильно. В MS SQL, насколько помню, допустима только одна схема на поле, да и хранение не бинарное. У остальных РСУБД XML в еще более противозачаточном состоянии (если вообще есть), и тут уже надо извращаться с декомпозицией. Или взять правильную СУБД :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2009, 18:31 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
FavnРеализация XML полностью зависит от вида СУБД. Вот это точно, "конь в сфере"... Вроде DB2 и ORACLE РДМ поддерживают. Так и базы, организованные по ООМ, тоже с XML работают. Милай, для чего XML созавался? Ответ: совместно описывать и хранить данные и метаданные. Весь вопрос в том, как и что системы с этим делать могут. Вот DB2 и Oracle по XSD создают объекты и сохраняют структуру и данные XML в БД. Другие это делать не умеют. Объясняешь любопытным умам, что данные в XML type таблицах и содержимое XML файлов - одно и тоже, так ведь не доходит. В репозтарии файл будет лежать, но с пустым размером, но если его извлечь, то он будет наполнен содержимым. Контент это называется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2009, 23:11 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
FavnalexeyvgМы обсуждали, нужно-ли при хранении XML указать констрейн по XSD для этого XML Ответ - нет, не нужно, и делать так неправильно.Тема - типичный "сферический конь". Реализация XML полностью зависит от вида СУБД. В DB2 и, если не ошибаюсь, в Оракле поле XML может хранить документы с разными схемами, тогда все схемы регистрируются в БД и каждая запись может соответствовать своей схеме. Тогда оно и нужно, и правильно. В MS SQL, насколько помню, допустима только одна схема на поле, да и хранение не бинарное. У остальных РСУБД XML в еще более противозачаточном состоянии (если вообще есть), и тут уже надо извращаться с декомпозицией. Или взять правильную СУБД :)Спасибо за замечание, я не учёл такой возможности, как констрейн записей на разные схемы - теперь буду знать. Тем не менее, в реальной системе, а не в "сферическиом коне", задача ставится так: Имеем от разных контрагентов поток запросов в виде xml-пакетов Каждый xml-пакет сохраняем и присваиваем ему входящий номер Клиенту посылаем тикет по обработке этого пакета с результатом (может быть и многофазная обработка - принял, распарсил-проверил, обработал, но эти детали к вопросу не относятся) Вопрос - что делать, если полученный xml не верифицируется ни по одной из схем? Если он вообще невалидный как xml (например, количество скобок не соответствует) - не хранить? забить? Типа - у нас всё правильно и не колышет? На мой взгляд, если хранить входящие данные в БД, то правильнее хранить входящий пакет "как есть", хранить те байты, которые поступили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2009, 12:22 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
alexeyvg, хм, это ведь твой бизнес. Решай сам, как тебе надо. Я почти на 100% уверен, что в БД подсистемы обработки запросов их надо хранить в структурированном виде, чтобы удобно было манипулировать этими данными. В подсистеме приёма запросов хранить первоначальный запрос в бинарном виде неплохая идея. Иногда это даже обязательное требование. Это нужно для выяснения, почему формат запроса не разбирается и т.п. задачь. Не факт, что ошибка в данных, а "у нас всё правильно". Бывает, что запросы не парсятся из-за ошибки "у нас". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2009, 15:11 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2009, 15:33 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
alexeyvgИмеем от разных контрагентов поток запросов в виде xml-пакетов Каждый xml-пакет сохраняем и присваиваем ему входящий номер Клиенту посылаем тикет по обработке этого пакета с результатом (может быть и многофазная обработка - принял, распарсил-проверил, обработал, но эти детали к вопросу не относятся) Детали хранения XML нужно описывать исходя из его структуры и использования. Если это "глубокое" дерево, если обрабатывать его надо именно как дерево, а не как список, если XSD часто меняется или вообще отсутствует - нужна СУБД с нормальными XML-полями. Если все проще или деревья не используются - можно и в реляционную структуру заносить. Если же XML нужен только как протокол передачи вполне себе реляционных данных - и говорить не о чем, можно тупо скормить XSLT и получить плоский файл для импорта, например. alexeyvgВопрос - что делать, если полученный xml не верифицируется ни по одной из схем? Если он вообще невалидный как xml (например, количество скобок не соответствует) - не хранить? забить? Типа - у нас всё правильно и не колышет? На мой взгляд, если хранить входящие данные в БД, то правильнее хранить входящий пакет "как есть", хранить те байты, которые поступили.Хранить приходящие "со стороны" пакеты нужно практически всегда "как есть", но только для архива после парсинга (зипом их и в BLOB, например). Если XML не верифицируется по указанной в нем схеме, тем более вообще как XML - это ошибочный документ, и обрабатывать его просто опасно в смысле целостности данных. Если данные в нем хоть кому-то нужны, его надо просмотреть человеком и вылечить или запросить повторно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2009, 15:51 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
FavnСУБД позволяют работать с ним как со сколь угодно строго типизированными иерархиями, эффективно обрабатывая именно навигацию по "лесу" деревьев, для чего реляционные структуры предназначены плохо. И еще хуже они предназначены для XML с меняющимися метаданными, т.е. XSD. Не зря все-таки XQuery ввели в стандарт SQL, начиная с SQL:2003. Вот уж перепутал, Милай, что курица, а что яйцо... Первична структура и данные, а форма вторична. XML - форма, РДМ - тоже форма. Так чем одна форма лучше другой? Почему это ОРМ плохо обрабатывает деревья? Вы такое Oracle не брякните, засмеют... XQUERY скрестили с SQL и что? Раньше все запросы к серверам любого типа шли через буферы запросов. XQUERY ничем не отличается, как задается путь к узлу по тегам (XPATH), так и я в буферах запросов задавал такие-же пути. В другой форме, но смысл от этого не меняется, Милай. В чем вопрос, меняется структура - как ее отследить? Выход - все просто хранить в файловом виде в файловом репозитарии. Что пришло, то пусть и лежит. И обрабатывать средствами XML парсера. Но нужны XSD, чтобы отпарсить. Если XSD нет, то XML - простой текст. И его надо обрабатывать как текстовую информацию. Что тут-то не понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2009, 16:10 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
mcureenabВ подсистеме приёма запросов хранить первоначальный запрос в бинарном виде неплохая идея. Иногда это даже обязательное требование.Вот я об этом и говорю. А дальше, после приёма и верификации (если они приняты и верифиуированны), данные уже хранятся в реляционном виде, и этот вид не зависит от формата документов контрагентов (Ну, это уже наш подход - не использовать xml в системе). FavnalexeyvgВопрос - что делать, если полученный xml не верифицируется ни по одной из схем? Если он вообще невалидный как xml (например, количество скобок не соответствует) - не хранить? забить? Типа - у нас всё правильно и не колышет? На мой взгляд, если хранить входящие данные в БД, то правильнее хранить входящий пакет "как есть", хранить те байты, которые поступили.Хранить приходящие "со стороны" пакеты нужно практически всегда "как есть", но только для архива после парсинга (зипом их и в BLOB, например). Если XML не верифицируется по указанной в нем схеме, тем более вообще как XML - это ошибочный документ, и обрабатывать его просто опасно в смысле целостности данных. Если данные в нем хоть кому-то нужны, его надо просмотреть человеком и вылечить или запросить повторно.Тут у меня другой взгляд на обработку. "просмотреть человеком и вылечить или запросить повторно", а так-же направить ответ об ошибочной транзакции контрагенту - это вполне нормальная обработка запроса от контрагента в рамках бизнес-системы, для которой есть требования по обработке со всякой там бизнес-логикой, стадиями обработки, прохождением по ответственным за это людям и т.п. И для неё вполне разумно хранить исходные данные. Кстати, приходилось вытягивать данные из невалидного xml: в начале xml может получится выцепить ИД транзакции, тогда в ответе об ошибке можно его указать, что упрощает обработку ошибки на стороне контрагента. "обрабатывать его просто опасно", как вы сказали - это я могу понимать только как "ничего не делать с этим запросом". Такого не бывает - делать с запросом всегда что-то нужно. Речь тут идёт не о xml-файле, присылаемом письмом раз в неделю, а о, например, сообщениях от смс-агрегаторов, которые идут потоком, и обработать ошибку вручную по каким-нибуть текстовым логам программы-парсера невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2009, 16:28 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
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 при этом никак не меняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2009, 17:58 |
|
||
|
Схема БД на основе xsd
|
|||
|---|---|---|---|
|
#18+
alexeyvg...Тут у меня другой взгляд на обработку... Речь тут идёт не о xml-файле, присылаемом письмом раз в неделю, а о, например, сообщениях от смс-агрегаторов, которые идут потоком, и обработать ошибку вручную по каким-нибуть текстовым логам программы-парсера невозможно.Сойдемся на том, что обработка ошибок - дело крайне зависящее от задачи и общих рецептов тут не бывает. В любом случае, если пришедший XML невалидный, автоматически его обрабатывать надо с большой осторожностью, т.к. ошибочный документ с большой вероятностью просто испорчен и может содержать ошибочные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2009, 18:06 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36341042&tid=1542913]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 527ms |

| 0 / 0 |
