0

我正在开发一个电子商务网站,但我对数据库设计很了解。

我有 3 张桌子:

  1. 产品(id、category_id、subcategory_id、名称)
  2. 类别(ID、名称)
  3. 子类别(id、category_id、名称)

例如:产品(脱衣 T 恤)属于类别(时尚)和子类别(T 恤)

如果我想为这个产品增加尺码怎么办?我应该在产品表中创建另一个表名“尺寸”和 size_id 吗?

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

4

4 回答 4

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 号鞋,黑色。

于 2013-10-18T12:29:31.383 回答
0

Magento 是一个巨大的商店解决方案,它使用EAV解决了这个问题。EAV 很灵活,但性能不如专用桌子解决方案。

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

于 2013-10-18T10:31:02.093 回答
0

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

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

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

  • parent_id
  • 左上角

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

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

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

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

于 2013-12-14T11:13:46.903 回答
0

如果某些产品的尺寸是固定的或已知的,您可以根据自己的建议制作尺寸表,但如果它是可变的,您可以在产品表中制作尺寸字段,并为没有尺寸的产品设置为空。

于 2013-12-14T11:37:43.157 回答