2011-09-29 91 views
0

我正在建立一个商业网站,我一直在研究不同的方式来显示变体产品。我正在尝试这样做隐形眼镜,并想知道最好的方法是什么。产品和产品变型的数据库设计

产品可以是简单的,例如没有变型的镜片盒或镜片解决方案,或者对于隐形眼镜,每个镜片根据镜片的不同,可以有多达三种可配置的变体(取决于镜片) (如功率,基准曲线,直径)。

在我的结构中,我有简单的产品,只是一个产品,没有父母。隐形眼镜将作为产品存储,并且每个变体将作为引用其父母的单独产品存储,并且变体本身将使用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; 
    } 

我使用的是propel和Zend Framework。我是否以正确的方式去做这件事?大多数人需要两种相同的镜片类型,但每种眼睛都有不同的处方。我将如何实现这一点?

我试过看其他系统,如magento和oscommerce。前者让我感到困惑,我发现后者中的代码很混乱。由于这是一次学习经历,我想尽可能以最好的方式做事。

谢谢

+0

属于http://codereview.stackexchange.com/ –

回答

3

它更好地使用一张表为您的所有产品和产品变种。这样基于产品的操作变得更加容易。最终变体只是一种产品。

所以我会建议。

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

其他字段variant_id应引用变体组。

这样更简单。您可以根据变体组ID来检索所有变体。

我已经玩过亚马逊产品api了很多。他们的方法与此类似。