苦苦于模范关系

时间:2010-02-16 03:48:37

标签: model-view-controller codeigniter

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

模特是:乐队,音乐家,乐器

乐队有多位音乐家

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

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

在表格中,我将把instrument_id添加到bands_musicians链接表,但是我需要一个音乐家才能为乐队提供多种乐器,所以我认为它需要进入musicians_instruments表。< / p>

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

谢谢你的时间!

4 个答案:

答案 0 :(得分:1)

请参阅:

<强> How to handle a Many-to-Many relationship with PHP and MySQL

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

答案 1 :(得分:1)

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

  • get_bands()
  • get_instruments()
  • get_musicians()
  • get_instruments_by_musician()
  • get_musicians_by_band()
  • get_instruments_by_band()
  • get band_by_musician() 等等......它将为您提供所需的数据,并且不会制造实体关系,imho。

答案 2 :(得分: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子句来获取所需的数据,但它应该适合您。

答案 3 :(得分:0)

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

如果所有其他方法都失败了,只需从databaseanswers.org复制一个架构即可。我相信那里有一个可能对你有所帮助。