Если для универа, тут нужна совсем бредовая оптимизация которая впринципе не нужна.
Язык и валюта могут быть одинаковые у разных стран, их можно вынести в другие таблицы, и связвать по id нужную страну и параметр (язык/валюта). Думаю с этим методом вы знакомы.
Можно чуть больше извратиться, и реализовать частично EAV модель(
Wikipedia,
Habrahabr).
То есть в вашем случае так:
таблица countries. id - ид страны.
Таблица countries_field_names - хранит названия атрибутов стран(полей).
структура: fd_name_id [id]: int. fd_name: varchar(128). (fd_name - field_name)
Таблица countries_data - хранит данные, чистый текст
структура: data_id [id]: int. data: text.
Таблица countries_data_linking - связывает 3 предыдущих таблицы.
структура: dl_id [id]: int. country: int (страна). fd_name_id: int (countries_field_names.fd_name_id). data_id: int (countries_data.data_id)
Теперь что бы получить страну с нужными полями нам нужен такой запрос:
Код:
SELECT c.id id, cd.data text, fd.name title
FROM countries as c, countries_field_names as fd, countries_data cd, countries_data_linking cdl
WHERE c.id = cdl.country AND cd.data_id = cdl.data_id AND fd.fd_name_id = cdl.fd_name_id AND
c.id = 5
В конце можно добавить ORDER и добавить соответствующий атрибут в одну из таблиц(countries_data_linking если порядок полей индивидуальный для всех полей или в countries_data, если общий для всех) Я тут намеренно пропустил пару пунктов, но думаю в ходе работы вы с ними разберетесь, и лучше поймете суть.
Можно конечно возразить, что для такого простого сайта это неуместно, но это же не для реально работающего проекта :happy:
А вам за это будет плюс(хотя зависит от преподавателя, нужно сразу разъяснить, что в реальном таком простом преокте, проще использовать одну табличную структуру проекта)
p.s забыл добавить, сделайте все ваши ID не только int но еще и unsigned. Это увеличит лимит на записи в два раза. Вряд ли количество записей достигнет такого размера, но логичнее было бы сделать так, это тоже плюс.