pro-dev
@pro-dev

Как объединить дубликаты с заменой в дочерних таблицах?

Есть таблица City. Данные собирались из поля ввода. Соотвественно там появились дубляжи.

Например, Саратов и Саратов, Саратовская обл.

Для базы это разные города, но по факту одни и те же. Наверное, нужно было использовать какой-то помощник ввода. Но, к сожалению, такого не было сделано. И в базе бардак.

Хотелось бы убрать дубляжи безопасно, особенно интересует замена в дочерних таблицах. I’d использовал UUID. То есть не хотелось бы лезь в каждую дочернюю таблицу и запросном менять эти данные. Как это можно сделать в рамках одной Таблицы city?

1. Подскажите как это сделать?
2. Стоило ли использовать UUID для городов?
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@immelnikoff
Изучаю БД
1. В рамках одной таблицы city это никак не сделать, всё равно придется в дочерних таблицах переставлять значения в Foreign Key с дубликатов на правильный оставшийся город. Можно написать хранимую процедуру, которая будет принимать список дубликатов (а поиск дубликатов предварительно будет осуществляться, например, регуляркой), выбирать единственное верное значение (возможно (и лучше) с вашей подсказкой), во всех дочерних таблицах переставлять значения в Foreign Key на запись с этим значением, а затем удалит дубликаты из city.
2. UUID нужен для распределенных систем, где нет возможности выполнить проверку уникальности первичного ключа в рамках всей системы или если у вас к базе идет большое кол-во запросов на запись, настолько большое, что СУБД просто не успевает выполнить проверку уникальности первичного ключа для каждой записи. Но, как я понимаю, это не ваш случай. В данном случае вместо 16-байтового UUID лучше использовать автоинкрементное, целочисленное, беззнаковое, 2-байтное поле (city_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY). Зачем использовать 16-байтный первичный ключ, когда достаточно 2-байтного? Быстрее будут исполняться JOIN'ы, меньше операций ввода/вывода с диска, меньше требуемого места для хранения на диске.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
В базах данных с ручным вводом используются два механизма: Aliases, когда наименование используется независимо (отдельная таблица связи) и Variations, вариант написания для отдельных записей (отдельная таблица вариантов, хотя можно и в основной добавить поле Главный).
Ответ написан
Ваш ответ на вопрос

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

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