Алгоритм виконання операцій з таблицями та полями в базі даних

1. Видалення таблиць

Крок I. Аналіз
  1. Визначити таблиці, які необхідно видалити (включаючи історичні таблиці).

  2. Визначити чи є в інших таблицях поля з foreign keys, що посилаються на таблиці, які необхідно видалити.

  3. Визначити Search Conditions, які створені для таблиць з перших двох пунктів.

  4. Визначити Analytics Views, в яких використовуються поля таблиць з перших двох пунктів.

Крок II. Видалення

Створити changeSet-и для:

  • видалення Analytics Views;

  • видалення Search Conditions;

  • видалення таблиць та історичних таблиць (для перших двох пунктів в першому кроці).

Крок III. Додавання

Створити changeSet-и для:

  • створення таблиць з яких видалили поля з foreign keys, що посилались на видалені таблиці;

  • створення Search Conditions для таблиць, в яких видалили поля з foreign keys, що посилалися на таблиці, які видалили;

  • створення Analytics Views для таблиць, в яких видалили поля з foreign keys, що посилалися на таблиці, які видалили.

2. Додавання таблиць

Крок I. Аналіз
  1. Визначити таблиці, які необхідно додати.

  2. Визначити інші таблиці, що будуть посилатися на таблиці (нові поля з foreign keys), які необхідно додати.

  3. Визначити Search Conditions, які треба створити для нових таблиць та Search Conditions, в які треба додати поля з foreign keys на нові таблиці.

  4. Визначити Analytics Views, в яких будуть використовуватись поля нових таблиць та Analytics Views, в яких будуть використовуватись поля з foreign keys на нові таблиці.

Крок II. Видалення

Створити changeSet-и для:

  • видалення наявних Search Conditions, в яких будуть використовуватись поля з foreign keys на нові таблиці (якщо необхідні зміни в наявних Search Conditions);

  • видалення наявних Analytics Views, в яких будуть використовуватись поля з foreign keys на нові таблиці (якщо необхідні зміни в наявних Analytics Views).

Крок III. Додавання

Створити changeSet-и для:

  • створення таблиць (історичні таблиці створюються автоматично);

  • додавання полів з foreign keys на додані таблиці в наявні таблиці;

  • створення Search Conditions для доданих таблиць та створення Search Conditions для таблиць, в які додали поля з foreign keys на додані таблиці;

  • створення Analytics Views для доданих таблиць та створення Analytics Views для таблиць, в які додали поля з foreign keys на додані таблиці.

3. Додавання полів в таблицях

Крок I. Аналіз
  1. Визначити таблиці, в які необхідно додати поля.

  2. Визначити інші таблиці, в яких додані поля будуть використані як foreign keys.

  3. Визначити Search Conditions, що створені для таблиць, в які необхідно додати поля, та Search Conditions, де додані поля будуть використані як foreign keys.

  4. Визначити Analytics Views, в яких використовуються поля таблиць, в які необхідно додати поля, та Analytics Views, в яких додані поля будуть використані як foreign keys.

Крок II. Видалення

Створити changeSet-и для:

  • видалення Search Conditions для таблиць, в які будуть додані поля, та Search Conditions, в яких додані поля будуть використані як foreign keys (якщо необхідні зміни в наявних Search Conditions_);

    <changeSet author="registry owner" id="drop search document_type">
        <ext:dropSearchCondition name="document_type"/>
    </changeSet>
  • видалення Analytics Views для таблиць, в яких будуть використовуватись додані поля та Analytics Views, в яких додані поля будуть використані як foreign keys (якщо необхідні зміни в наявних Analytics Views).

    <changeSet author="registry owner" id="drop report_table">
        <ext:dropAnalyticsView name="report_table"/>
    </changeSet>
Крок III. Додавання

Створити changeSet-и для:

  • додавання полів в таблиці;

    <changeSet id="add new columns to staff" author="registry owner">
        <ext:addColumn tableName="staff" ext:historyFlag="true">
            <column name="order_date" type="DATE" remarks="Дата наказу"/>
        </ext:addColumn>
    </changeSet>
  • додавання полів таблиць, в яких додані поля будуть використані як foreign keys;

    <changeSet id="add column" author="registry owner">
        <ext:addColumn tableName="address" ext:historyFlag="true">
            <column name="region_id" type="UUID" remarks="Місце проживання - область">
                <constraints nullable="true"
                             foreignKeyName="fk_region_id"
                             referencedTableName="katottg_dictionary"
                             referencedColumnNames="katottg_id"/>
            </column>
        </ext:addColumn>
    </changeSet>
  • створення Search Conditions для таблиць, в які додали поля, та Search Conditions, в яких додані поля будуть використані як foreign keys (якщо необхідні зміни в наявних Search Conditions);

    <changeSet author="registry owner" id="create SC edu-by-external-id view">
       <ext:createSearchCondition name="edu_by_external_id" limit="all">
           <ext:table name="edu">
               <ext:column name="edu_id"/>
    …
               <ext:column name="edu_id_external" searchType="equal"/>
           </ext:table>
       </ext:createSearchCondition>
    </changeSet>
  • створення Analytics Views для таблиць, в яких будуть використовуватись додані поля, та Analytics Views, в яких додані поля будуть використані як foreign keys (якщо необхідні зміни в наявних Analytics Views).

    <changeSet author="registry_owner" id="full_expose_transaction table_v2">
       <ext:createAnalyticsView name="exposed_transaction_table_v2">
           <ext:table name="transaction" alias="transaction">
               <ext:column name="transaction_id"/>
               …
               <ext:column name="order_id"/>
           </ext:table>
       </ext:createAnalyticsView>
    </changeSet>

4. Видалення полів в таблицях

Не можна видаляти поля таблиці, в яких зберігається primary key.
Крок I. Аналіз
  1. Визначити поля таблиць, які необхідно видалити.

  2. Визначити таблиці, в яких поля, що видаляються, використані як foreign keys.

  3. Визначити Search Conditions, які використовують поля цих таблиць, та Search Conditions, в яких ці поля використовуються як foreign keys.

  4. Визначити Analytics Views, в яких використовуються поля цих таблиць, та Analytics Views, в яких ці поля використані як foreign keys.

Крок II. Видалення

Створити changeSet-и для:

  • видалення Search Conditions з полями таблиць, які необхідно видалити, та Search Conditions, в яких ці поля використані як foreign keys;

  • видалення Analytics Views з полями таблиць, які необхідно видалити, та Analytics Views, в яких ці поля використані як foreign keys;

  • видалення полів таблиць, в яких поля, що видаляються, використані як foreign keys;

  • видалення полів таблиць.

Крок III. Додавання

Створити changeSet-и для:

  • створення Search Conditions для таблиць, в яких видалили поля, та Search Conditions, в яких видалені поля використовувалися як foreign keys,

  • створення Analytics Views для таблиць, в яких видалили поля, та Analytics Views, в яких видалені поля використовувалися як foreign keys.

5. Зміна формату полів у таблицях

Крок I. Аналіз

Визначити поля таблиць, в яких необхідно змінити формат.

Крок II. Змінення

Створити changeSet-и для:

  • змінення форматів полів таблиць.

    <changeSet  author="registry owner" id="modifyDataType-example">
        <modifyDataType
            columnName="id"
            newDataType="int"
            tableName="person"/>
    </changeSet>
    При зміні формату полів не змінюється їх назва. Якщо немає блоків з логічного порівняння даних, то вносити зміни до Analytics Views та Search Conditions необов’язково. Якщо є блоки з логічним порівнянням даних, то треба вносити зміни до тих блоків (видалити старі Search Conditions, Analytics Views та створити нові після зміни формату полів). Інакше можливі помилки при виконанні збірки регламенту.