Сопоставление имен с таблицей с альтернативным написанием - PullRequest
2 голосов
/ 07 марта 2011

У меня есть таблица с альтернативным написанием названий стран:

Использовать имя, Alt1, Alt2, Alt3, Alt4
[...]
Багамские острова "Багамские Острова, "
Боливия
Босния и Герцеговина, Босния и Герцеговина
[...]

(В некоторых странах 0 альтернативных вариантов написания, другие - до 4.)

С учетом строки страны, что является наилучшим решением с точки зрения производительности для возврата элемента в первом столбце?(В большинстве случаев, независимо от количества альтернативных вариантов написания, строка соответствует первому столбцу и не должна соответствовать имени. В других случаях вероятность равномерно распределяется по столбцу 2-X.

(желательно на JavaScript или PHP, спасибо :))

1 Ответ

1 голос
/ 07 марта 2011

По моему мнению, вы должны поместить это в две отдельные таблицы в базе данных:

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;
  }
}
...