2010-02-16 146 views
3

我很难与我的项目中的几个模型设计关系。与模型关系挣扎

的车型有:乐队,音乐家,乐器

频段有多个音乐家

音乐家多频段和多台仪器

这一切都非常简单,但我还需要跟踪哪些一个音乐家为特定乐队所拥有的乐器。所以从某种意义上说,我想乐队通过音乐家有多种乐器。

在表格中,我将instrument_id添加到bands_musicians链接表,但我需要一个音乐家能够为乐队提供多个乐器,所以我认为它需要放在musicians_instruments表中。

建立与这些模型的关系的最佳方式是什么?

谢谢你的时间!

+0

音乐家可以在多个乐队? – Andrew 2010-02-16 03:50:24

+4

我正在努力与模特建立关系...... – 2010-02-16 03:53:55

+0

:)不错。是的,音乐家可以在多个乐队中。 – someoneinomaha 2010-02-16 04:02:20

回答

1

音乐家与乐队和乐器之间会有一对多的关系。因此,创建你的音乐家表并将所有关于音乐家的信息添加到该表中。

创建一个乐器表来保存关于乐器的信息,并为乐队执行相同的操作。这将照顾你所有的个人物品。

然后创建一些类似'band_assignments'的表,其中只有一个乐队的ID和音乐家的ID,并将两者连接在一起。创建一个'instrument_assignment'表来做同样的事情。

现在,当您查询音乐家时,您可以将所有这些表格连接在一起,以获取您需要的数据或选择性地只加入乐器,乐队或根据“加入日期”进行排序并限制以获得最后一个乐队他们加入或他们学到的最后一个工具。

基本上5张桌子应该覆盖这一切。

musicians (musician_id, first_name, last_name) 
bands (band_id, name) 
instruments (instrument_id, name) 
band_instument_assignments (musician_id, band_id, instrument_id, date_played) 

正如你可以在编辑的版本见上你会有多行的“band_instrument_assignments”表 - 为每个每个用户在每个乐队演奏乐器。您将需要使用一些GROUP BY和LIMIT子句来获取所需的数据,但它应该适用于您。

+0

我想做的事情,我看不出它是如何在这个结构下工作的,可以说对于乐队x,y音乐家演奏了a和b乐器,但是对于乐队z,她演奏了c乐器。 所以看起来我需要添加另一个结构来处理这个......除非我只是不理解你在这里画出的东西。 谢谢! – someoneinomaha 2010-02-17 19:46:30

+0

@someoneinomaha - 查看新编辑的表格结构。我在下面添加了一些评论来解释它的工作原理。现在可能更容易使用。 – Shane 2010-02-17 19:52:26

+0

正确...感谢您的帮助。非常感激! – someoneinomaha 2010-02-17 20:15:19

1

someoneinomaha 也许你需要第四个模型,它将覆盖和结合她的所有子女实体,例如,所谓像 '亩模式'(或任何你想要的),并有这样一些方法:

  • get_bands()
  • get_instruments()
  • get_musicians()
  • get_instruments_by_musician()
  • get_musicians_by_band( )
  • get_instruments_by_band()
  • GET band_by_musician() 等等......它会提供你所需要的数据并不会刹车实体关系,恕我直言。
0

我可能对这里的派对有点迟到,我不是数据库专家,但我发现绘制出你的数据库模式非常有帮助。只需制作盒子并填写表格名称和栏目,然后绘制箭头来定义您的关系,并且应该更清楚您应该如何组织结构以及是否需要添加表格以连接另外两个表格。

如果一切都失败了,只需从databaseanswers.org复制架构即可。我确定那里有一个可能会帮助你。