2011-01-18 100 views
1

我正在定義一個全新的數據庫。我現在遇到了一個問題 ,我將其描述爲「通常」,但仍無法從網站上找到好的 信息。因此,這裏的問題:如何在CakePHP中與許多hasMany關聯創建mysql表?

我在我的數據庫中的許多表(我會形容爲導向),如:

  • 技能
  • 地方
  • 活動
  • 等..

現在對於所有這些指南類型,我想添加評論功能和 其他類似功能附上圖片和視頻。我有很多指南類型,所以我放棄了爲每個人提供單獨的評論圖像和視頻表的想法。我需要爲他們每個人提供一張桌子。

問題是,達到此目的的最佳方法是什麼?我聽說過並閱讀了3種解決方案,而我對他們都不熟悉。

  1. 我已閱讀關於使用UUIDs會解決這個問題,但我不是很熟悉它們的功能。有人可以詳細說明,如果這是正確的路要走嗎? Something about UUIDs I read but not quite understood it

  2. 我已閱讀的其他事情是創建一個層次模型「樹表」,它將持有關聯鏈接。更多信息在Managing Hierarchical Data in MySQL

  3. 我也讀過關於創建對象表和像使用層次模型一樣的方式在MySQL內部使用類似對象繼承的程序。

UUID聽起來最簡單,所以我會很感激那裏的幫助。

我不知道如何使用它們。但這裏是我怎麼想它的工作原理 - 至少你會得到它掛起什麼,我想在這裏實現,以及如何/什麼我誤解有關他們:

  • 我會創建一個新表:可能有UUID字段的指南。
  • 然後將所有這些引導類型(技能等),以指導表(手冊爲家長和其他作爲子)
  • 父母與子女有兩個UUID領域並創建一個引導父母和子女時得到相同的UUID,使他們可以鏈接。孩子也有自己的Id字段。
  • 然後,通過使用指向指南的UUID字段將註釋鏈接到指南,併爲註釋分隔ID int字段。

請告訴我,如果這是正確的方式,或者它是完全垃圾,如果是這樣,我應該怎麼做?

回答

0

我閱讀更多關於的UUID,並因爲它們允許應用廣泛的唯一的ID,我能夠做數據庫的「繼承」的風格。

我在每個表名的開頭都使用了我自己的前綴,以避免保留的表名衝突(如對象)。您可以使用任何種類的前綴,例如:my_並使用它:my_object。在這個例子中,所有的表都應該使用前綴。

所以我創建了表對象。它具有二進制(36)類型的id字段。 Cake將它識別爲UUID字段。然後我使用1:1識別關係並繼承其他表格,我想與其他人進行交互。

因此,我創建了與評論,視頻,圖片表的1:1識別關係,以便表中的識別外鍵也是主鍵。

然後我創建了Mappings表,我使用了兩個1:1的無主鍵的非標識關係。這意味着這是真正的HABTM與自我的關係。

現在這讓我從Objects表中繼承其他表,如News表中的1:1標識關係。然後可以使用Mappings表將註釋或任何其他具有1:1標識關係的對象鏈接到對象。

我希望這可以幫助其他人思考這種解決方案。

0

檢查http://cakeapp.com,在那裏創建你的數據庫佈局並在以後下載SQL。

+1

http://cakeapp.com/sqldesigners/sql/testcase這是我試過的,它看起來不錯,但我擔心,如果有機會,如果賠率/地點/事情得到相同的guide_id它會打破系統,因爲相同指南將涉及多個「真正的指南」。或者我只是擔心什麼? – Pehmolelu 2011-01-19 08:07:08

1

你有沒有關於使用正常的hasMany與一個條件的關係? Read about it here

class Skill extends AppModel { 
    var $hasMany = array(
    'Comment' => array(
     'className'  => 'Comment', 
     'conditions' => array('Comment.type' => 1), // 1 for skills, 2 for places etc. or something like that. 
    ) 
    ); 
} 
+0

+1 A.k.a.多態關聯。 – deceze 2011-01-18 23:47:49