Frage

sagen, ich habe ein System mit Produkten, die verschiedene Dekoration (oder Druck) Optionen haben kann.

Die meisten Produkte werden eine ähnliche Reihe von Druckoptionen Namen haben, aber einige vielleicht einzigartig für ein einzelnes Produkt.

Zum Beispiel könnte ich eine Kappe haben, die drei verschiedene Dekorationsmöglichkeiten haben könnte:

  1. Unbranded
  2. Ein Farbdruck
  3. Sticken

Mein Ziel versucht, Dekoration Option Namen von admin Nutzern zu minimieren, so dass sie immer gleich sind. I.E. Ich möchte nicht, einige Dekorationsmöglichkeiten genannt zu werden „1 Color Print“ und dann noch einen „One Color Print“ genannt.

Also mein Plan in der Benutzeroberfläche ist einen Tropfen zu haben, nach unten von bestehenden Namen Dekorationsmöglichkeiten, sondern auch ihnen die Möglichkeit zu geben, einen neuen hinzuzufügen (für den Rand Fälle).

Allerdings jede Dekoration Option verschiedene andere Daten mit ihm hat, wie Setup-Kosten, Produktionszeit, usw., die auf dem Produkt variieren.

Zum Beispiel Hat1 und Hat2 könnten sowohl eine Stickerei Dekoration Option, aber Hat1 das Setup kostet $ 49 und Hat2 der Setup-Kosten sind nur $ 35.

Also meine Fragen sind, was ist der beste Weg, um meine Einheiten zu strukturieren? Sollte ich drei Einheiten: Produkt, DecorationOption und DecorationOptionName? Oder nur zwei Entitäten: Produkt- und DecorationOption

Bitte beachten Sie meine Code-Beispiele für weiter verstehen:

  1. Drei Einheiten Option
  2. zwei Entitäten Option
War es hilfreich?

Lösung

Ich würde verwenden, um den drei Entity-Ansatz, mit einigen geringfügigen Unterschieden in der Semantik: Das Produkt, Dekoration und ProductDecoration. Es ist im Grunde die Idee hinter einem many-to-many-Tisch sitzen, aber Sie behandeln das als seine eigenes Objekt verbindet, in dem Sie zusätzliche Informationen speichern können.

Produkte und Dekoration sind, ihre eigenen getrennten Einheiten, und Informationen über die Beziehung zwischen einem bestimmten Produkt und einem bestimmten DecorationOption werden in ProductDecoration verwaltet. Sie können dies mit Hilfe von zwei OneToMany Beziehungen erreichen.

<?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
}

Der einzige Weg, ich würde empfehlen, die zwei Entity-Ansatz ist, wenn Sie nie mehr als die Spalte ‚Name‘ für die Dekoration Unternehmen benötigen antizipieren können, und Sie sind nicht durch mögliche Datenbanknormalisierung Fragen belästigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top