Sql 记录音乐流事件的模式

Sql 记录音乐流事件的模式,sql,database,database-design,nosql,Sql,Database,Database Design,Nosql,我有一个带有专辑、播放列表和歌曲的音乐应用程序。我想能够跟踪流事件(如播放)的用户和流位置(专辑或播放列表) 例如,歌曲可以放在相册和播放列表中,因此当用户在曲目上单击“播放”时,我要记录歌曲播放的位置(playlid或albuliid),谁单击了播放(userId),以及此事件发生的时间(timestamp)。将来我可能想记录更多的eventTypes,比如:播放、暂停、恢复 我的第一个想法是有下表: Events ----- id: Int (pk) userId: Int trackId:

我有一个带有专辑、播放列表和歌曲的音乐应用程序。我想能够跟踪流事件(如播放)的用户和流位置(专辑或播放列表)

例如,歌曲可以放在相册和播放列表中,因此当用户在曲目上单击“播放”时,我要记录歌曲播放的位置(
playlid
albuliid
),谁单击了播放(
userId
),以及此事件发生的时间(
timestamp
)。将来我可能想记录更多的
eventTypes
,比如:播放、暂停、恢复

我的第一个想法是有下表:

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

但是,
playlID
albumId
在每一行都将为空,因为一次只能从一个位置播放歌曲。因此,我的下一个想法是将事件分解到各自的位置:
playlevents
AlbumEvents
,它们将包含完全相同的属性,除了
playlevents
中的
albumId
AlbumEvents
表中的
playlaid
。这意味着我在复制属性

我很好奇,对于数据库模式跟踪这样的事件,有什么建议?我有一个SQL数据库,但是当我继续构建我将来可能要跟踪的其他事件时,像NoSQL数据库这样用于跟踪事件的数据库会更有效吗


谢谢你的洞察力

“然而,
playlID
albumId
将为空”--这会有什么问题?@stickybit目前不是问题,但对某些行来说只是无用,我只是好奇是否有更好的方式来考虑事件跟踪!