У меня есть система, которая позволяет мне работать с книгами, и исследования, которые могут проводить люди, когда ищут книги.
База данных mysql, и у меня есть две основные таблицы BOOKS
и RESEARCHES
.
BOOKS(id *int*, author *string*, title *string*, price *string*, tags *set('sci-fi', 'literature', 'theatre', 'drama', 'romance', 'recent', ...)*, ...)
RESEARCHES is (researches_id, price_max, author, ...)
Когда я добавляю книгу в свою базу данных, я хочу получить исследования, соответствующие этой новой книге.Поскольку люди могут использовать много тегов в своих исследованиях (более 30), я решил создать другую таблицу, а не использовать столбец тегов в RESEARCHES
, который был бы SET
, потому что я считаю, что нет индекса настолбец SET
, и поэтому моя база данных не может быстро обработать мой запрос.
RESEARCHES_TAGS(id, researches_id, tag).
Если я добавлю книгу П.К. Дика с тегами 'sci-fi', 'drama', я хочу получить исследования с тегом NULL
или тегом ('scifi ',' drama ') и исключить исследования с другими тегами.
Итак, я делаю следующий запрос:
SELECT * FROM RESEARCHES
LEFT JOIN RESEARCHES_TAGS ON RESEARCHES.researches_id = RESEARCHES_TAGS.researches_id AND RESEARCHES_TAG.tag IN ('literature', 'theatre', 'romance', ...)
WHERE RESEARCHES_TAGS.tag IS NULL
Обратите внимание, что указанный массив тегов не содержиттэги 'научная фантастика', 'драма'.
Мой вопрос: есть ли лучшее решение?