Тестовое задание.
База данных: PostgreSQL
Написать функцию для расчёта хеш суммы таблицы. На входе название таблицы, на выходе хеш сумма.
Функция должна удовлетворять следующим условиям:
- Хеш сумма таблицы - "сумма" хеш сумм всех строк таблицы
- Для пустой таблицы должна возвращать нулевое значение
- Хеш сумма равных строк должна быть одинаковой для одной таблицы
- Хеш сумма равных строк должна быть разной для разных таблиц
- Итоговая хеш сумма таблицы не должна зависеть от порядка суммирования хеш сумм строк
- На значение хеш суммы должно влиять каждое значение каждого поля в каждой строке таблицы
- Вклад отдельного поля в хеш сумму строки должен зависеть от типа поля
Написать тесты для проверки функции:
-
Работоспособность функции. Создание таблицы, содержащей все возможные типы полей; заполнение тестовыми данными; вывод хеш суммы таблицы.
-
Функция для нулевой таблицы. Создание таблицы без строк; вывод хеш суммы таблицы.
-
Функция для одинаковых данных в разных таблицах. Создание двух одинаковых таблиц; заполнение одинаковыми данными; вывод хеш сумм таблиц.
-
Влияние полей таблицы на результат. Создание таблицы; добавление одной строки; для всех полей таблицы по порядку: вывод хеш суммы, изменение поля, вывод хеш суммы, возврат исходного значения поля, вывод хеш суммы.
Сделать простейшую версию механизма репликации для одной таблицы.
Задача репликации - логгирование операций INSERT, UPDATE, DELETE в служебные таблицы.
Таблицы:
- Рабочая таблица - исходная таблица произвольной структуры.
- Таблица-копия - копия рабочей таблицы с добавлением дополнительного поля - уникального id.
- Очередь репликации - таблица с полями: id, номер транзакции, дата и время операции, название таблицы, id из таблицы-копии, тип операции.
Для рабочей таблицы нужно добавить триггеры, которые будут заполнять очередь репликации и таблицу-копию для каждой операции INSERT, UPDATE, DELETE.
Написать тесты для измерения скорости выполнения операций. Оценить в процентном соотношении, на сколько замедляется выполнение операций при добавлении триггеров.