Схема для записи музыкальных событий c stream - PullRequest
0 голосов
/ 31 января 2020

У меня есть приложение musi c с альбомами, плейлистами и песнями. Я хотел бы иметь возможность отслеживать потоковые события (например, воспроизведение) по пользователю и местоположению потока (альбом или список воспроизведения).

Например, песни могут быть размещены как в альбомах, так и в плейлистах, поэтому, когда пользователь нажимает «play» на дорожке, я хочу записать, откуда была воспроизведена песня (playlistId или albumId), кто нажал кнопку воспроизведения (userId) и когда произошло это событие (timestamp). В будущем я, возможно, захочу зарегистрировать больше eventTypes, например: play, pause, resume

Моей первой мыслью было иметь следующую таблицу:

Events
-----
id: Int (pk)
userId: Int
trackId: Int
albumId: Int
playlistId: Int
eventType: String (ex: play, pause)
timestamp: DateTime

Однако либо playlistId или albumId будет нулевым в каждой строке, потому что песню можно транслировать только из одного места за раз. Поэтому моей следующей мыслью было бы разбить События на их соответствующие местоположения: PlaylistEvents и AlbumEvents, которые будут содержать точно такие же свойства, за исключением albumId в PlaylistEvents и playlistId в таблице AlbumEvents , Что означало бы, что я дублирую свойства.

Мне было бы любопытно, что будут некоторые предложения для схемы базы данных для отслеживания подобных событий? У меня есть база данных SQL, но будет ли что-то вроде базы данных No SQL для отслеживания событий более эффективной, поскольку я продолжаю строить, какие другие события я мог бы отслеживать в будущем?

Спасибо за любое понимание!

...