Mir/ConvertFromRusk
Перенос БД 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, но с
ним не связана ни одна статья, то он в новую базу он переноситься не
будет. То же касается и Авторов, Тем, Подтем и пр.