Как лучше реализовать список enums в MySQL?
у меня есть фильмы у которых есть жанры в виде ENUM. Жанров у фильма естественно может быть несколько. Как лучше это реализовать в MySQL ?
Сейчас это у меня выглядит так -

Ответы (2 шт):
Таблица Genre с колонкой id и какими нужно другими колонками (название и т.п.). Одна строка - один enum.
Таблица MovieGenre с колонкой id и колонками move_id, genre_id, которые ссылаются на id в Movie и Genre, соответственно.
Не вполне ясно, что вы имеете в виду под "Как лучше это реализовать в MySQL" и к чему тут теги java и hibernate.
Но я бы рекомендовал вам поступить следующим образом. Таблицу Movies оставьте такой, какая она у вас есть. Таблицу Genres мы сгенерируем вот так:
CREATE TABLE genres
(
film_id INTEGER NOT NULL,
genre VARCHAR,
CONSTRAINT film_genre_idx UNIQUE (film_id, genre),
FOREIGN KEY (film_id) REFERENCES films (id) ON DELETE CASCADE
);
Таким образом, если у вас будет несколько фильмов, то все их жанры будут храниться в этой одной таблице. Даже если у одного фильма будет более двух жанров, то это будет нормально работать в такой таблице. Теперь перейдём к сущности Movie (вы ведь не просто так ставили теги java и hibernate?). Я покажу вам только то, как аннотировать поле genres в Movie, саму сущность я, думаю, вы уже написали:
@Enumerated(EnumType.STRING)
@CollectionTable(name = "genres", joinColumns = @JoinColumn(name = "film_id"))
@Column(name = "genre")
@ElementCollection(fetch = FetchType.EAGER)
private Set<Genre> genres;
Насколько вы видите, тут у нас Set, чтобы вы могли к одному фильму привязать несколько жанров. Аннотация CollectionTable указывает, в какой таблице должно храниться содержимое нашего множества. В аннотацию Enumerated я поставил EnumType.STRING, что позволит элементам ENUM сохраняться в таблицу как строковое значение. Ещё я установил FetchType.EAGER, чтобы при вытаскивании Movie из базы, множество genres было бы проинициализировано и заполнено соответствующими значениями.
В результате записи в таблице genres будут иметь примерно такой вид:
film_id genre
------- -----
100001 HORROR
100001 THRILLER
100002 HORROR
100003 THRILLER
Видите? У фильма с id 100001 два жанра: HORROR и THRILLER