83 messaggi dal 30 luglio 2003
Ciao a tutti,
sto definendo la nuova base dati del mio sito di e-commerce.
Vorrei sapere quale delle due seguenti soluzioni mi consigliate dal punto di vista prestazionale.

Prima descrivo cosa mi serve:
Ho una tabella (tabMagazzino) dove salvo i vari dati dei prodotti (Descrizione, Produttore, Distributore, ...). Per generalizzare la base dati vorrei mappare alcuni campi come "Produttore" e "Distributore" con una delle seguenti soluzioni che costituiscono il fulcro del problema

1) Utilizzo una tabella generica che ho definito "tabCampi" che è costituita dalle seguenti colonne:
ID_Campo --> chiave primaria
NomeCampo --> Nome del campo che devo mappare (es: Produttore)
ValoreCampo --> Valore che può assumere il campo mappato (es: Warner)

Alcuni record di questa tabella potrebbero essere per esempio i seguenti:
ID_Campo -- NomeCampo -- ValoreCampo
1 -- Distributore -- Sony
2 -- Produttore -- Disney
3 -- Distributore -- Universal

accanto a questa tabella utilizzo delle viste per recuperare i dati salvati. Avrò quindi, per esempio, "viewProduttore" e "viewDistributore".

Per recuperare i dati alla fine utilizzerò un'altra vista chiamata viewProdotti con le join alle viste sopra definite.

2)L'altra soluzione ha come differenza sostanziale di utilizzare tante tabelle quanti sono i campi mappati quindi per il nostro esempio avrò "tabDistributore" e "tabProduttore".

Per recuperare i dati utilizzerò anche in questo caso una vista questa volta con le join alle tabelle sopra definite.

Quale soluzione mi consigliate? C'è una grossa differenza di carico tra le 2 soluzioni?

Grazie per l'aiuto e ciao a tutti
Modificato da torin.it il 22 novembre 2007 18.41 -
Io ti consiglio la seconda soluzione (una tabella dei produttori e una dei distributori) ma non tanto per ragioni prestazionali (sebbene anche da questo punto di vista ci possono essere dei miglioramenti, "risparmiando" la vista), quanto per la scalabilità dell'applicazione. Sebbene le entità "produttore" e "distributore" in questo momento possano essere sovrapponibili, in un futuro potrebbero avere esigenze/caratteristiche diverse (e a quel punto ti basta aggiungere i campi necessari alla tabella corrispondente)

HTH

Matteo Casati
GURU4.net
83 messaggi dal 30 luglio 2003
Grazie per la risposta, modificherò la base bati in questo modo.

Un'altra domanda sempre sulla stessa tabella tabMagazzino. Se "mappo" molti campi di questa tabella con altrettante tabelle, sempre dal punto di vista prestazionale, è meglio di avere delle informazioni di tipo varchar ripetute nei record? Quindi se abbiamo una tabella con 20 campi di cui un 12 mappabili conviene mapparli tutti o solo in parte scegliendo quelli che contengono più informazioni. Conviene mappare solo i campi varchar che contengono molte informazioni o anche quelli più piccoli?

Grazie per le risposte
torin.it ha scritto:
Grazie per la risposta


Prego, figurati

sempre dal punto di vista prestazionale, è meglio di avere delle informazioni di tipo varchar ripetute nei record?


Non ho capito esattamente cosa intendi con "informazioni ripetute nei record" ma se è quel che penso io è *sempre* meglio non averne proprio. Un database relazionale, sulla base di una chiave (tipicamente la PK della tabella principale) è in grado di ricostruire le relazioni fra record in tabelle diverse. Se hai problemi di prestazioni (ma di quanti record stiamo parlando? milioni e milioni?) la soluzione non è replicare i dati in più tabelle (salvo casi eccezionali) ma ottimizzare/configurare correttamente la base dati.

La replica di un dato ha più svantaggi che vantaggi, primo fa tutti il fatto che, se modifico un record devo (più o meno automaticamente) ricordarmi di andare ad aggiornare anche tutte le sue repliche

Per quanto riguarda l'ottimizzazione della base dati la prima cosa da fare è impostare correttamente gli indici, magari facendosi aiutare dal SQL Profiler.
Per approfondire l'argomento ti consiglio di rivolgere la domanda a qualche DBA perché... qui finiscono le mie competenze

Matteo Casati
GURU4.net

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.