Я думаю, что мой вопрос лучше всего объяснить на примере: Предположим, я хочу написать веб-сервер для потоковой передачи музыки. У меня есть следующие столбцы в таблице songs
:
|song_id|song_name|song_genre|song_length|artist
Я хотел бы, чтобы мои пользователи сохраняли плейлисты, но я не хочу, чтобы мои плейлисты определялись, явно указывая песни, которые находятся в плейлисте, а скорее что-то вроде "всех песен ringo starr", что означает, что когда новые композиции ringo starr добавляются в таблицу, плейлист будет автоматически их иметь. Фактически, что я хочу, это таблица с именем playlists
, которая содержит список представлений mysql.
Самый наивный подход состоял бы в том, чтобы просто иметь таблицу с именем playlists
, и один из ее столбцов будет называться playlist_query
, который сохранил бы для приведенного выше примера что-то вроде строки "select song_id from songs where artist='ringo starr'
.
Это, конечно, невероятно неуверенно, но этого было бы достаточно, если бы не было лучшего решения, так как это приложение используется только внутри внутри нашей компании всего несколькими сотрудниками, которые являются хорошими программистами, которые знают свой путь вокруг mysql.
Итак, что вы предлагаете? пойти с этим уродливым решением, или есть ли более простой способ сделать это?
Вы можете сохранить имя для представления в таблице playlists
вместо самого запроса.
Вам все равно придется создавать требуемые представления, и я не знаю, как это помогает вашей "проблеме безопасности".
Не могли бы вы подробнее рассказать о какой безопасности требуется?
Я бы определил список воспроизведения как список фильтров, в которых фильтр мог бы быть идентификатором песни, идентификатором исполнителя, именем песни, жанром... Затем я бы взял все песни для каждого фильтра, либо в единый запрос, объединяющий файлы с простым OR
или используя UNION
, если вы хотите, чтобы список воспроизведения находился в том же порядке, что и фильтры. Обратите внимание, что для получения результатов от UNION
в порядке запросов требуется дополнительное усилие, см. этот ответ.
Преимущества такого подхода:
По общему признанию, я не могу сказать много о производительности этого решения. Не должно быть слишком плохо, хотя.