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

Комбинации Update if... С удалением дочерних данных

Этот раздел описывает действия оператора Update if... в родительской таблице, комбинированное с каждым из возможных действий таблицы, определенных для связанных дочерних таблиц. Опуция «Delete data in child tables option» является активной во всех примерах, кроме одного. Вы можете использовать отображение предыдущего раздела.

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

  • Altova_Hierarchical.xsd

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

  • altova.mdb.

Update if.. на родительской таблице, Insert all... на дочерней таблице

Результат:

  • Обновляются данные родительской таблицы (записи Department);

  • Удаляются дочерние данные тех таблиц, которые удовлетворяют условию Update if... (записи Person);

Сохраняет существующие таблицы БД (проектируемые в данном случае), которые отсутствуют в XML файле.

  • Вставляет все записи Person из входного XML-документа, включая новые записи, которых еще не существует в БД.

Update if... на родительской таблице, Update if... на дочерней таблице

Результат:

  • Обновляются данные родительской таблицы (записи Department);

  • Удаляются дочерние данные тех таблиц, которые удовлетворяют условию Update if... (записи Person);

Сохраняет существующие таблицы БД (проектируемые в данном случае), которые отсутствуют в XML файле (отсутствуют ключи при сравнении по условию Update if...).

  • Условие Update if..., определенное для таблицы Person, терпит неудачу, так как по причине установки опции «Delete data in child tables» все записи в Person были удалены. Нет возможности сравнивать PK БД и XML, так как PK БД были удалены (записи не обновляются).

Update if... на родительской таблице, Delete if... на дочерней таблице (Опция «Delete data in child tables» - активна)

Результат:

  • Обновляются данные родительской таблицы (записи Department);

  • Удаляются дочерние данные (записи Person) из всех Департаментов, потому что активна опция «Delete data in child tables». Все записи Person удаляются для каждого Департамента, который имеет соответствующий PK в источнике XML. То есть, каждая запись Person, не имеющая соответствующий элемент в источнике XML удалена;

Сохраняет существующие таблицы БД (проектируемые в данном случае), которые отсутствуют в XML файле (отсутствуют ключи при сравнении по условию Update if...).

  • Данные дочерней таблицы (записи Person) удалены перед действием таблицы Delete if...; никакие записи не удалены.

Update if... на родительской таблице, Delete if... на дочерней таблице (Опция «Delete data in child tables» - активна)

Результат:

  • Обновляются данные родительской таблицы (записи Department);

Сохраняет существующие таблицы БД (проектируемые в данном случае), которые отсутствуют в XML файле (отсутствуют ключи при сравнении по условию Update if...).

  • Delete if... удаляет только те записи Person, для которых соответствующие PK существуют в источнике XML.

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

Чтобы увидеть пример, включающий дублированные узлы, операции Insert, Update и транзакции, откройте файл Customers_DB.mfd из папки ..\MapForceExamples. Этот пример показывает, как XML-схема и БД могут быть отображены на целевую БД.

В этом примере:

  • Отображение XML-схемы на БД:

Customers и Addresses существуют в целевой БД. Пример показывает, как XML схемы и БД источника могут быть отображены на целевую БД.

  • Отображение БД на БД:

Данные существуют в БД-источнике и вставляются в целевую БД. Целевая таблица (Customers) продублирована.

CustomerID для каждой записи создается снова, с начальным значением А1000.