Database 音乐列表的模式+;播放列表web应用程序
假设所有播放列表都是用户主音乐库的子集,那么数据库中应如何管理主音乐库和播放列表?似乎一个Database 音乐列表的模式+;播放列表web应用程序,database,database-design,nosql,schema,Database,Database Design,Nosql,Schema,假设所有播放列表都是用户主音乐库的子集,那么数据库中应如何管理主音乐库和播放列表?似乎一个播放列表表即使对于中等数量的用户也会增长得非常快。这对于在每个用户集合中都有一个播放列表的nosql数据库来说是一个不错的用例,而不是一个包含所有用户的巨大播放列表表吗?我认为下面这样的概念设计会有所帮助。 这里的关键是将媒体文件存储在应用程序的数据库之外,并通过媒体路径在它们之间建立链接。 一些RDBMS提供访问文件系统的API,如或 使用关系型或非Sql解决方案与应用程序业务相关。 它们中的任何一个都有
播放列表
表即使对于中等数量的用户也会增长得非常快。这对于在每个用户
集合中都有一个播放列表的nosql
数据库来说是一个不错的用例,而不是一个包含所有用户的巨大播放列表表吗?我认为下面这样的概念设计会有所帮助。
这里的关键是将媒体文件存储在应用程序的数据库之外,并通过媒体路径在它们之间建立链接。
一些RDBMS提供访问文件系统的API,如或
使用关系型或非Sql解决方案与应用程序业务相关。它们中的任何一个都有自己的优点和缺点,可以进行比较。你没有给出太多的细节,所以我尽我所能回答。我认为关系数据库解决方案非常适合这个问题,尽管您可能最终在
播放列表
和播放列表(歌曲
表)中拥有数百万条记录,但任何现代RDBMS都应该能够毫无问题地处理这些记录
您可能需要或不需要/不需要相册的表格,为了完整起见,我将其包括在这里
albums
id unsigned int(P)
artist_id unsigned int(F artists.id)
name varchar(50)
...
+----+-----------+-----------------------------------+-----+
| id | artist_id | name | ... |
+----+-----------+-----------------------------------+-----+
| 1 | 1 | The Last in Line | ... |
| 2 | 3 | American IV: The Man Comes Around | ... |
| 3 | 2 | Animal House Soundtrack | ... |
| 4 | 4 | None or Unknown | ... |
| .. | ......... | ................................. | ... |
+----+-----------+-----------------------------------+-----+
像相册一样,您可能想要也可能不想要艺术家的表格,但我已经包含了它,以防您想要显示此类数据
artists
id unsigned int(P)
name varchar(50)
...
+----+-------------+
| id | name |
+----+-------------+
| 1 | Dio |
| 2 | Various |
| 3 | Johnny Cash |
| 4 | Unknown |
| 5 | Sam Cooke |
| .. | ........... |
+----+-------------+
我认为播放列表是非常基本的:一个用户可以拥有无限数量的播放列表,并且他们有一个名字。在我的示例数据中,我们看到bob有两个播放列表“Mix”和“Speechs”,而mary只有一个“Oldies”
我们必须跟踪每个播放列表中的歌曲。在我的示例数据中,您可以看到“埃及(锁链打开)”和“伤害”在“混合”播放列表中,而“市政厅演讲”在“演讲”播放列表中,而“埃及(锁链打开)”、“伤害”和“扭曲夜晚”都在“老歌”播放列表中
playlists_songs
id unsigned int(P)
playlist_id unsigned int(F playlists.id)
song_id unsigned int(F songs.id)
+----+-------------+---------+
| id | playlist_id | song_id |
+----+-------------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 4 |
| 4 | 3 | 1 |
| 5 | 3 | 2 |
| 6 | 3 | 3 |
| .. | ........... | ....... |
+----+-------------+---------+
尽管数以百万计的用户可能在他们的收藏中都有歌曲“伤害”,但我们只需要存储关于每首歌曲的信息一次。因此,在歌曲
表中,我们存储关于每首歌曲的信息,包括实际音频文件的位置。关于文件位置的例子我不太清楚,文件系统中文件的实际组织方式可能会很不一样
songs
id unsigned int(P)
album_id unsigned int(F albums.id) // Default NULL
artist_id unsigned int(F artists.id)
name varchar(50)
filename varchar(255)
...
+----+----------+-----------+---------------------------+---------------------------+-----+
| id | album_id | artist_id | name | filename | ... |
+----+----------+-----------+---------------------------+---------------------------+-----+
| 1 | 1 | 1 | Egypt (The Chains Are On) | /media/audio/1/1/9.mp3 | ... |
| 2 | 2 | 3 | Hurt | /media/audio/3/2/2.mp3 | ... |
| 3 | 3 | 5 | Twistin' the Night Away | /media/audio/5/2/3.mp3 | ... |
| 4 | NULL | 4 | Town Hall speech | /media/audio/4/4/<id>.mp3 | ... |
| .. | ........ | ......... | ......................... | ......................... | ... |
+----+----------+-----------+---------------------------+---------------------------+-----+
处理您描述的情况正是数据库擅长的。在
播放列表\u歌曲
中,可能应该有一个位置
列来存储歌曲
放在播放列表中的位置。当两个或两个以上的艺术家参与一张专辑时,如何处理这种情况?一首歌有两个或两个以上的艺术家?@Sudarshan-只需创建一个艺术家
表,从相册
表中删除艺术家id
,并创建一个关联表相册艺术家
,该表有两列组成主键:相册id
和艺术家id
。
songs
id unsigned int(P)
album_id unsigned int(F albums.id) // Default NULL
artist_id unsigned int(F artists.id)
name varchar(50)
filename varchar(255)
...
+----+----------+-----------+---------------------------+---------------------------+-----+
| id | album_id | artist_id | name | filename | ... |
+----+----------+-----------+---------------------------+---------------------------+-----+
| 1 | 1 | 1 | Egypt (The Chains Are On) | /media/audio/1/1/9.mp3 | ... |
| 2 | 2 | 3 | Hurt | /media/audio/3/2/2.mp3 | ... |
| 3 | 3 | 5 | Twistin' the Night Away | /media/audio/5/2/3.mp3 | ... |
| 4 | NULL | 4 | Town Hall speech | /media/audio/4/4/<id>.mp3 | ... |
| .. | ........ | ......... | ......................... | ......................... | ... |
+----+----------+-----------+---------------------------+---------------------------+-----+
users
id unsigned int(P)
username varchar(32)
password varbinary(255)
...
+----+----------+----------+-----+
| id | username | password | ... |
+----+----------+----------+-----+
| 1 | bob | ******** | ... |
| 2 | mary | ******** | ... |
| .. | ........ | ........ | ... |
+----+----------+----------+-----+