Дизайн базы данных для продуктов и вариантов продукта - PullRequest
0 голосов
/ 29 сентября 2011

Я создаю коммерческий сайт и изучаю различные способы показа продуктов с вариантами. Я пытаюсь сделать это для контактных линз и удивляюсь, как лучше.

Продукты могут быть либо простыми, такими как чехол для объектива или решение для линз, у которых нет вариантов, либо в случае контактной линзы каждая линза может иметь до трех конфигурируемых вариантов, в зависимости от объектива, для рецепта ( например, мощность, базовая кривая, диаметр).

В моей структуре у меня есть простые продукты как просто продукт, без родителя. Контактная линза будет сохранена как продукт, и каждый вариант будет сохранен как отдельный продукт, ссылающийся на своего родителя, а сами варианты будут связаны с использованием таблицы 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. Первое смущает меня, и я нахожу код грязным во втором. Поскольку это учебный опыт, я бы хотел сделать все как можно лучше.

Спасибо

1 Ответ

3 голосов
/ 29 сентября 2011

Лучше использовать одну таблицу для всех ваших продуктов и вариантов продуктов. Так что операции на основе продуктов становятся проще. В конечном итоге вариант - это только продукт.

Так что я бы предложил.

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

Дополнительное поле option_id должно ссылаться на группу вариантов.

Так проще. И вы можете получить все варианты на основе идентификатора группы вариантов.

Я много играл с API продукта Amazon. Их подход похож на это.

...