PDA

View Full Version : [Database] - tabella conversione


holyfather
11-05-2011, 16:13
Salve ragazzi,

vi spiego il mio problema, ipotizziamo io abbia una tabella con delle unità di misura in vari sistemi . Ipotizziamo che io abbia quindi una tabella sistemi che mi tiene traccia di ciò.

Tabella
idTabella
idsistema
lunghezza
temperatura

Sistema
idSistema
Descrizione // europeo US

Ipotizziamo che io voglio avere una tabella ad esempio conversione, dove io salvando ad esempio in tabella tutti i valori in mm , poi possa convertirli in inch. Oppure da °C a °F.

Il mio problema è che per fare le conversioni nel primo caso ci vuole una proporzione nel secondo una formula. Non è un valore costante per cui ad esempio moltiplico i mm per tale costante e ottengo gli inch.

Qualcuno saprebbe aiutarmi ?
grazie :D

Gimli[2BV!2B]
11-05-2011, 22:37
Formula per convertire pollici in mm:38.1 [mm] = 1.5 [in] * 25.4 [mm/in] + 0

y [mm] = x [in] * K [mm/in] + C
K = 25.4
C = 0
Direzione (scelta): in -> mm
Inversa:x [in] = ( y [mm] - C ) / K [mm/in]

Formula per convertire °C in °F: 95 [°F] = 35 [°C] * 9/5 + 32

y [°F] = x [°C] * K + C
K = 1.8
C = 32
Direzione (obbligata): °C -> °F
Inversa:x [°C] = ( y [°F] - C ) / K

holyfather
12-05-2011, 09:14
;35133412']Formula per convertire pollici in mm:38.1 [mm] = 1.5 [in] * 25.4 [mm/in] + 0

y [mm] = x [in] * K [mm/in] + C
K = 25.4
C = 0
Direzione (scelta): in -> mm
Inversa:x [in] = ( y [mm] - C ) / K [mm/in]

Formula per convertire °C in °F: 95 [°F] = 35 [°C] * 9/5 + 32

y [°F] = x [°C] * K + C
K = 1.8
C = 32
Direzione (obbligata): °C -> °F
Inversa:x [°C] = ( y [°F] - C ) / K

Si quello è ok, ma volevo sapere la soluzione a livello di tabelle / campi nel database

sottovento
12-05-2011, 09:41
Si quello è ok, ma volevo sapere la soluzione a livello di tabelle / campi nel database

Quello che Gimli ti suggeriva era di memorizzare le informazioni sfruttando il fatto che le conversioni fra diversi sistemi di misura sono normalmente di tipo lineare, cioe' esprimibili come:

y = A*x + B

Quindi puoi memorizzare A e B nel tuo database

holyfather
12-05-2011, 14:50
Quello che Gimli ti suggeriva era di memorizzare le informazioni sfruttando il fatto che le conversioni fra diversi sistemi di misura sono normalmente di tipo lineare, cioe' esprimibili come:

y = A*x + B

Quindi puoi memorizzare A e B nel tuo database

:D scusate la svamperia :-) ora ci penso su!

holyfather
13-05-2011, 10:51
Salve, ma non p possibile fare ad esempio un campo FORMULA
dove si mette un incognita X , ad esempio

X*9/5 + 32 e poi quando si fa la query fare in modo da mettere l'X e far calcolare il valore in automatico ?

MarcioPG
13-05-2011, 14:51
Non penso si possa far fare direttamente al DB (almeno non con MySQL).

Puoi eventualmente memorizzare una formula secondo la sintassi del linguaggio di programmazione dell'applicativo e poi farla valutare a runtime dall'appilcazione dopo aver settato le variabili di input.

Es. per PHP: memorizzi nel DB la stringa:
return ($coef*45.3)+$offset;

Poi nel codice, dopo aver assegnato ad es. alla variabile $formula la stringa estratta nel DB:

$coef=2.1;
$offset = 0.2;
$result = eval($formula);


$result varra' 95.33.

Io in un'applicazione ho campi del DB con parti di codice php con addirittura strutture condizionali (if,switch,ecc - per calcoli di tariffazioni contrattuali).

Ovviamente il codice contenuto nel DB deve essere non originato ne modificabile dagli utenti (l'eval io lo inserisco anche in un metodo di una classe dedicata; per ulteriore "isolamento").

insane74
13-05-2011, 14:55
se stai usando oracle non potresti usare usare una function e basta? :stordita:

un bel select funzione(x,y) from dual e risolvi tutto.

MarcioPG
13-05-2011, 14:57
Dovrebbe definire una (o due) funzioni nuove ogni volta che aggiunge alla tabella delle unita' di misura qualcosa di nuovo.

Lui invece vorrebbe (se ho capito bene) aggiungere sempre e solo dati al DB a runtime senza dover andare a toccare "i sorgenti" (comprendendo quindi l'SQL di definizione del DB).

holyfather
15-05-2011, 15:55
Dovrebbe definire una (o due) funzioni nuove ogni volta che aggiunge alla tabella delle unita' di misura qualcosa di nuovo.

Lui invece vorrebbe (se ho capito bene) aggiungere sempre e solo dati al DB a runtime senza dover andare a toccare "i sorgenti" (comprendendo quindi l'SQL di definizione del DB).

esatto :-)