Sql数据库查询/结构

时间:2013-12-08 15:53:23

标签: mysql mysql-workbench

enter image description here

在下图/上图所示的情况中。 我希望能够查询,歌曲上有哪些音乐人以及音乐家正在播放哪些歌曲......

  1. 这是这种情况的正确模型吗?
  2. 我只是查询“SongMusicians”表吗?
  3. 这是大学的一项任务,我对这个理论有困难。

    我最初的想法是在音乐家表中获得歌曲,反之亦然。但有人告诉我需要一个“中间”表。

    任何帮助都会很棒

    由于

1 个答案:

答案 0 :(得分:2)

对于这种性质的问题看起来不错。两个主表之间的链接表,让音乐家有多首歌曲,一首歌有多位音乐家。如果您没有它并且您在表音乐家中添加了一个歌曲(如果您将musicianid放入歌曲中,则相同的逻辑适用),您每次参与歌曲时都必须复制音乐家的所有信息。那不好。

要获取有关歌曲中的音乐家或其他内容的信息,请通过链接表加入表格以查找所需信息。

要获取音乐家所在歌曲的所有信息:

SELECT s.*
FROM songs s
INNER JOIN songmusicians sm ON sm.songid= s.songid
INNER JOIN musicians m ON sm.musicianid= m.musicianid
WHERE m.FirstName = 'Kurt' AND m.LastName = 'Kobain';

为了让所有参与歌曲的音乐家都参与其中:

SELECT m.*
FROM songs s
INNER JOIN songmusicians sm ON sm.songid= s.songid
INNER JOIN musicians m ON sm.musicianid= m.musicianid
WHERE s.songTitle = 'Smells like teen spirit';