Come progettare le tabelle del database per una classe di fabbrica?

2

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?

    
posta Dennis 27.01.2015 - 15:58
fonte

1 risposta

2

Lo risolverei con tre tabelle: prodotti, caratteristiche e caratteristiche_prodotto.

Products
id     name       description  
1223   A          abcdefg
1224   B          hijklmnop
1225   C          qrstuvwxyz


features
id   name            description  
20   stages          such-and-such
21   pipes   
22   holder
23   orientation


product_features
PRIMARY KEY(product_id,feature_id)
CONSTRAINT FK_product_id FOREIGN KEY (product_id) REFERENCES products(id)
CONSTRAINT FK_feature_id FOREIGN KEY (feature_id) REFERENCES features(id)

product_id   feature_id
1223         20
1224         21         
1224         22 
1224         23 
    
risposta data 27.01.2015 - 17:37
fonte

Leggi altre domande sui tag