Newsgroup: it.comp.software.database
Titolo: Consiglio strutturazione DB

Salve a tutti,
ho un sw dove si fanno ordini, ddt, fatture e le righe sono memorizzate in
una tabella.
Capità che le righe possano avere articoli, siano righe descrittive
associate ad un articolo, oppure siano descrizioni pure:
Tabella righe es. Fattura 1
-----------------------------------------------------
IDFATT	IDRIGA	ART	DESC		Qta	Pzzo
-----------------------------------------------------
1	1	1	Articolo 1	10	10
1	2		desc. secondar		
1	3	2	Articolo 2	1	1	
1	4		desc art2
1	5
1	6		contribuoto 
1	7		conai assolto
-----------------------------------------------------
Adesso in qualsiasi importazione, esportazione, evasion ecc. le righe 1,2 e
3,4 devono viaggiare a braccetto.
Se io chiedo una stampa di tutte le fatture che hanno l'articolo 1 deve
stamparmi la riga 1 e 2.
Siccome questa struttura mi è stata "imposta", ed è oltremodo scomoda,
stavo pensando a quale sarebbe la soluzione se mi si ripresenta un problema
analogo (oramai qui non posso certo modificare la struttura)
Io avevo pensato ad una tabella correlata
Tab_Descr_Estese_Articoli:
-----------------------------------------------------
FK_IDRIGA, DESCRIZIONE AS VARCHAR(1000)
-----------------------------------------------------
1, "desc. secondar"
2, "desc art2"
-----------------------------------------------------
Dove per le righe che hanno una descrizione su più di una riga, creo un
record qua.
Si complicherebbe solo la maschera visivia delle righe della fattura, che
devo "spezzare" a video e rimettere insieme in tabella. E comunque lasciare
la possibilità all'utente di scrivere del testo per farlo andare nel corpo
del documento.
Che ne dite?
Tnx

 analogo (oramai qui non posso certo modificare la struttura)
Ripetere il codice articolo in ogni riga? Tipo:
 -----------------------------------------------------
 IDFATT	IDRIGA	ART	DESC		Qta	Pzzo
 -----------------------------------------------------
 1	1	1	Articolo 1	10	10
 1	2	1	desc. secondar		
 1	3	2	Articolo 2	1	1	
 1	4	2	desc art2


  1	4	2	desc art2
Bhe sarebbe un'idea ma mi pare un po' pericolosa.
Infatti la DESC è quella dell'articolo, ma possono variarla. Alla fine
quelle righe potrebbero essere articoli a Qta e Prezzo 0, e non una
descrizione aggiuntiva.

Andrea [Work] ha scritto:

sisi ma se vogliono inserire una seconda riga di descrizione *devono*
ripetere il codice articolo. Poi evidentemente non so se puoi
implementarla programmaticamente o se devi lasciarla al buon cuore
dell'utente. Comunque mi sembra che i problemi siano ancora peggiori con
al soluzione di implementare una descrizione "secondaria" che però
potrebbe essere variata dall'utente.

 potrebbe essere variata dall'utente.
Allora diciamo il problema è di correlare in stampa e graficamente in una
maschera, una descrizione aggiuntiva.
Con la struttura attuale c'è un indice RIGARIF
 -----------------------------------------------------
 IDFATT	IDRIGA	RIGARIF	DESC		Qta	Pzzo
 -----------------------------------------------------
 1	1	1	Articolo 1	10	10
 1	2	1	desc. secondar		
 1	3	2	Articolo 2	1	1	
 1	4	2	desc art2
 1	5	2
 1	6	2	contribuoto
 1	7	2	conai assolto
 -----------------------------------------------------
Ovviamente l'id articolo è già memorizzato e correlato.
In questo modo funziona, ma in una qualsiasi query sulle righe, sono
ovviamente righe distinte.
Io mi chiedevo se meritava creare un campo su tabella parallela e renderlo
come sopra solo nella stampa del documento, e nella maschera di
inserimento.
Quello che c'è ora è il contrario, è memorizzato a righe, ma gestito
logicamente come descrizione aggiuntiva.

  -----------------------------------------------------
Cioè RIGARIF contiene il valore di IDRIGA "principale".

 del genere:
Ogni riga ha un progRiga che va da 1 ad N. Questo non č chiave, ma potrebbe
essere "chiave" all'interno dello stesso documento.
Viene utilizzato per dare l'ordine in stampa.
Lě replico quello.
PROGRIGA, 	DESC, 		RIGARIF
1		art1		1
2		desc secondar	1
3		art2		3
4		desc secondar	4
E' intricato e non poco :), ma non c'entro nulla io :D