Как грамотно удалять дублирующиеся строки/связи в базе данных?

Добрый день, подскажите пожалуйста, как более грамотно нужно решить мою задачу.

У меня имеется 5+ таблицы описывающие как бы инвентаризацию компьютерного парка в сети. Информация в таблицы поступает от сторонней программы с различной периодичностью, процесс вставки контролировать не могу, могу только уже с имеющейся информацией что то делать

Первая эта таблица REPORT в неё время от времени вставляются новые строки, т.е. каждая новая строка, это созданный новый отчёт
Вторая это CPU - таблица справочник процессоров использующиеся в компьютерном парке сети (значения уникальны)
И третья CPU_RELATION_REPORT - таблица для организации связи многие ко многим между REPORT и CPU
И аналогично 4 и 5 таблица, просто описывающие MOTHERBOARD

Ниже на скриншоте привел мою проблему, а именно в том, что отчеты снимаются с компьютеров при каждой их включении, и получается так, что смена комплектующих это явление достаточно редкое, и в результате чего порождаются очень много повторяющихся связей и отчётов как таковых, а смысла их хранить нет никакого

Так вот вопрос, в том, как грамотно от таких избавляться, какой такой хитрый нужно сделать запрос который найдёт строки отчётов у которых по связям одни и теже связи с таблицами CPU, MOTHERBOARD, ... (таких таблиц справочников на самом деле 10 и более) по сравнению с предыдущими строка в разрезе одного HOST и удалит их.
Т.е. по скриншотму ниже нужно удалить первую строку из REPORT и первые строки из CPU_RELATION_REPORT, MOTHERBOARD_RELATION_REPORT - тем самым оставив наиболее свежую и актуальную.

Т.е. нужно как то хитро за уникалить комбинации связей и отчётов избавившись от дубликатов

5e274aa778989650731071.png

p.s. причем надо признать, что дальше у меня ещё сложнее задача, есть такие связи которые ещё имеют дополнительные атрибуты, т.е. к таблие ..._RELATION_... подключается ещё одна таблица которая описывает какие то переменные именно у этой связи - и получается нужно ещё смотреть уникальность не только в разрезе REPORT -> RELATION -> CPU, а ещё и значений дополнительной таблицы подключенной к RELATION
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
начни с такого

также проще все это уникальное переносить в новые таблицы, а эти пусть пухнут и архив ежегодно
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Зависит от ценности этой информации. Если эту схему рассматривать как историю - то ничего удалять не надо. Просто перепишите ваши отчоты чтоб они делали GROUP BY и DISTINCT и просто игнорировали дубли.

Если вы - владелец этой системы и данных - то вы вправе поставить любой констрейнт уникальности так чтобы дубль в принципе невозможно было всунуть. Но это вопрос не технический а организационный.

Удалять - советчиков много. Но все они - безотвественные и если вам не стоит слушать советов по чистке данных именно здесь в тостере то вы рискуете какраз потерять нужные данные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы