Вопрос по части производительности и использование индексов.
Есть таблица FILMS (id, title, rating)
У фильмов есть 2 типа фильтров: жанр и страна; Соостветсвенно фильм может иметь несколько жанров и несклько стран. При фильтрации должно искать фильмы где есть хоть одно совпадение по паре жанр и страна.
Отсюда 2 варианта реализации структуры:
1) Создать 2 таблицы GENRE и COUNTRY и 2 промежуточные таблицы. Если задавать поиск зная ИД стран и жанров, и искать только по промежуточной таблице:
SELECT * FORM films f
JOIN genre_film g ON(g.film_id = f.id ) WHERE g.genre_id IN(1,2,3)
JOIN country_film c ON(c.film_id = f.id ) WHERE c.country_id IN(1,2,3)
2) Сделать одну таблицу PARAMS со столбцом TYPE в котором будет указан какого рода это параметр (страна или жанр) и 1й промежуточной таблицей. Тут возможно еще будет уместным составной индекс по полям film_id и type.
Тут тоже поиск только про промежуточной таблице.
SELECT * FORM films f
JOIN param_film p ON(p.film_id = f.id )
WHERE (p.param_id IN(1,2,3) AND p.type = `country`) AND (p.param_id IN(4,5,6) AND p.type = `genre`)
колонка TYPE будет не в промежуточной таблице, указал ее в запросе для упрощения примера, т.к фильтре вероятно будет задействована основная таблица с параметрами.