2012-03-13 62 views
1

我打算在MySQL中建立一個新的數據庫,並希望從一開始就有正確的目標。我將會有一個帶有項目的表格,然後希望按類別進行排序。我的問題是,我希望類別是動態的。數據庫中動態類別項目的好解決方案

如果我想知道的類別我想建立它是這樣的:

項目表
ID
category1_id
category2_id
標題

類別1表
id
標題

categories2表
ID
標題

但同樣,我希望能夠把儘可能多的不同類別在那裏,我請即時和我也希望能夠按照條件和順序在查詢中處理這些不同的類別。這甚至可能或者我必須使我的數據庫中的類別固體?

回答

5

創建三個表....

(1)tblItem:

fields: 
      itemId (PK) 
      itemName 
      etc.. 

(2)tbl分類:

fields: 
      categoryId (PK) 
      categoryName 
      etc.. 

(3)tblItemCategory:

fields: 
      itemId (FK) 
      categoryId (FK) 
+0

謝謝你的@Sevak我增加了第四臺處理類別組。什麼是(FK)和(PK)btw? – MotoX 2012-03-13 13:38:32

+1

PK =主鍵; FK =外鍵(=引用表的主鍵)。 – dgw 2012-03-13 13:52:57

+0

是啊@dgw是正確的...... – 2012-03-14 04:06:19

0

最好的辦法是使用許多一對多的關係

喜歡的東西塔哈特:

**items** 
id 
title 

**categories** 
id 
title 

**items_categories** 
item_id 
category_id 
1

我使用一個單一的「類別」表中,並且具有parent_id字段引用表中的任何其他種類的風扇。

這允許您在單個表中包含所有線程類別......您的「類別組」只是任何在其parent_id字段中沒有數據的類別行。

實例數據

id name   parent_id category_count 
1  appliances null   1 
2  dogs   null   1 
3  couch   1   0 
4  pitbull  2   0 
5  games   null   0 
//... 

基本上, '類別' 是關係到本身 - 這裏的模型關聯: (參考:在CakePHP book3rd code example here

class Category extends AppModel { 

    public $belongsTo = array(
     'Parent' => array(
      'className' => 'Category', 
      'foreignKey' => 'parent_id', 
      'counterCache' => true 
     ) 
    ); 

    public $hasMany = array(
     'Children' => array(
      'className' => 'Category', 
      'foreignKey' => 'parent_id' 
     ) 
    ); 

    //... 
} 

class Item extends AppModel { 

    public $belongsTo = array('Category'); 

    //... 

} 

你也可以做Item hasAndBelongsToMany Category而不是belongsTo,如果你願意 - 取決於你的設置。


附加信息:

CounterCache:有關CakePHP的counterCache,go here更多信息。

find->螺紋:使用這種方法,你可以輕鬆地獲得通過嵌套數據CakePHP的find->螺紋(click here for more info about this

+0

但是這樣做,我失去了在category_group上分組的可能性吧?如果我想要'fields'=>'COUNT(Category.id)AS category_count','group'=>'CategoryGroup.id'。 – MotoX 2012-03-13 20:35:15

+0

不僅不應該限制你,而且你所談論的實際上是內置於CakePHP。我已經編輯了上面的答案以包含'counterCache' - 這會自動保持特定類別內的任何類別的計數(現在只需對其進行測試即可驗證它是否有效)。因此......如果您將另一個類別添加到「狗」中,那麼「狗」行中的字段「category_count」將會增加。它也會在任何時候更新數字......基本上,它會爲您全部處理。 – Dave 2012-03-13 21:55:24

+0

我還添加了一些信息和CakePHP的'find-> threaded'的鏈接,我想你會喜歡它的。 – Dave 2012-03-13 21:59:35

相關問題