2016-06-27 38 views
0

我只是需要一个想法,而不是一些代码。SQL使用一个或多个sql表?

存在一个应用程序,允许用户创建充满歌曲的多个播放列表。 每个播放列表都使用sql table将歌曲保存在数据库中。这使用户有机会异步地对每个播放列表进行更改(例如删除或添加新歌曲)。

但是,当我想要搜索所有数据库表格( - >播放列表)时,我必须加入所有这些表格,这很慢。

优点 - >允许用户做每个播放列表异步

缺点编辑 - >慢上搜索,大数据库文件

第二种方式

另外一个我想这样做是用一张桌子来保留所有播放列表中的所有内容,但是用户不能随意添加或删除歌曲每个播放列表(它必须等待 - >表被锁定),但搜索只在一个表中。

优点 - >数据库是较小的原因没有重复的歌曲存在,搜索是相当容易

缺点 - >用户不能添加或播放列表中的每个异步删除歌曲(实际问题,我不不想)

的问题是:

有一些W¯¯唉有速度和异步....?

+0

如何慢会加入与您预期的数据集? –

+0

@OJKrylow如果每个播放列表包含200,000首歌曲并存在20个播放列表+ 20个类似播放列表的库,我认为它会炸毁。 – GOXR3PLUS

回答

2

我会建议你去经典的多对多的方法。

您可以有一个songs表和一个playlists表。一首歌可以是许多播放列表的一部分,而播放列表可以包含多首歌曲。为了对此进行建模,您可以创建一个关系表,将歌曲映射到播放列表 - 基本上,您只需要歌曲ID和播放列表ID。您还可以为关系添加其他信息(例如歌曲在播放列表中的位置等)

查询时,您需要将大多数时间连接在一起(取决于您的搜索逻辑)。你可以尝试并通过放置正确的数据库索引来做到这一点,甚至可以准备一些视图来加快速度。

我不完全确定你为什么认为你实际上对数据库进行了异步更改。在内部,SQLite一个接一个地以串行方式执行所有命令。避免死锁的关键是尽可能缩短交易时间。由于插入,更新和从这些表中删除应该是非常快的,我不认为你应该担心根本不会同时更改播放列表。

2

您不是为您的用户正在构建的每个播放列表创建表吗?

我说你需要三个表:

Songs 
| id | Artist   | Name     | 
| 1 | Michael Jackson | Billie Jean    | 
| 2 | Rick Astley  | Never gonna give you up | 
| 3 | Led Zeppelin | Stairway to heaven  | 

Playlist 
| id | Name    | 
| 1 | My first playlist | 
| 2 | My second playlist | 

Playlist songs 
| playlist | song | 
| 1  | 1 | 
| 1  | 2 | 
| 2  | 2 | 
| 2  | 3 | 
+0

是的,我为每个播放列表创建一个表格。我为所有创建的播放列表创建了一个表格,这样我就可以在加载时检索它们并为每个播放列表创建一个表格。 – GOXR3PLUS

+1

这意味着您必须更新您用户创建的每个播放列表的所有查询。你真的不需要那个。 – Joost

+0

如果我从歌曲表中删除例如迈克尔杰克逊,会发生什么情况?播放列表歌曲表会被通知,或者我必须手动执行此操作吗?我的意思是我必须更改表'播放列表歌曲'中歌曲列的索引? – GOXR3PLUS