|
Помогите спроектировать структуру для работы с "дублями"
|
|||
---|---|---|---|
#18+
Есть таблица с набором полей и с уникальным ключем ID для каждой записи. Есть входящий поток данных от парсинга, из которого записи с новым ID добавляются а записи с уже существующими ID заменяются (записи со старыми значениями переносятся в архивную таблицу для возможности просмотра изменений во времени). Теперь о проблеме: в основной таблице существуют записи с разными ID но представляющие по сути дубли друг друга, т.е. отображающие одну и туже сущность. У них в той или иной мере могут различаться значения некоторых полей но они подразумевают один и тот же объект-сущность. Часть таких дублей (где полностью совпадают значения в основных полях и различия могут быть в малозначимых второстепенных) я могу распознать автоматически и произвести с ними какие то действия (пометить общим индексом например) еще на этапе добавления в базу. Другая часть, которая имеет различия в более значимых полях, выявляется уже на этапе пользовательской работы с данными, глазами, и действия с ними (таже пометка общим индексом) будут производиться уже на этом этапе ручной работы. В пользовательском интерфейсе мне нужно выводить записи с схлопнутыми (все записи с одним дублем в одну) дублями, иметь возможность делать пометки и комментарии к записям (комментарий к одной записи дубля должен распространятся и на остальные, т.е. записи будут делаться в отдельной таблице, связанной с основной один-ко-многим) и иметь удобную в пользовании возможность схлопывать найденные дубли (как добавлять новую запись к уже имеющейся группе аналогичных дублей так и создавать новую группу дублей из 2-х или нескольких записей). Раздумываю как лучше организовать хранение и работу в рамках описанной задачи. Решение в лоб - дублирую столбец уникального ID (основной столбец так и остается с уникальными ID, по ним разбираемся со входящим потоком от парсинга) и в нем (назовем его ID_дубль) у дублей одной группы уникальные ID заменяю на один общий. По этому ID_дубль связываю таблицу с результатами парсинга с таблицей, в которой будут храниться пользовательские данные (комментарии, отметки, все то что вносится в ручную). В пользовательском интерфейсе таблицу со схлопнутыми дублями получаю запросом с группировкой. Нет ли более изящного решения подобной задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2021, 14:17 |
|
Помогите спроектировать структуру для работы с "дублями"
|
|||
---|---|---|---|
#18+
То, что ты описываешь, фактически самый обычный parent-child. Но, поскольку плодить деревья в рабочей таблице под такую задачу неразумно, лучше рассматривать двутабличную схему группирования, т.е. создать отдельную таблицу фэйковых групп и поле принадлежности группе в рабочей таблице. По сравнению с простым полем, как ты хочешь, такая схема уберёт проблему с генерацией значения для поля принадлежности группе при создании новой группы. А пустые группы почистить - плёвое дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2021, 16:06 |
|
Помогите спроектировать структуру для работы с "дублями"
|
|||
---|---|---|---|
#18+
Если я правильно понял, поле принадлежности группе в рабочей таблице будет иметь значение id группы если запись входит в группу и "пусто" если не входит (не имеет дублей)? Но тогда непонятно как дальше его использовать, т.е. прилинковывать таблицу с пользовательскими данными и отбирать записи со схлопнутыми дублями для вывода в интерфейсе. В общем, наверно я просто не понял мысль. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2021, 17:37 |
|
Помогите спроектировать структуру для работы с "дублями"
|
|||
---|---|---|---|
#18+
Yup Если я правильно понял, поле принадлежности группе в рабочей таблице будет иметь значение id группы если запись входит в группу и "пусто" если не входит (не имеет дублей)? Да. Yup непонятно как дальше его использовать, т.е. прилинковывать таблицу с пользовательскими данными и отбирать записи со схлопнутыми дублями для вывода в интерфейсе. Нет. При выборке таблица групп вообще не нужна. Просто поле с номером группы будет самым первым в условии сортировки, либо будет входить в выражение группировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2021, 19:33 |
|
|
start [/forum/topic.php?fid=45&fpage=3&tid=1609534]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
158ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
others: | 27ms |
total: | 306ms |
0 / 0 |