私の意見では、これをデータベースの2つの別々のテーブルに配置する必要があると思います。
countries: id, ..., ...
countries_names: country_id, default (bool or enum('yes', 'no')), name
正しい名前とcountry_idをすばやく検索できるように、名前の列にインデックスを付けます。
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
ただし、最初の一致を探すときは、2つのテーブルを検索する必要があります。
編集:静的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;
}
}