Mysql 面向电子商务的Cakephp数据库设计

Mysql 面向电子商务的Cakephp数据库设计,mysql,sql,cakephp,size,product,Mysql,Sql,Cakephp,Size,Product,我正在开发一个电子商务网站,但我得到了数据库设计方面的确认 我有三张桌子: 产品(标识、类别标识、子类别标识、名称) 类别(id、名称) 子类别(id、类别\ id、名称) 例如:产品(脱衣T恤)属于类别(时尚)和子类别(T恤) 如果我想为这个产品增加尺寸怎么办?我是否应该在products表中创建另一个表名“Sizes”和size_id 但是,对于另一个类别(如小工具/手机),则没有大小。设计此数据库的最佳选项是什么?Magento是一个大型商店解决方案,它使用以下方法解决此问题。EAV非常灵

我正在开发一个电子商务网站,但我得到了数据库设计方面的确认

我有三张桌子:

  • 产品(标识、类别标识、子类别标识、名称)
  • 类别(id、名称)
  • 子类别(id、类别\ id、名称)
  • 例如:产品(脱衣T恤)属于类别(时尚)和子类别(T恤)

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


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

    Magento是一个大型商店解决方案,它使用以下方法解决此问题。EAV非常灵活,但性能不如专用表解决方案


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

    首先,我不会在产品上使用类别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)
    
    因此,在属性类型表中,您可能有:

    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码的黑色鞋。

    我想您只能选择两张桌子/两种型号。您必须在类别模型上设置树行为

    class Category extends AppModel {
        public $actsAs = array('Tree'); 
    }
    
    然后,您必须在数据库中添加一些列。类别:

    • 家长id
    • lft
    • rght
    EAV风格很有用,但很难管理。我认为您还可以对您的产品模型使用可控制行为,并为您想要的每个类别创建新的模型。如下面的示例所示:

    • db.categories有许多db.products(树行为)
    • db.products属于db.categories(可包含的行为)
    • db.eachModelYouWant(基于类别)
    当您找到一个产品时,您将获得一个包含bd.products和基本信息的数组,该数组位于另一个基于db.eachModelYouWant的数组中


    无论如何,您还应该有一个表来管理inStock,而不是hasman和dbelongsto之间的关系。:-)所以试着检查数据库回答有很多设置

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

    谢谢badHorsie。我从来没有想过这个解决方案。好的,我试试这个设计。再次感谢。heheAre子类别而非类别?为什么不在categories表中使用parent_id并删除整个subcategories表?