среда, 7 декабря 2022 г.

ddiff. Эффективное сравнение данных в разных БД

Как вы поступаете, когда нужно сравнить два больших набора данных? Скорее всего, первое, что вы делаете, – проверяете, одинаковое ли количество строк в каждом наборе и одинаковые ли суммы по некоторым столбцам. Можно еще сравнить количество уникальных значений в одних и тех же столбцах в двух наборах, минимальные и максимальные значения столбцов, сумму длин строк в строковых столбцах.

К сожалению, СУБД не предоставляют агрегатных функций для расчета хэша для набора строк. Поэтому для быстрого и грубого сравнения двух наборов данных приходится использовать возможности имеющихся агрегатных функций. Например:

среда, 28 сентября 2022 г.

Активирование и деактивирование логических сущностей в оперативной БД

Каждая логическая сущность предметной области

  • физически реализуется как строк(а|и) в таблиц(е|ах) реляционной БД,
  • имеет этап(ы) жизненного цикла, в течение котор(ого|ых) является действующей (активной, актуальной).

Например, запись справочника может быть активной в течение всего жизненного цикла – от ее создания до удаления, или до выведения системы из эксплуатации. А экземпляр мастер-данных (товар, партнер, сотрудник и т.д.), как правило, активен в течение некоторого периода времени, пока с ним работают бизнес-процессы (пока товар закупается или продается, пока партнер связан договорными отношениями, пока сотрудник не уволился, и т.д.).

четверг, 1 сентября 2022 г.

Информация

Что такое информация?

Два подхода к ответу на этот вопрос заключены в следующих известных высказываниях:

  • "Информация физична." Рольф Ландауэр.
  • "Это различие, порождающее различие." Грегори Бейтсон.

Вся информация во Вселенной имеет физический носитель, и все физические тела несут информацию – от элементарных частиц до жестких дисков, книг и систем космического масштаба.

среда, 3 августа 2022 г.

Логическая целостность данных, выгружаемых из БД

Задача: передавать данные из одной БД в другую, отсекая ненужные для интеграции данные – слишком старые или логически нерелевантные. При этом вся совокупность данных, выгруженных из БД-источника, должна оставаться логически целостной. Это значит,

  • недопустима выгрузка данных, не отвечающих критериям выгрузки,
  • недопустима невыгрузка данных, отвечающих критериям выгрузки, и
  • недопустима выгрузка данных, ссылающихся на данные, которые не выгружаются (ссылочная целостность).

Очевидно, что если выгружать все строки из выбранного набора таблиц БД, в котором обеспечена ссылочная целостность, то критерий выгрузки (все строки) не требует специальных анализа и реализации, а выгружаемые данные также будут ссылочно целостны.

Задача усложняется, когда нужно выгружать из таблиц только часть данных, – а такая задача возникает довольно часто. Попробуем ее решить.

вторник, 2 августа 2022 г.

Про пространство

Пространство - такое же абстрактное понятие, как время, и обязано своим существованием нашему способу познания (моделирования) мира.

Несомненно, что размеры одних физических объектов выражаются через размеры других физических объектов. Кто помнит советский мультик, где удав оказался длиной 38 попугаев?

Привычный нам "метр" когда-то был определен как одна сорокамиллионная часть длины меридиана Земли. Можно считать, что измеряя размеры и расстояния метрами, мы измеряем их относительно размеров Земли. Аналогично, морская миля – это расстояние, соответствующее одной минуте (одной шестидесятой части градуса) на земном меридиане. А такие исторические меры, как "локоть", "сажень", "фут" (ступня) происходят от размеров, связанных с человеческим телом. А "астрономическая единица" есть расстояние между Землей и Солнцем.

суббота, 9 июля 2022 г.

Какого ограничения целостности не хватает в SQL

Константного - когда значение в столбце, присвоенное insert'ом, нельзя изменить update'ом.

Столбцов, которые выиграют от такого ограничения, достаточно много - это, конечно, первичные ключи, и другие атрибуты, описывающие неотъемлемые неизменные свойства объектов, без которых объект утрачивает свою "природу" и перестает быть собой, например, тип товара, вид заказа и подобные. В приложении, с которым работают пользователи, такие поля доступны для заполнения при создании новой записи и недоступны для изменения при редактировании уже существующей.

Можно, конечно, создать триггер для update, который запретит изменение, если новое значение такого столбца отличается от старого.

четверг, 26 мая 2022 г.

Периодические таблицы (не химия)

Время от времени приходится работать с таблицами БД, где записи имеют период действия, заданный датой начала и датой конца (последнего дня) периода. Это может быть таблица с ценами товаров, где в разные периоды времени цена одного и того же товара разная. Или таблица с конфигурационными параметрами, где значения параметров разные в разные периоды времени. При этом в каждую конкретную дату у товара может быть только одна действующая цена, а у конфигурационного параметра только одно значение параметра. То есть, периоды действия записей с одним и тем же товаром или параметром не должны пересекаться.

В связи с этим при вставке или изменении записи нужно проверять, не приведет ли эта операция к появлению в таблице записей с пересекающимися периодами.