mysql: как написать таблицу представлений

0

Я думаю, что мой вопрос лучше всего объяснить на примере: Предположим, я хочу написать веб-сервер для потоковой передачи музыки. У меня есть следующие столбцы в таблице 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.

Итак, что вы предлагаете? пойти с этим уродливым решением, или есть ли более простой способ сделать это?

  • 0
    Я не вижу ничего плохого в этом подходе. Что неуверенного в этом?
  • 0
    @Jan - для общего использования, позволяя пользователям вставлять запросы для использования вашей БД, я считаю довольно небезопасным: en.wikipedia.org/wiki/Sql_injection Предполагая, что мы знаем, что все пользователи являются доверенными пользователями, кто-то может сделать это ошибка, например, выполнить объединение неправильно (с условием объединения, которое всегда выполняется), что привело к попытке выбрать 1000 000 000 000 песен.
Показать ещё 1 комментарий
Теги:
database-design
views

2 ответа

1
Лучший ответ

Вы можете сохранить имя для представления в таблице playlists вместо самого запроса.

Вам все равно придется создавать требуемые представления, и я не знаю, как это помогает вашей "проблеме безопасности".

Не могли бы вы подробнее рассказать о какой безопасности требуется?

1

Я бы определил список воспроизведения как список фильтров, в которых фильтр мог бы быть идентификатором песни, идентификатором исполнителя, именем песни, жанром... Затем я бы взял все песни для каждого фильтра, либо в единый запрос, объединяющий файлы с простым OR или используя UNION, если вы хотите, чтобы список воспроизведения находился в том же порядке, что и фильтры. Обратите внимание, что для получения результатов от UNION в порядке запросов требуется дополнительное усилие, см. этот ответ.

Преимущества такого подхода:

  • миллионов просмотров для управления
  • SQL-запросы, хранящиеся в DB
  • довольно гибкая фильтрация

По общему признанию, я не могу сказать много о производительности этого решения. Не должно быть слишком плохо, хотя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню