View Full Version : Problema con database
DigitalKiller
25-08-2005, 11:57
Ho un database con due tabelle. La prima tabella (A) contenente tutte le fatture registrate con la chiave composta da 2 campi (num. di registrazione e campo di controllo). La seconda tabella (B), invece contiene le informazioni relative alle fatture messe in pagamento e la chiave è composta da due campi (num. di registrazione e campo di controllo).
Entrambe le tabelle, quindi, hanno le stesse chiavi.
Definendo una relazione fra queste due tabelle, in B vengono giustamente inserite le chiavi della tabella A. In questo modo, però, la chiave esterna rispecchia il contenuto della chiave interna..Lo so, è una domanda stupida, ma è corretto? o posso evitare questo "problema" utilizzando la chiave interna della tabella B come chiave esterna della tabella A?
Ps. uso mysql e dbdesigner4
BlueDragon
25-08-2005, 21:32
In questo modo, però, la chiave esterna rispecchia il contenuto della chiave interna..
Intendi dire che i due campi (num. di registrazione e campo di controllo) sono chiave della tabella B? Ossia che su B puoi identificare univocamente un record tramite quei due soli campi, e che quindi vi è una relazione 1 ad 1 tra le due tabelle? In tal caso puoi semplicemente fare una tabella unica se ti disturba avere una copia dei dati delle chiavi, altrimenti..se non è così...non ho capito qual'è il problema :)
DigitalKiller
26-08-2005, 09:38
Intendi dire che i due campi (num. di registrazione e campo di controllo) sono chiave della tabella B? Ossia che su B puoi identificare univocamente un record tramite quei due soli campi, e che quindi vi è una relazione 1 ad 1 tra le due tabelle? In tal caso puoi semplicemente fare una tabella unica se ti disturba avere una copia dei dati delle chiavi, altrimenti..se non è così...non ho capito qual'è il problema :)
Cerco di spiegare meglio il problema.
Il database originario è un DB2 ed è strutturato in questo modo:
Tabella A
+--------------------------------------------------------------------+
|NUM_____|CONTR_____|COD.FORNITORE_____|IMPORTO_____|ALTRI..|
+--------------------------------------------------------------------+
|50_______|1_________|5500_______________|2.500,50_____|______|
|51_______|0_________|3368_______________|100,18_______|______|
|52_______|998_______|5500_______________|1300,10______|______|
+--------------------------------------------------------------------+
Tabella B
+----------------------------------+
|NUM___|CONTR|DATA___|ALTRI.. |
+----------------------------------+
|50_____|1____|30/03/05|________|
|52_____|998__|05/02/05|________|
+----------------------------------+
Io esporto i dati in un file di testo e li carico in una "replica" fatta in mysql.
Creando una relazione fra le tabelle, il risultato è questo:
Tabella B
+---------------------------------------------+
|NUM__|CONTR|NUM|CONTR|DATA____|ALTRI.. |
+---------------------------------------------+
|50____|1____|50__|1_____|30/03/05|_______|
|52____|998__|52__|998___|05/02/05|_______|
+---------------------------------------------+
Cerco di spiegare meglio il problema.
Il database originario è un DB2 ed è strutturato in questo modo:
Tabella A
+--------------------------------------------------------------------+
|NUM_____|CONTR_____|COD.FORNITORE_____|IMPORTO_____|ALTRI..|
+--------------------------------------------------------------------+
|50_______|1_________|5500_______________|2.500,50_____|______|
|51_______|0_________|3368_______________|100,18_______|______|
|52_______|998_______|5500_______________|1300,10______|______|
+--------------------------------------------------------------------+
Tabella B
+----------------------------------+
|NUM___|CONTR|DATA___|ALTRI.. |
+----------------------------------+
|50_____|1____|30/03/05|________|
|52_____|998__|05/02/05|________|
+----------------------------------+
Io esporto i dati in un file di testo e li carico in una "replica" fatta in mysql.
Creando una relazione fra le tabelle, il risultato è questo:
Tabella B
+---------------------------------------------+
|NUM__|CONTR|NUM|CONTR|DATA____|ALTRI.. |
+---------------------------------------------+
|50____|1____|50__|1_____|30/03/05|_______|
|52____|998__|52__|998___|05/02/05|_______|
+---------------------------------------------+
Scusa, io non ho ben capito perchè imposti la chiave sui due campi... in questo caso puoi avere più volte lo stesso numero di fattura con campo di controllo diverso, ma credo che ti basti solo avere la chiave sul numero di fattura, in modo da rendere il rercord univoco in base al solo numero di fattura..
Cmq, se per "mettere in relazione.." intendi fare un join tra le tabelle, il risultato che ottieni è corretto, poichè di default viene utilizzato un join interno (inner join) che mette in relazione tutte le righe di una tabella che sono presenti nell'altra tabella, secondo la chiave specificata, tralasciando le righe che non soddisfano la chiave.
In pratica le righe con NUM__ 50 e 52 sono presenti in entrambe le tabelle, percui le visualizzi nel risultato; quella con il NUM__ 51 è presente solo in una e quindi non la visualizzi..
Devi utilizzare un join esterno (outer join..)
In pratica per visualizzare tutte le righe della prima tabella, oltre a quelle che soddisfano la relazione con la seconda, dovresti usare una query del tipo..
select * from tabella1 left outer join tabella2 on tabella1.num = tabella2.num;
L'unico inconveniente è che mysql fino alla versione 4.1, ossia quella attuale, non supporta i join, quindi dovresti adattare la query alla sintassi di mysql attuale..
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.