Как получить разницу одной и той же таблицы базы данных раз в час?
Добрый день, подскажите пожалуйста.
Имеется база данных MariaDB, в ней есть база в которой есть таблица employees
Эта таблица содержит список всех сотрудников, структура её примерно из 10 полей, но для примера можно взять например только два, это PERSONNEL_NUMBER(табельный номер) и FULL_NAME (полное имя)
Таблица примерно на 15 000 строк, и она используется для синхронизации различных приложений с сотрудниками организации, т.е. приложения из неё берут информации, однако у этой таблицы есть один минус, у неё нет (и его никак не сделать, примем как должное) поле CHANGED_DATE, т.е. дата когда сотрудник был изменен (т.е. когда его любое поле было изменено) и потому, сторонним приложениям приходится пробегаться при синхронизации по всем записям.
Вопрос, как можно сделать так, чтобы кроме этой таблицы, периодически, например раз в час, создавалась такая же, либо может некое views, которое содержало бы в себе точно такую же информацию, только плюс ещё одну колонку CHANGED_DATE, а значение её заполнялось бы исходя из сравнения состояний.
Т.е. как я примерно вижу, есть оригинал таблица и есть её копия clone_employees, далее каждый час каким то способ они сравниваются, и все строки которые не совпадают вставляются в третью таблицу diff_employees, в которой также есть поле CHANGED_DATE куда прописывается текущее время
После чего содержимое оригинальной таблицы копируется в clone_employees (чтобы так сказать запомнить текущее состояние, для следующего сравнения)
Возможно способ очень странный, но увы есть только одна оригинальная таблица с которой можно работать, и в ней изначально не возможно по какой то логике ещё хранить дату последнего изменения
Такой костыль возникает потому что, по идее таблица оригинал это даже не таблица, это views так как это все сводная информация о сотрудниках и за каждый слой информации отвечает свое приложение грубо говоря, потому они как бы и не хранятся все в одной таблице, а собираются из разных.
Не надо тебе делать полную копию таблицы. По какой логике нельзя поле добавить - я объясню. Чуваки, которые перед тобой работали, пользовались select * from employees... и вставляли это куда ни попадя. Поэтому сейчас если ты еще одно поле добавишь - упадет все, где есть вставка всех полей.
Так вот, тебе нужна таблица-спутник. Четыре поля. Id этой таблицы, Id_employeer, Change_Date, Change_type.
Далее ловишь изменение или добавление основной таблицы и в таблицу-спутник вставляешь данные, какой работник изменен и что с ним стало в Change_type: Insert, Update, Delete. Можно еще Id того, кто это изменение сделал.