Вопрос

Скажем, у меня есть система с продуктами, которые могут иметь различные варианты украшения (или печати).

Большинство продуктов будут иметь аналогичный диапазон названий параметров печати, но некоторые, может быть, уникальные для одного продукта.

Например, я мог бы иметь шапку, которая может иметь три разных варианта украшения:

  1. Непреднамеренный
  2. Один цвет печати
  3. Вышивка

Моя цель пытается минимизировать имена вариантов украшения, созданные пользователями Admin, поэтому они всегда одинаковы. Т.е. я не хочу, чтобы некоторые варианты украшений называются «1 цветная печать», а затем другой называемый «один цветной печать».

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

Тем не менее, каждый вариант украшения имеет различные другие данные с ним, как стоимость установки, время производства и т. Д., Что варьируется в зависимости от продукта.

Например, Hat1 и Hat2 могут иметь вариант украшения вышивания, но стоимость установки Hat1 составляет $ 49 и стоимость установки Hat2 составляет всего 35 долларов.

Итак, мои вопросы, какой лучший способ структурировать мои сущности? Должен ли у меня три объекта: продукт, оформление и оформление? Или только два объекта: продукт и оформление?

Пожалуйста, смотрите моих примеров кода для дальнейшего понимания:

  1. Три объекты вариант
  2. Опция двух сущностей
Это было полезно?

Решение

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

Товары и украшения являются их собственными отдельными объектами, а также информация о взаимосвязи между любым данным продуктом и любым данным декорацией управляется в продуктемере. Вы можете достичь этого, используя две оретоманистые отношения.

<?php

class Product 
{   
    /** @OneToMany(targetEntity="ProductDecoration", mappedBy="product") */
    private $productDecorations;

}


class Decoration
{   
   /** @Column(type="string") */
   private $name;   

   /** @OneToMany(targetEntity="ProductDecoration", mappedBy="decoration") */
   private $productDecorations;
}

class ProductDecorations
{   

   /** @ManyToOne(targetEntity="Product", inversedBy="productDecorations") */
   private $product;

   /** @ManyToOne(targetEntity="Decoration", inversedBy="productDecorations") */
   private $decoration;

   /** @Column(type="integer") */
   private $setupCost;

   /** @Column(type="integer") */
   private $productionTime
}

Единственный способ, которым я бы порекомендовал использовать двух подходов на объект, заключается в том, что вы можете предвидеть, никогда не требуя большего, чем в столбце «Имя» для объекта декора, и вы не беспокоитесь о потенциальных проблемах нормализации базы данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top