Сопоставление имени с таблицей с альтернативными вариантами написания
У меня есть таблица с альтернативными вариантами написания названий стран:
Используйте имя, Alt1, Alt2, Alt3, Alt4
[...]
Багамы, "Багамы, The"
Боливия
Босния и Герцеговина, Босния и Герцеговина
[...]
(В некоторых странах существует 0 альтернативных вариантов написания, в других - до 4.)
Учитывая строку страны, какое с точки зрения производительности лучшее решение для возврата элемента в первом столбце? (В большинстве случаев, независимо от количества при альтернативном написании строка совпадает с первым столбцом и не обязательно должна совпадать с именем. В других случаях вероятность равномерно распределяется по столбцу 2-X.
(Желательно на JavaScript или PHP, спасибо:))
1 answers
На мой взгляд, я думаю, что вам следует поместить это в две отдельные таблицы в базе данных:
countries: id, ..., ...
countries_names: country_id, default (bool or enum('yes', 'no')), name
Поместите индекс в столбец имя, чтобы вы могли быстро найти правильное имя и идентификатор страны:
SELECT name FROM countries_names
WHERE default = 'yes'
AND country_id = (SELECT country_id FROM countries_names
WHERE name = 'search_string'
LIMIT 1)
LIMIT 1
(при желании вы можете добавить LEFT JOIN
, если вам нужна дополнительная информация из основной таблицы)
Другим вариантом было бы создать таблицу только для альтернативных имен:
countries: id, name, ..., ...
countries_alternative_names: country_id, name
Но вам придется искать в двух таблицах, когда вы ищете первую совпадение.
РЕДАКТИРОВАТЬ: Статическое решение JavaScript:
function getCountryName(var name) {
switch (name) {
case "Bahamas" :
case "The Bahamas" :
return "Bahamas";
case "Bolivia" :
return "Bolivia";
case "Bosnia and Herzegovina" :
case "Bosnia & Herzegovina" :
return "Bosnia and Herzegovina"
// ...
default :
return null;
}
}