【问题标题】:Struggling with model relationships与模型关系作斗争
【发布时间】:2011-01-17 05:59:43
【问题描述】:

我很难与项目中的几个模型建立关系。

模型是:乐队、音乐家、乐器

乐队有多名音乐家

音乐家有多个乐队和多种乐器

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

在表中,我打算将 instrument_id 添加到bands_musicians 链接表中,但我需要一个音乐家能够为一个乐队拥有多种乐器,所以我认为它需要进入musicers_instruments 表。

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

感谢您的宝贵时间!

【问题讨论】:

  • 一个音乐家可以在多个乐队吗?
  • 我也在努力与模特建立关系......
  • :) 很好。是的,一个音乐家可以在多个乐队中。

标签: model-view-controller codeigniter


【解决方案1】:

见:

How to handle a Many-to-Many relationship with PHP and MySQL

这应该让您了解如何设计数据库结构。

【讨论】:

    【解决方案2】:

    someoneinomaha 也许您需要第 4 个模型,它将覆盖并合并她的所有子实体,例如被称为“Mus Model”(或任何你想要的)并有一些方法,如:

    • get_bands()
    • get_instruments()
    • get_musicians()
    • get_instruments_by_musician()
    • get_musicians_by_band()
    • get_instruments_by_band()
    • 获取band_by_musician() 等等...它将为您提供所需的数据,并且不会破坏实体关系,恕我直言。

    【讨论】:

      【解决方案3】:

      音乐家将与乐队和乐器建立一对多的关系。因此,创建您的音乐家表并将与音乐家本身相关的所有信息添加到该表中。

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

      然后创建类似于“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 子句来获取您想要的数据,但它应该适合您。

      【讨论】:

      • 我想做的事情我看不出它在这种结构下会如何工作,可以说对于乐队 x,y 音乐家演奏了 a 和 b 乐器,但对于乐队 z,她演奏c乐器。所以看起来我需要添加另一个结构来处理它......除非我只是不明白你在这里画了什么。谢谢!
      • @someoneinomaha - 查看新编辑的表结构。我在它下面添加了 cmets 来解释它是如何工作的。现在甚至可能更容易使用。
      • 好的...感谢您的帮助。非常感谢!
      • 我不小心对你的答案投了反对票,现在显然不能投票了。很抱歉!
      • @someoneinomaha - 哈!来来来去,我的朋友。很高兴我能帮上忙……快乐的编码。
      【解决方案4】:

      我在这里聚会可能有点晚了,而且我不是数据库专家,但我发现绘制您的数据库架构非常有帮助。只需制作方框并填写您的表格名称和列,然后绘制箭头来定义您的关系,并且应该更清楚您应该如何构建事物以及是否需要添加一个表格来连接其他两个表格。

      如果一切都失败了,只需从 databaseanswers.org 复制一个架构。我敢肯定那里有一个可能会对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-13
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        相关资源
        最近更新 更多