Единственное, что я могу добавить к вашему решению, это то, что вы можете сначала попытаться найти точное совпадение в таблицах городов, а если его нет, затем присоединиться к псевдониму.Таким образом, вы можете пропустить некоторые довольно дорогие объединения.
Еще одна вещь, на которую стоит обратить внимание, - это решение с двумя таблицами может иметь проблемы с дублированными записями.Я говорю не об одних и тех же псевдонимах для разных городов (это можно проверить по уникальному столбцу), а об псевдонимах, соответствующих названиям городов.Пример этих «повторяющихся записей» сопровождается подробным объяснением:
Города
ID | Name
---------
1 | Los Angeles
2 | New York
Псевдонимы
ID | CityId | Name
------------------
1 | 1 | LA
2 | 2 | NY
3 | 2 | Los Angeles
Я знаю, что этого не должно случиться ... но вы знаете законы Мура :) Эти дубликаты перекрестных таблиц могут вызвать проблемы в справочной таблице (я полагаю, что вы используете их как средство поиска, чтобы «угадать», что на самом деле имеет город)попытался выбрать пользователя, когда он написал "LA").Но если пользователь написал «Лос-Анджелес», вам придется решить, стоит ли отдавать приоритет городу или псевдониму.Я знаю, что пример, который я привел, немного глуп, но как неамериканский гражданин я не могу привести лучшие примеры.Но есть много городов с множеством псевдонимов для каждого ... Я бы не стал рисковать:)
Проверка сначала таблицы города даст приоритет городу над равным псевдонимом для другого города.Или вы можете проверить, присутствует ли псевдоним для города в качестве названия города, прежде чем вставлять его.
Это все, что я могу придумать:)