2010-02-16 127 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複製架構即可。我確定那裏有一個可能會幫助你。