Вот так я бы быстро решил это
Создайте дополнительную таблицу для хранения пропущенных городов, которая будет представлена пользователями
CREATE TABLE `cities_users` (
`id` int,
`city_name` varchar(100),
`added_by` varchar(100),
`added_TS` DATETIME DEFAULT CURRENT_TIMESTAMP
);
Создать ВИДобъедините две таблицы городов:
CREATE VIEW all_cities AS
SELECT id, city_name FROM `cities`
UNION ALL
SELECT id, city_name FROM `cities_users`;
Всякий раз, когда пользователь регистрируется, вы запрашиваете VIEW, чтобы проверить, существует ли город пользователя.Таким образом, вы будете знать, существует ли город в вашей исходной таблице ИЛИ города, представленные пользователями.
Если нет, вы ВСТАВЛЯЕТЕ новый город в таблицу cities_users
(вместе с пользователем, который его создал дляцели ведения журнала).
Вы должны правильно сгенерировать уникальный идентификатор, то есть тот, который никогда не может существовать в таблице city .Вы можете сделать это различными способами, вот небольшой пример: возьмите последний идентификатор в таблице towns_users и добавьте к нему 1 миллион.Ваши идентификаторы towns_users будут выглядеть следующим образом: 1000001, 1000002, 1000003
И, наконец, вы вставите сгенерированный идентификатор towns_users в таблицу пользователей.
Наличие отдельной таблицы для пользовательских вводов должно помочь вам сохранитьочистка базы данных:
- Ваша исходная таблица городов остается полностью неизменной
- Вы всегда будете в курсе новых городов, добавленных кем и когда, и вы можете создать небольшой интерфейс дляпросмотрите и управляйте этим.
- Ваши пользователи работают над тем, чтобы вы завершили создание базы данных.