2011-09-29 92 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了很多。他們的方法與此類似。