А я вот написал преобразователь MySQL <-> XML...

ivankrkrkr

Новичок
А я вот написал преобразователь MySQL <-> XML...

Так получилось, что я написал на PHP преобразоватль БД MySQL в XML-документ. Демка тут: www.rdbxml.com
Просьба не ломать, защиты нет.
Основная идея: при помощи мастера пользователь выбирает одну из максимальноревовидных схем XML-документа для заданной схемы БД. Потом потом это дело сохраняется. Потом происходит преобразование(я). Полученные XML-документ может быть загружен обратно в БД с такой же схемой что и исходная (загрузка XML в РБД пока не реализована).

Внимание, вопрос: надо ли это кому-либо и имеет ли смысл доводить RDBXML до ума? Для ответа, прошу ознакомиться-таки с демкойю.
 

denver

?>Скриптер
Хм. Интересно. Вот только "мастер" там имхо лишнее. Зависимости ведь можно узнать из самой базы, ну если они были определены через foreign keys в SQL коде таблиц. Но легче (да и полезнее) прописать foreign keys чем юзать для описания связей файл сторонней тулзы. А то придется еще и синхронизировать его все время.

А сама задумка мне кажется неплохая. Как более человекочитаемая альтернатива дампу - очень и очень.
 

Alexandre

PHPПенсионер
я разрабатывал нечто подобное, но в ввиде WEB службы (тоже пока на уровне недоработки).

Про запросы я умолчу...еще дорабатывается
У меня выгрузка сджоиных таблиц осуществляется не в ввиде одного рекордсета, а ввиде иерархического XML. я упорядочиваю рекордсет, и по изменению поля (параметра) связывания устанавливаю XML-иерархию:
Код:
<depNo>
  <id>1</id>
      <employes>
        <employee>
            <id>1</id>
            <name>Chernomyrdin</name>
        </employee>
        <employee>
            <id>2</id>
            <name>Zuganov</name>
        </employee>
      </employes>
  <id>2</id>
      <employes>
        <employee>
            <id>3</id>
            <name>Yuscenko</name>
        </employee>
        <employee>
            <id>4</id>
            <name>Yanukovich</name>
        </employee>
      </employes>
</depNo>
Пока рекурсии нет, только уровень сджоивания =3
если доделаю, то выложу
 

denver

?>Скриптер
Alexandre
А не будет тут дублирования? Что если Chernomyrdin будет входить в оба департамента? Это его в двух местах нужно будет править если что?
 

ivankrkrkr

Новичок
denver
Помимо схемы БД, в конфигурационном файле содержатся еще всякие опции, в том числе и набор остовных деревьев, задающих структуру XML (фактически его схему).
Насчет того, что бы выковыривать foreign keys из схемы - дело хорошее, это можно сделать, если прога найдет своих юзеров.
Но мастер и сейчас сам узнает какие таблицы в заданной БД и какие в них поля.
Alexandre
У меня тоже иерархический XML, даже больше того: мастер находит ВСЕ МАКСИМАЛЬНО ИЕРАРХИЧЕСКИЕ схемы XML. От вашей схемы будет отличаться, в частности, отсутствием элементов-оберток employees. XML будет примерно такой:
Код:
<depNo id="1">
   <employee id="1" name="Chernomyrdin"/>
   <employee id="2" name="Zuganov"/>
</depNo>
<depNo id="2">
   <employee id="3" name="Yuscenko"/>
   <employee id="4" name="Yanukovich"/>
</depNo>
 

denver

?>Скриптер
ivankrkrkr
А тот же самый вопрос тогда и к вам...

-~{}~ 06.12.06 10:39:

И еще:
выковыривать foreign keys из схемы - дело хорошее, это можно сделать, если прога найдет своих юзеров
Я бы сказал что тут следственный тупик. Если прога делает всё автоматом она быстрее найдет пользователей. Если нужно помучаться (и помнть о синхрониации) то кому она нужна? :)
 

ivankrkrkr

Новичок
denver
Если Chernomyrdin будет входить в оба отела - это означает что между отношением department и отношением employee смуществует связь многие-ко-многим, то есть существуют три олотношения:
department с атрибутом id
d-e с атрибутами dep_id, emp_id
employee с атрибутами id, name

Моя прога предложит два варианта XML:
Вариант1:
Код:
<department id="1">
   <d-e emp_id="1"/>
   <d-e emp_id="2"/>
</department>
<department id="2">
   <d-e emp_id="1"/>
   <d-e emp_id="3"/>
   <d-e emp_id="4"/>
</department>
<employee id="1" name="Chernomyrdin"/>
<employee id="2" name="Zuganov"/>
<employee id="3" name="Yuscenko"/>
<employee id="4" name="Yanukovich"/>


Вариант2:

Код:
<employee id="1" name="Chernomyrdin">
  <d-e dep_id="1"/>
  <d-e dep_id="2"/>
</employee>
<employee id="2" name="Zuganov">
  <d-e dep_id="1"/>
</employee>
<employee id="3" name="Yuscenko">
  <d-e dep_id="2"/>
</employee>
<employee id="4" name="Yanukovich">
  <d-e dep_id="2"/>
</employee>
<department id="1"/>
<department id="2"/>
-~{}~ 06.12.06 10:57:

Автор оригинала: denver
ivankrkrkr
А тот же самый вопрос тогда и к вам...

-~{}~ 06.12.06 10:39:

И еще:

Я бы сказал что тут следственный тупик. Если прога делает всё автоматом она быстрее найдет пользователей. Если нужно помучаться (и помнть о синхрониации) то кому она нужна? :)
Проблема то в том, что мой преобразоватль не автоматический, для каждой новой схемы БД, желательно выбрать одну из множеств максимально иерархичных схем XML, либо прога сама выберет первую попавшуюся. Так что помучаться придется все равно.
Кроме того, в MySQL не всегда описаны ключи связей.
 
Сверху