假设您正在创建一个音乐应用程序。您有一张播放列表表和一张歌曲表。您将如何在 SQL 环境中为播放列表中的歌曲顺序关系建模?
要求:
- 每个播放列表可以有多首歌曲
- 播放列表中的歌曲顺序很重要
- 每首歌都有自己丰富的信息(艺人、专辑等)
在客户端,这很简单,只需要在播放列表上有一系列产品 ID,然后从中获取歌曲信息。如果顺序发生变化,只需更新数组并推送一个新数组。计算密集但很容易推理并且没有双倍索引条目的机会。
在关系数据库世界中,通常对于多对多关系,您会使用联结表。其中每个 playlist_id 对应一个 song_id。您可以为索引添加一列,但是当您更新播放列表的顺序时,您必须重写所有索引的顺序。
ID | playlist_id | 歌曲编号 | 指数 |
---|---|---|---|
1 | 1 | 50 | 1 |
2 | 1 | 24 | 2 |
3 | 1 | 21 | 3 |
4 | 2 | 12 | 1 |
我正在努力寻找这个问题的答案。
对于我的具体情况,我目前正在使用 Supabase 和他们的 Javascript SDK,它引用了一个托管的 PostgreSQL 数据库,一切都是从一个带有查询的客户端应用程序完成的。我不知道如何编写一个处理这个问题的 SQL 函数。与每次只推送一个新数组相比,这一切似乎都非常复杂,即使这是“正确”的方式。看起来 PostgreSQL 还不支持外键数组,那么有更好的方法吗?