【问题标题】:Database design for products and product variants产品和产品变体的数据库设计
【发布时间】:2011-11-27 11:05:16
【问题描述】:

我正在建立一个商业网站,并且一直在研究展示带有变体的产品的不同方法。我正在尝试为隐形眼镜这样做,并想知道最好的方法是什么。

产品可以是简单的,例如没有变体的镜盒或镜片溶液,或者在隐形眼镜的情况下,每个镜片最多可以有三个可配置变体,具体取决于镜片,用于处方(例如功率、基曲线、直径)。

在我的结构中,我有简单的产品,只是一个产品,没有父级。隐形眼镜将作为产品存储,每个变体将作为引用其父代的单独产品存储,并且变体本身将使用 products_variants 表链接。

我有这样的结构:

products
- id
- parent_id
- name
- price
- type_id
- brand_id

type
- id
- name

brand
- id
- name

product_variant_group
- id
- name

product_variant_value
- id
- product_variant_group_id
- value

products_variants (isCrossRef = true for Propel relationships)
- id
- product_id
- product_variant_value_id

我的代码已经很慢了,我什至还没有开始构建选择框来选择处方。

public function getPossibleVariants($productId)
    {
        $product = ProductQuery::create()->findPk($productId);
        $children = $product->getChildren();

        $options = array();

        foreach ($children as $child) {
            if ($child->countProductsVariantss()) {
                $variants = $child->getProductVariantValues();

                foreach ($variants as $variant) {
                    $group = $variant->getProductVariantGroup();
                    $options[$group->getName()][] = $variant->getValue();
                }
            }
        }

        ksort($options);        
        return $options;
    }

我正在使用推进和 Zend 框架。我会以正确的方式解决这个问题吗?大多数人需要两种相同类型的镜片,但每只眼睛的处方不同。我将如何实现它?

我尝试过查看其他系统,例如 magento 和 oscommerce。前者让我感到困惑,我发现后者的代码很乱。由于这是一种学习体验,我希望以最好的方式做事。

谢谢

【问题讨论】:

标签: php database-design optimization e-commerce


【解决方案1】:

最好为您的所有产品和产品变体使用一张表。使基于产品的操作变得更容易。归根结底,变体只是一种产品。

所以我会建议。

products
- id
- parent_id
- name
- price
- type_id
- brand_id
- variant_id

附加字段variant_id 应引用变体组。

这种方式更简单。您可以根据变体组 id 检索所有变体。

我经常使用亚马逊产品 API。他们的做法与此类似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多