Управління структурами таблиць моделі даних реєстру

Опис проблеми

Частиною процесу створення/редагування регламенту реєстру є опис моделі даних реєстру. Поточний підхід передбачає використання лише файлів конфігурації для створення моделі даних реєстру. Користувач повинен використовувати liquibase changelog формат опису моделі даних, що де-факто є описом структури БД.

Частиною web-based адмін порталу редагування версії регламенту реєстру є редагування структури БД. Необхідно розробити технічний дизайн підсистеми створення моделі даних реєстру.

Ключові пункти проблеми

  • Одночасна робота декількох користувачів з однією версією-кандидатом регламенту

  • Збереження механізму забезпечення існуючого життєвого циклу регламенту версій (gerrit, jenkins)

  • Збереження технічного інструменту відтворення структури БД (liquibase)

  • Збереження механізму зміни регламенту шляхом зміни конфігураційних файлів в git

  • Забезпечення синхронізації між змінами з адмін порталу і змінами внесеними через Gerrit

  • Створення GUI based механізму зміни регламенту реєстру

Базові сценарії використання

  • Створення нової версії регламенту реєстру

  • Виконання дозволені CRUD like операцій з моделлю данних, що описані нижче

  • Перегляд всієї історії змін моделі даних регламенту реєстру

  • Перегляд історії змін моделі даних регламенту реєстру всередині версії-кандидату

  • Збереження змін в моделі даних до версії-кандидату

  • Інспекція версії-кандидату регламенту реєстру

Out of scope

  • Робота з типами даних

  • Робота з аналітичними представленнями

  • Вирішення конфліктів з використанням адмінпорталу менеджменту регламенту реєстру

Принципи роботи зі змінами в БД

Існуючий механізм роботи зі змінами в БД

Існуючий механізм роботи зі змінами в БД базуєтсья на двух принципах:

  • Cтворення liquibase changeset

  • Збереження liquibase changeset в git

tables management luqibase current flow

Розширений механізм роботи зі змінами в БД

Пропонується розширити існуючий механізм роботи зі змінами БД шляхом додавання DataModelSnapshot документу в git репозиторій, котрий буде відображати стан моделі даних.

tables management luqibase extended flow

Основні концепції

  • DataModelSnapshot model - JSON документи, що відображають стан моделі даних регламенту реєстру

  • Diff Document - документ, що відображає різницю між двома станами моделі даних регламенту реєстру

  • History Document - документ, що відображає історію змін мастер версії або версії- кандидату регламенту реєстру

Описання структури DataModelSnapshot

Вищенаведена модель даних була отримана в результаті аналізу існуючого стану lqiuibase changelogs (включно з аналізом функціональності custom liquibase тегів)
db-tables-management-er

Опис структури файлів на файловій системі

DataModelSnapshot model має наступну структуру файлів на файловій системі

tables management datamodel filestructure
  • Перелік таблиць визначається переліком файлів на файловій системі

  • Ім’я файлу таблиць відповідає назві таблиці та має наступний вигляд: <table-name>.json

  • Ім’я файлу role permission відповідає назві id role permission та має наступний вигляд: <role-id>.json

Тимчасова структура файлів на файловій системі (first iteration)

tables management datamodel filestructure simple

Опис DataModelSnapshot формату даних

В якості технічного інструменту опису структури даних DataModelSnapshot використовується Json формат. В якості опису контракту документу використовується JsonSchema

Допустимі операції з об’єктами доменної моделі

Нижче наведена інформація базується на існуючому контракті по роботі з моделлю даних регламенту реєстру. В контексті даної проблеми цей контракт є джерелом функціональних можливостей, що мають бути взяті до уваги при розробці технічного дизайну.

Допустимі операції відносно моделі даних регламенту реєстру діляться на 2 групи:

  • Обмежена можливість змін моделі даних

  • Повна можливість змін моделі даних

Об’єкти моделі даних, що не були інтегровані в мастер-версію регламенту реєстру, можуть бути змінені будь-яким чином не зважаючи на нижче вказані обмеження.

Об’єкти моделі даних, що ввійшли до master версії snapshot data model мають обмежені можливості для редагування. Таблиці, що були створені в CandidateSnapshot не мають ніяких обмежень відносно можливостей редагування.

Допустимі операції з об’єктами доменної моделі, що ввійшли в попередній реліз

Назва entity Create Update Delete

Table

Y

Y

N

Column

Y

Y

N

Index

Y

Y

Y

Constraint

Y

Y

Y

ForeignKey

Y

Y

Y

AccessRule

Y

Y

Y

Описання атрибутів доменної моделі

Table

Назва Тип Read only Описання

Name

string

true

HistoricalFlag

boolean

true

ObjectReference

true

Description

String

false

Column

Назва

Тип

Read only

Описання

Name

string

true

Description

string

false

Type

enum[clarify types]

true

DefaultValue

object

false

NotNull

boolean

true

Unique

boolean

true

PrimaryKey

boolean

true

Index

Назва

Тип

Read only

Описання

Name

string

true

Columns

[{ name string sorting: enum[ASC, DESC, NONE] }]

false

Constraint

Назва

Тип

Read only

Описання

Name

string

true

Columns

array[columnName]

true

ForeignKey

Назва

Тип

Read only

Описання

Name

string

true

SourceColumnName

string

true

TargetTable

string

true

TargetColumnName

string

true

AccessRule

Назва

Тип

Read only

Описання

ColumnName

string

true

Actions

enum[CREATE, READ, UPDATE, DELETE]

false

RoleNames

[roleName: string]

false

Загальні принципи реалізації

  • Механізм дозволяє проводити CRUD операції відносно об’єктів доменної моделі

  • Одночасне редагування регламенту реєстру як з використанням адмін порталу, так і шляхом зміни конфігураційних файлів в репозиторії регламенту

  • Стан структури БД і метаданих повністю відображений DataModelSnapshot документами

  • Структура DataModelSnapshot json документів описана за допомогою JSONSchema

  • DataModelSnapshot документи (з JSONSchema) мають бути використані як структура обміну даними на рівні RestAPI між Front-End додатком та Backend сервісами

  • Вирішення конфліктів при редагуванні регламенту реєстру з використанням адмінпорталу необхідний лише на рівні DataModelSnapshot документів

  • Підтримання консистентними DataModelSnapshot моделі та liquibase changelog

  • Процес синхронізації DataModelSnapshot моделі по liquibase changelog є ідемпотентним

  • Зміни внесені через адміністративний портал знаходяться в окремому liquibase changeset. Ідентифікатор версії-кандидату є частиною liquibase changeset id атрибуту.

Опис технічного рішення

Container

tables management c4 container

Admin portal API container

tables management c4 apiContainer

CICD container

tables management c4 cicd container

Сценарій взаємодії компонентів системи під час редагування структури таблиць регламенту реєстру

db-tables-management-sequence

Загальна діаграма взаємодії компонентів системи під час редагування моделі даних регламенту реєстру

tables management component structure