用于音乐图表跟踪器的SQLite数据库设计

时间:2015-04-28 21:04:24

标签: bash database-design sqlite relational-database

我一直在组建一个小的SQLite数据库来跟踪iTunes RSS提要中的前100首歌曲。我已经在Bash中构建了脚本以完成所有艰苦的工作并且它最终正在工作,但我不确定我的数据库结构是否正确,所以我正在寻找一些关于最佳方式的反馈,因为我只是我正在学习SQL,所以我不想在构建查询以及时检索数据时挖掘自己的洞!

我有3张这样的表;

artists_table

artist_id - PK
artist_name

songs_table

song_id - PK
artist_id - FK (from the artists table)

charts_table

chart_id - PK
song_id - FK (from the songs table)
position - (chart position 1-100)
date - (date of chart position xxxx-xx-xx)

艺术家和歌曲表对我来说似乎很好,得到了外键约束......但是我不确定图表表,这个结构有什么明显的错误吗?

我希望随着时间的推移跟踪歌曲/艺术​​家/位置,以便我可以生成一些统计数据等等

谢谢,

1 个答案:

答案 0 :(得分:1)

这完全取决于您的数据将具有的关系(一对一,一对多,多对多)。

您实施图表的方式表明:

  • 每张图表只有/属于一首歌
  • 一首歌可以有很多图表

这是一对多的关系。如果这就是你的意图,那么一切似乎都很好。

然而:

  1. 如果你的图表可以有很多歌曲而且一首歌只有一首 图表(也是一对多关系但反转),song_id列需要 从图表表和歌曲表需要中取出 chart_id专栏。
  2. 如果您的图表可以有很多歌曲,而且您的歌曲也可以有很多图表(多对多关系),那么您需要一个"联合表"这可能是这样的: 表:charts_songs,COLUMNS:id,chart_id,song_id,position