首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL使用一个或多个sql表?

SQL使用一个或多个sql表?
EN

Stack Overflow用户
提问于 2016-06-27 07:58:15
回答 2查看 150关注 0票数 0

我只需要一个想法,而不是一些代码。

有一个应用程序,它允许用户建立多个充满歌曲的播放列表。每个播放列表都使用sql table保存database.This中的歌曲,为用户提供了对每个播放列表进行异步更改的机会(例如,删除或添加新歌曲)。

但是,当我想搜索所有的数据库表(->播放列表)来寻找一些歌曲时,我必须加入所有这些表,这是一个缓慢的问题。

Pros->Allows用户异步对每个播放列表进行编辑

Cons->Slow on searching,大数据库文件

第二条路

另一种方法是使用一个表来保存所有播放列表中的所有内容,但是用户不能在每个播放列表上异步添加或删除歌曲(必须等待->表被锁定),但是搜索只在一个表中进行。

Pros->database是较小的,因为没有重复的歌曲存在,搜索相当容易

Cons->user不能在每个播放列表中异步添加或删除歌曲(我不想要的实际问题)

问题是:

有什么方法可以同时具有速度和异步性.?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-27 08:18:09

我建议你采用经典的多对多的方法。

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

在查询时,大部分时间都需要将3个表连接在一起(取决于搜索逻辑)。您可以尝试通过设置正确的数据库索引,甚至准备一些视图来加快速度,从而使其变得更聪明。

我不太清楚为什么您认为您实际上对数据库进行了异步更改。在内部,SQLite以串行方式执行所有命令,一个接一个。避免死锁的关键是保持事务尽可能短。由于从这些表中插入、更新和删除应该非常快,我认为您根本不应该担心对播放列表进行并发更改。

票数 2
EN

Stack Overflow用户

发布于 2016-06-27 08:18:55

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

我认为你需要三张桌子:

代码语言:javascript
复制
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    |
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38048627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档