数据库中动态类别项目的好解决方案
我打算在MySQL中建立一个新的数据库,并希望从一开始就有正确的目标。我将会有一个带有项目的表格,然后希望按类别进行排序。我的问题是,我希望类别是动态的。数据库中动态类别项目的好解决方案
如果我想知道的类别我想建立它是这样的:
项目表
ID
category1_id
category2_id
标题类别1表
id
标题categories2表
ID
标题
但同样,我希望能够把尽可能多的不同类别在那里,我请即时和我也希望能够按照条件和顺序在查询中处理这些不同的类别。这甚至可能或者我必须使我的数据库中的类别固体?
创建三个表....
(1)tblItem:
fields:
itemId (PK)
itemName
etc..
(2)tbl分类:
fields:
categoryId (PK)
categoryName
etc..
(3)tblItemCategory:
fields:
itemId (FK)
categoryId (FK)
最好的办法是使用许多一对多的关系
喜欢的东西塔哈特:
**items**
id
title
**categories**
id
title
**items_categories**
item_id
category_id
我使用一个单一的“类别”表中,并且具有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 book的3rd 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)
但是这样做,我失去了在category_group上分组的可能性吧?如果我想要'fields'=>'COUNT(Category.id)AS category_count','group'=>'CategoryGroup.id'。 – MotoX 2012-03-13 20:35:15
不仅不应该限制你,而且你所谈论的实际上是内置于CakePHP。我已经编辑了上面的答案以包含'counterCache' - 这会自动保持特定类别内的任何类别的计数(现在只需对其进行测试即可验证它是否有效)。因此......如果您将另一个类别添加到“狗”中,那么“狗”行中的字段“category_count”将会增加。它也会在任何时候更新数字......基本上,它会为您全部处理。 – Dave 2012-03-13 21:55:24
我还添加了一些信息和CakePHP的'find-> threaded'的链接,我想你会喜欢它的。 – Dave 2012-03-13 21:59:35
谢谢你的@Sevak我增加了第四台处理类别组。什么是(FK)和(PK)btw? – MotoX 2012-03-13 13:38:32
PK =主键; FK =外键(=引用表的主键)。 – dgw 2012-03-13 13:52:57
是啊@dgw是正确的...... – 2012-03-14 04:06:19