我正在开发一个电子商务网站,但我对数据库设计感到困惑。
我有3张桌子:
例如:产品(剥离T恤)属于类别(时装)和子类别(T恤)
如果我想为此产品添加尺寸怎么办?我应该在products表中创建另一个表名'Sizes'和size_id吗?
但是,对于另一个类别(例如Gadget / Handphone)没有大小。设计此数据库的最佳选择是什么?
答案 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中添加一些列:
EAV风格很有用,但管理起来很困难。我认为您还可以为产品模型使用包含行为,并为您想要的每个类别创建新的模型。就像这里的例子:
当您找到产品时,您将获得包含bd.products和基本信息的数组,并在另一个基于db.eachModelYouWant的数组中。
无论如何,您还应该通过Relation hasManyAndBelongsTo来管理inStock或不管理inStock。 :-)所以尝试检查databaseanswer有很多设置!
答案 3 :(得分:0)
如果某些产品的尺寸是固定的或已知的,您可以按照自己的建议制作尺寸表,但如果它是可变的,您只需在产品表中制作尺寸字段,并使其对于没有尺寸的产品可以为空