@SANTA2112

Структура базы данных и запрос к ней?

Есть простая база данных фильмов. У меня есть фильм, у него есть имя, описание, актеры(может быть много) и жанры(может быть много). Не знаю как лучше сделать структуру. Набросал такую структуру:

1 таблица: films
id, name, description

2 таблица: genres
id, name

3 таблица: actors
id, name

4 таблица: films_genres
film(id), genre(id)

5 таблица: films_actors
film(id), actor(id)

Правильная ли такая структура и как правильнее делать запрос на получение фильма.
Я так понимаю будет 3 запроса на получение фильма, его жанров и актеров?
А как делать запросы, если мне нужно получить много фильмов?
Подскажите пожалуйста.
  • Вопрос задан
  • 850 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Можно вытаскивать и одним запросом.

SELECT film.id, film.name, film.descrioption,
  actor.id actor_id, actor.name actor_name,
  genre.id genre_id, genre.name genre_name
FROM films
  LEFT JOIN films_genres ON film.id = films_genres.film_id
  LEFT JOIN genre ON genre.id = films_genres.genre_id
  LEFT JOIN films_actors ON film.id = films_actors.film_id
  LEFT JOIN actor ON actor.id = films_actors.actor_id
WHERE films_actors.actor_id IN (734, 44) -- актеры такие-то
  AND films_genres.genre_id = 3 -- жанр такой-то
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@heyMyWay
Можно вообще хранить json в поле у фильма. Например, хранить актёров и жанры. Это можно делать, если не будешь делать поиск по актёрам и жанрам, а лишь нужны только для отображения.
И тогда всё сводится к одной таблице.

А так да, сначала получил фильмы, потом получил всех сразу ко всем фильмам актёров и жанров. Тогда 3 запроса.

UPD: опять же можно в любом случае хранить всё в json, а если и нужен поиск по по жанрам и актёрам, то уже искать из таблиц, которые ты создал. Это нужно если уж нужна очень быстрая выдача, когда записей уже очень много.
Например, у фейсбука есть список диалогов и всё для отображения хранится в таблице условно в Conversation и там все данные, т.е. почти нет или может вообще нет запросов в другие таблицы. Это сильно ускоряет приложение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы