У меня есть две таблицы - видео и плейлисты
Обычно я бы создавал две соответствующие таблицы и таблицу с несколькими значениями для отношения 1-Много, например:
Videos = [pk, videoId, title и т. Д.]
Плейлисты = [pk, название и т. Д.]
Плейлисты_Видео = [VideosFK, ПлейлистFK]
В качестве альтернативы я думал о создании только двух таблиц и наличии поля в таблице списков воспроизведения, в котором есть строка VideoFK, разделенная запятыми. Мое приложение может «разделить» строку идентификатора, а затем извлечь элементы из кэша в соответствии с массивом идентификаторов, поэтому:
Videos = [pk, videoId, title и т. Д.]
Списки воспроизведения = [pk, videoIds, название и т. Д.]
где пример данных может выглядеть так:
Видео - 1, "abcd", заголовок, ...
Видео - 2, "Эфхх", другое название, ...
Видео - 3, "ijkl", и еще один, ...
Видео - 4, "MNOP", и еще один, ...
Плейлист - 1, "abcd, efgh, ijkl, mnop", ...
С этой структурой, если я хочу выполнить поиск по всем плейлистам, в которых есть видео, я мог бы настроить запрос, используя:
SELECT *
FROM Playlists
WHERE videoIds like '%VideoID%';
и в противном случае я мог бы выполнить стандартный запрос соединения в традиционной модели:
SELECT *
FROM Playlists
WHERE pk in (SELECT PlaylistFK
FROM Playlists_Videos pv
WHERE VideoFK = '%videoPK%');
Хотя это работает, я хочу понять, во что я ввязываюсь, и мне любопытно, что MySQL делает на более низком уровне. Какие предостережения? Как это работает при масштабировании?
Спасибо
Редактировать - "videoIds" содержатся в varchar, который представляет собой строку с уникальными строковыми идентификаторами видео (идентификатор видео YouTube) через запятую