Лучшее решение для хранения атрибутов?

Подскажите, как лучше сделать. Есть сервисы, а у сервисов есть функции. Например:

Поддерживаемые страны:
— Россия
— Беларусь
— и т.д

Сейчас реализовано только указывание значения функции (Россия, Беларусь). Есть необходимость группировать значения функций по группам (Поддерживаемые страны). Как это лучше сделать, особенно если учитывать, что в дальнейшем планирую прикрутить и фильтр на основе этих параметров?

Таблица:

services
--- id
--- slug
--- name
--- и т.д

Таблица:

features
--- id
--- name
--- и т.д

Таблица:

service_feature
--- id
--- service_id
--- feature_id

Сейчас реализация максимально упрощённая. Ничего лишнего. Требуется добавить как минимум группы особенностей. Собственно, как это лучше сделать, чтобы потом не наткнуться на подводные камни? В дальнейшем буду пытаться реализовать фильтр на основе этих параметров.

  1. Писать в эту же таблицу?
  2. Записывать в пивот таблицу?
  3. Сделать отдельно таблицу?

Хотелось бы найти золотую середину. Чтобы это было удобно, сильно не дублировала данные, но и не плодило множество запросов к базе. Желательно, чтобы это возможно было красиво вывести во View. Любые предложения?

Хотя бы так, но я думаю можно и лучше:

foreach ($service->features as $feature) {
    $feature->group_name

    foreach ($feature->values as $value) {
        $value->name
    }
}

Ответы (1 шт):

Автор решения: puffleeck

Чтобы это было удобно но и не плодило множество запросов к базе

мб отбросим бд и возьмём любой другой формат хранения данных?

попробуй писать например в json \ ini \ yaml \ cfg файл. та хоть xml. если не все то многие из них легко парсятся и генерируются php из коробки

+ если данных кот наплакал, лучший способ сэкономить запросы на их получение - получить всё за один запрос, а данных тут как раз строк по ~5 на язык:

[lang-id]
  id='ru'
  full-name='russian'
  icon-path='ru.png'
  coin='рубли'
  metric-sys='метрическая'
→ Ссылка