Mir/ConvertFromRusk

Материал из Etersoft wiki
Перейти к: навигация, поиск
Wackowiki-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была автоматически перемещена с old.wiki.etersoft.ru.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Перенос БД rusk в БД ИС "Мироздание"

Что бы далее были понятны обозначения, то запись с ":" и "." означает

имя_базы_данных:таблица_в_базе.имя_столбца_в_таблице


Перенос осуществляется во вновь созданную базу. База построена на основе

оговорённой структуры.


Система построена по алгоритму:

берём одну запись из rusk:article, выгружаем все данные по ней (с учётом

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

rusk:author, rusk:aid, rusk:dep, rusk:sd, rusk:source и rusk:style и с

учётом таблиц, связывающих данные, а именно: rusk:auar, rusk:araid,

rusk:sd(в ней содержаться данные по связи rusk:dep с rusk:sd),

rusk:article (поле rusk:article.idsource, связывающее с rusk:source, и

поле rusk:article.idstyle, связывающее с rusk:style)).


Появилось новое поле (как мы и оговаривали) mir:objects.oldid


После получения всех данных* по одной записи, мы загружаем в

mir:objects.oldid данные из rusk:article.idar, rusk:author.idau,

rusk:aid.idaid, rusk:source.idsource (т.е. создаём объекты с типами Статья

(mir:objects.type = 39), Личности (mir:objects.type = 2), Абстрактные

понятия (mir:objects.type = 33) и Корпорации (mir:objects.type = 19)

соответственно, если по ним имеются связи в rusk, которые отыскиваются в

таблицах, перечисленных выше).


  • - как получаются первоначальные данные описано ниже**


mir:objects.id формируется с помощью auto_increment т.е. автоматически.


ТЕКСТЫ:


В mir:texts.content загружаются данные из rusk:article.text, а в

mir:texts.object загружается mir:objects.id, для которого

mir:objects.oldid = rusk:article.idar (т.е. сначала мы с помощью

auto_increment генерируем mir:objects.id и только после этого переносим

остальное).


АТРИБУТЫ:


Далее, данные из rusk:dep.name выгружаются в mir:attributes.value и

присваивается значение mir:attridutes.type = 43 (Тема) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:article.idar.


Данные из rusk:sd.name выгружаются в mir:attributes.value и присваивается

значение mir:attridutes.type = 44 (Подтема) и mir:attributes.object =

mir:objects.id для которого mir:objects.oldid = rusk:article.idar.


Данные из rusk:source.name выгружаются в mir:attributes.value и

присваивается значение mir:attridutes.type = 33 (Абстрактные понятия) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:article.idsource.


Данные из rusk:author.firstname выгружаются в mir:attributes.value и

присваивается значение mir:attridutes.type = 11 (Имя) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:author.idau.


Данные из rusk:author.secondname выгружаются в mir:attributes.value и

присваивается значение mir:attridutes.type = 14 (Фамилия) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:author.idau.


Данные из rusk:author.lastname выгружаются в mir:attributes.value и

присваивается значение mir:attridutes.type = 13 (Отчество) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:author.idau.


Данные из rusk:author.info выгружаются в mir:attributes.value и

присваивается значение mir:attridutes.type = 7 (info из author) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:author.idau.


Данные из rusk:aid.name выгружаются в mir:attributes.value и присваивается

значение mir:attridutes.type = 34 (Название актуальной темы) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:aid.idaid.


Данные из rusk:style.name выгружаются в mir:attributes.value и

присваивается значение mir:attridutes.type = 42 (Жанр) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:article.idar.


Данные из rusk:article.name выгружаются в mir:attributes.value и

присваивается значение mir:attridutes.type = 40 (Название) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:article.idar.


Данные из rusk:article.subname выгружаются в mir:attributes.value и

присваивается значение mir:attridutes.type = 41 (Подзаголовок) и

mir:attributes.object = mir:objects.id для которого mir:objects.oldid =

rusk:article.idar.


Как отыскиваются первоначальные объекты (для внесения их в mir:objects)

для основных видов атрибутов (Статья (mir:objects.type = 39), Личности

(mir:objects.type = 2), Абстрактные понятия (mir:objects.type = 33) и

Корпорации (mir:objects.type = 19)) из rusk:article:


Делается запрос к rusk:article.

Далее, присваиваются переменные:

$idar = rusk:article.idar

$idsource = rusk:article.idsource


$idar и $idsource сразу же заносятся в mir:objects.oldid (соответственно

создаются объекты в mir:objects с соответствующими значениями

mir:objects.type = 39 и 19)


Делается запрос к rusk:auar, там отыскиваются все rusk:auar.idar = $idar и

по ним отыскиваются rusk:auar.idau и получается массив (в общем случае

соответствий idar – idau может быть несколько) $idau = rusk:auar.idau.

Создаются объекты в mir:objects с mir:objects.oldid = $idau и

mir:objects.type = 2 (Личности) (если их там нет – для этого делается

проверка на наличие этих объектов в базе по mir:objects.oldid)


Делается запрос к rusk:araid, там отыскиваются все rusk:araid.idar = $idar

и по ним отыскиваются rusk:araid.idaid и получается массив (в общем случае

соответствий idar – idaid может быть несколько) $idaid = rusk:araid.idaid.

Создаются объекты в mir:objects с mir:objects.oldid = $idau и

mir:objects.type = 33 (Абстрактные понятия) (если их там нет – для этого

делается проверка на наличие этих объектов в базе по mir:objects.oldid) **


СВЯЗИ:

Типы связей, которые мы можем получить из БД rusk следующие (в формате БД

mir):

id|name|parent_role|parent_type|offspring_type|

11|Дата публикации статьи.|
|1|39|

12|Один из авторов текста|Автор статьи|2|39|

21|Статья принадлежит корпорации|Источник статьи|19|39|

46|Идея, нация, которой посвящена публикация|Статья об идее|39|33|


Дата публикации статьи.


Выгружаем информацию из $insdate = rusk:article.insdate, Разбиваем

$insdate по символу “-” т.е. list($year, $month, $day) =

explode(“-”,$insdate)

Далее производим записи в:

mir:relations.offspring = mir:objects.id (получаемый для mir:objects.oldid

= rusk:article.idar)

(mir:relations.parent оставляем по умолчанию 0 т.к. для данного типа связи

родительского объекта в принципе быть не может) mir:relations.type = 11

mir:relations.year = $year

mir:relations.month = $month

mir:relations.day= $day


Один из авторов текста.


Делается запрос к rusk:auar, там отыскиваются все rusk:auar.idar = $idar и

по ним отыскиваются rusk:auar.idau и получается массив (в общем случае

соответствий idar – idau может быть несколько) $idau = rusk:auar.idau.

Далее

$parentrel = mir:objects.id, где mir:objects.oldid = $idau

$offspringrel = mir:objects.id, где mir:objects.oldid = $idar

Далее

mir:relations.parent = $parentrel

mir:relations.offspring = $offspringrel

mir:relations.type = 12

Остальные поля заполняются по умолчанию т.к. данных больше не получить


Статья принадлежит корпорации.


Делается запрос к rusk:article там отыскивается rusk:article.idar = $idar

и по нему отыскивается rusk:article.idsource и получается $idsource =

rusk:article.idsource.

Далее

$parentrel = mir:objects.id, где mir:objects.oldid = $idsource

$offspringrel = mir:objects.id, где mir:objects.oldid = $idar

Далее

mir:relations.parent = $parentrel

mir:relations.offspring = $offspringrel

mir:relations.type = 21

Остальные поля заполняются по умолчанию т.к. данных больше не получить


Идея, нация, которой посвящена публикация


Делается запрос к rusk:araid, там отыскиваются все rusk:araid.idar = $idar

и по ним отыскиваются rusk:araid.aid и получается массив (в общем случае

соответствий idar – idaid может быть несколько) $idaid = rusk:araid.aid.

Далее

$parentrel = mir:objects.id, где mir:objects.oldid = $idar

$offspringrel = mir:objects.id, где mir:objects.oldid = $idaid

Далее

mir:relations.parent = $parentrel

mir:relations.offspring = $offspringrel

mir:relations.type = 46

Остальные поля заполняются по умолчанию т.к. данных больше не получить



Последовательность действий для ОДНОЙ статьи такова: Выгрузка

первоначальных объектов

Присваивание атрибутов

Организация связей

Перенос текстов (в mir:texts)


Здесь необходимо учесть, что помимо перечисленных операций, нужно вводить

проверку на существование той или иной информации и связей в БД rusk, что

дополнительно усложняет и без того непростой алгоритм.


Нужно иметь в виду, что если, например, Источник есть в БД rusk, но с

ним не связана ни одна статья, то он в новую базу он переноситься не

будет. То же касается и Авторов, Тем, Подтем и пр.