У меня есть приложение 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 для отслеживания событий более эффективной, поскольку я продолжаю строить, какие другие события я мог бы отслеживать в будущем?
Спасибо за любое понимание!