用于电子商务的Cakephp数据库设计

时间:2013-10-18 10:08:05

标签: mysql sql cakephp size product

我正在开发一个电子商务网站,但我对数据库设计感到困惑。

我有3张桌子:

  1. 产品(id,category_id,subcategory_id,名称)
  2. 类别(id,名称)
  3. 子类别(id,category_id,名称)
  4. 例如:产品(剥离T恤)属于类别(时装)和子类别(T恤)

    如果我想为此产品添加尺寸怎么办?我应该在products表中创建另一个表名'Sizes'和size_id吗?

    但是,对于另一个类别(例如Gadget / Handphone)没有大小。设计此数据库的最佳选择是什么?

4 个答案:

答案 0 :(得分:1)

首先,我在产品上没有类别ID和子类别ID。它只属于一个子类别。如果需要,您可以通过子类别找到父类别。

products (id, subcategory_id, name)

categories (id, name)

subcategories (id, category_id, name)

对于所有产品可能不同的属性,您可以这样做:

attribute_types (id, name)

attributes (id, attribute_type_id, value)

products_attributes (id, product_id, attribute_id)

所以在你的attribute_types表中你可能有:

id | name
-----------------------------
1  | T-Shirt Size
2  | Shoe Size (US)
3  | Colour
4  | Batteries Included

在属性表中:

id | attribute_type_id | value
------------------------------
1  | 1                 | Small
2  | 1                 | Medium
3  | 1                 | Large
4  | 2                 | 9
5  | 2                 | 9.5
6  | 2                 | 10
7  | 2                 | 10.5
8  | 2                 | 11
9  | 3                 | Red
10 | 3                 | Blue
11 | 3                 | Green
12 | 3                 | Yellow
13 | 3                 | Black
14 | 4                 | Yes
15 | 4                 | No

然后在您的products_attributes表中,您只需添加该产品具有的任何属性:

id | product_id | attribute_id
------------------------------
1  | 456        | 6
2  | 456        | 13

因此对于那款产品来说,它是一款10号鞋,黑色。

答案 1 :(得分:0)

Magento是一个巨大的商店解决方案,使用EAV解决了这个问题。 EAV非常灵活,但性能不如专用的表格解决方案。

您的类别 - >子类别没有多大意义。阅读嵌套集或在同一类别表中使用纯父子关系。

答案 2 :(得分:0)

我认为你只能有两个表/型号。您必须在类别模型上设置树行为。

class Category extends AppModel {
    public $actsAs = array('Tree'); 
}

然后你必须在你的database.categories中添加一些列:

  • PARENT_ID
  • LFT
  • rght

EAV风格很有用,但管理起来很困难。我认为您还可以为产品模型使用包含行为,并为您想要的每个类别创建新的模型。就像这里的例子:

  • db.categories hasMany db.products(Tree behavior)
  • db.products belongsTo db.categories(包含行为)
  • db.eachModelYouWant(基于类别)

当您找到产品时,您将获得包含bd.products和基本信息的数组,并在另一个基于db.eachModelYouWant的数组中。

无论如何,您还应该通过Relation hasManyAndBelongsTo来管理inStock或不管理inStock。 :-)所以尝试检查databaseanswer有很多设置!

答案 3 :(得分:0)

如果某些产品的尺寸是固定的或已知的,您可以按照自己的建议制作尺寸表,但如果它是可变的,您只需在产品表中制作尺寸字段,并使其对于没有尺寸的产品可以为空