Come posso progettare la struttura della tabella del database per una classe che varia nei suoi parametri principali, quando viene creata con un metodo factory?
Ho una fabbrica come questa:
class ProductFactory
{
public function giveMeProduct()
{
switch ($this->productLine) {
case "A": return new AProduct();
case "B": return new BProduct();
case "C": return new CProduct();
case "D": return new DProduct();
case "E": return new EProduct();
case "F": return new FOptions();
default: return new Product();
}
}
}
$product = (new ProductFactory("A"))->giveMeProduct();
Ogni prodotto ha parametri diversi. Ci sono alcuni condivisi, ma non molti.
Quindi, ad esempio una volta creato, ogni prodotto contiene le seguenti opzioni variabili:
______stages___pipes___holder___orientation (flags)
| A | x | | | |
| B | | x | x | x |
| C | | | | x |
| D | | x | x | |
| E | | x | | |
etc
Quindi posso progettare diverse tabelle, una per ogni prodotto, ma penso che farlo sarà abbastanza dispendioso in termini di risorse (tabelle aggiuntive, file, tabelle di connessione) solo per pochi parametri in una piccola piccola classe di opzioni di prodotto. Oppure posso accoppiare tutte le opzioni del prodotto in un'unica tabella, che sarà sparsa, come una sopra. Sarà uno spreco ma in altri modi (spazio del tavolo), anche se vedendo che non ho molte opzioni potrebbe andar bene.
In una parola, ho 6 classi, ognuna con diverse opzioni, molte delle quali non sono condivise tra le classi.
Come faccio a progettare una tabella per questa classe per archiviare e recuperare i dati in modo persistente? Quali modelli posso usare?