Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные 3-4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.72 Mб
Скачать

Действия бд: Update Первый пример

Первый пример имеет дело с простой задачей обновления существующих записей таблицы Person. Отображения созданы от источника XML в таблицу Person (корневую) .

Файлы, используемые в этом примере:

  • Altova_Hierarchical.xsd,

  • altova-cmpy.xml,  

  • altova.mdb.

Цель: обновить поля таблицы Person.

  1. Вставьте схему Altova_Hierarchical.xsd (и свяжите с файлом altova-cmpy.xml как экземпляром XML)

  2. Введите БД altova.mdb в отображение.

  1. Активизируйте значок (Auto connect matching children).

  2. Щелкните по узлу Person в компоненте XML источника и перетащите коннектор на узел Person БД. Убедитесь, что этот узел корневой.

  1. Щелкните ПКМ на Person и выберите Database Table Actions.

  2. Щелкните по выпадающему списку Table action и выберите Update if....

  3. Щелкните по выпадающему списку в строке с PK, выберите equal и щелкните ОК для подтверждения.

PK источника и адресата сравниваются используя оператор «equal». Если два ключа идентичны, то все отображаемые поля таблицы Person будут обновлены.

  1. Щелкните по вкладке Output, чтобы посмотреть на псевдо-SQL код, реализующий это отображение.

  2. Щелкните по значку (Run SQL-Script) на ПИ, чтобы запустить скрипт и вставить данные таблицы в БД. Если скрипт успешно выполняется, появляется сообщение. Щелкните ОК для подтверждения.

  3. Откройте БД altova.mdb.

Второй пример

Это более сложный пример, где обновление осуществляется в двух таблицах (Department и Person), а также добавляются новые записи в таблицу Person, которые существуют во входном XML файле. Корневая таблица, используемая в этом примере, Department.

Файлы, используемые в данном примере:

  • Altova_Hierarchical.xsd

  • altova-cmpy-extra.xml (является XML экземпляром схемы Altova_hierarchical.xsd)

  • altova.mdb.

Цель:

  • обновить записи поля Name таблицы Department;

  • обновить записи поля таблицы Person;

  • вставить новые записи в таблицу Person.

PK источника и адресата сравниваются, используя оператор «equal». Если два ключа идентичны, то отображаемые поля таблиц Department и Person будут обновлены. Если совпадение не происходит, то следует операция вставки (Insert Rest).

Действия таблицы Department:

  • Действия Update if... «equal» определены для PK, т.е. обновляется поле Name таблицы Department, если есть изменения.

Действия таблицы Person:

  • Действия Update if... «equal» определены для PK.

  • Действие Insert Rest определяется как второе действие таблицы, которое должно осуществляться, если первое сравнение Update if... выдает false.

Щелкните для добавления новой колонки действия таблицы.

Последовательность обработки таблицы Department

Таблица Department: результат Update if... – true:

  • Обновляет каждую запись таблицы Department, если ключи идентичны;

  • Если в БД существуют записи, для которых нет соответствующих записей в источнике, то эти записи остаются неизменными.

Таблица Department: результат Update if... – false, т.е. в источнике существуют записи, которых нет в целевой таблице:

  • В таблице не производится никаких изменений.

Последовательность обработки таблицы Person

Таблица Person: результат Update if... – true:

Если ключи источника и целевой таблицы идентичны, то:

  • Обновляется каждая запись таблицы Person, ключи которых идентичны;

  • Если запись существует в БД без соответствующих записей в источнике, то эти записи сохраняются и остаются без изменений.

Таблица Person: результат Update if... – false:

Ключи источника и адресата не идентичны, т.е. существуют ключи источника, которые не имеют соответствующих значений в целевой БД, результат Update if... – false, поэтому:

  • Выполняется действие следующей колонки Insert Rest....

  • Вставляются новые записи в таблицу Person, если они существуют.

В нашем случае добавляются две новые записи в департамент AdminPK которых равны 30 и 31.