2016-02-23 13 views
5

Ho un database di vendita in cui desidero ottenere i dettagli del cliente in base alla selezione di queste categorie. Ho circa 15 categorie e il mio database clienti è di 5 milioni di record. Ogni prodotto può rientrare in più di una categoria. Ho bisogno di recuperare il nome del cliente in base alla categoria selezionata. È un approccio migliore mettere tutte queste categorie come colonne o creare una tabella separata per prodotto e categoria e quindi inner join? Voglio in termini di prestazioni quale sia un approccio migliore.database a colonne

Approccio 1:

option1 qui 1 dice che il prodotto è in fase di quella categoria.

Approccio 2:

approach2

+1

L'avvicinamento numero 2 è migliore. È espandibile, se ottieni nuove categorie nell'approccio 1, allora dovresti cambiare la struttura della tabella. È anche corretto in modo relazionale. E puoi ottenere un tavolo da, avvicinandoti a 1 con l'aiuto di pivoting. – gofr1

+0

grazie gofr1. Ma il mio problema è il rendimento. L'aggiornamento di 5 milioni di record non costituirà un problema? – aditya

+0

@aditya, no. SQL Server gestisce 'JOIN' efficientemente, specialmente con l'indice corretto. –

risposta

2

Secondo approccio (Approach 2) è molto meglio soluzione piuttosto che la creazione di tavolo unico, perché non è necessario che ogni prodotto può avere tutte le categorie di approccio che si sta riservando spazio creando colonne separate anche se la categoria esiste o meno, e cosa succederebbe se in futuro se una categoria fosse aumentata dovresti modificare la struttura attuale della tabella e sarà un compito difficile.

Sì L'unione sarà un po 'lenta ma se si crea correttamente l'indice si otterrà molto meglio.