Domanda:
progettazione database?
Sonia
2011-02-17 12:05:28 UTC
Fino ad ora ho progettato delle semplici cose negli esercizi che ci hanno dato in classe.. Ora però sto preparando la mia tesina per fine anno e sto creando una database.. La cosa che non riesco a capire è se con sql posso creare un database in cui prevedo che in un determinato campo mi venga calcolato in automatico la somma o il prodotto di altri due campi..
Help me
Quattro risposte:
BluNotte
2011-02-17 17:26:30 UTC
In SQL ciò che vuoi può essere realizzato con le viste o con i trigger.

Supponiamo tu abbia una tabella:

Prodotto|Costo|Guadagno, dove Prodotto è chiave primaria (è un esempio)



e vuoi avere anche il campo Ricavo = Costo + Guadagno



La prima possibilità è:

creare una tabella Prodotti(Prodotto,Costo,Guadagno)

definire una vista VistaProdotti(Prodotto,Costo,Guadagno,Ricavo) come

CREATE VIEW VistaProdotti AS

SELECT Prodotto, Costo, Guadagno, Costo + Guadagno AS Ricavo

FROM Prodotti



tale vista NON sarebbe scrivibile.



La seconda possibilità è:

Definire la tabella Prodotti(Prodotto,Costo,Guadagno,Ricavo), con CHECK (Ricavo = Costo + Guadagno).

Scrivere trigger che controllano gli aggiornamenti e gli inserimenti nella tabella:



CREATE TRIGGER InserisciProdotto BEFORE INSERT ON Prodotti

FOR EACH ROW

BEGIN

IF Ricavo <> Costo + Guadagno THEN

SET Ricavo = Guadagno + Costo

END IF

END



CREATE TRIGGER AggiornaProdotto BEFORE UPDATE ON Prodotti

FOR EACH ROW

BEGIN

IF NEW.Ricavo <> NEW.Costo + NEW.Guadagno THEN

SET NEW.Ricavo = NEW.Costo + NEW.Guadagno

END IF

END



Questo secondo sistema è più complesso, ma permette di operare direttamente sulla tabella e di definire comportamenti più articolati (per esempio, si può far sì che il terzo campo venga calcolato in automatico inserendo solo i primi due).



La scelta del metodo dipende dal tempo che hai, dalle necessità e dalle possibilità offerte dai database (ad esempio, mysql non supporta le clausole check).
girossi
2011-02-17 12:34:16 UTC
si, quello che intendi tu sono le viste.

puoi creare una vista in cui alcuni campi sono presi da tabelle, e altri sono calcolati. quando farai la query sulla vista il database ti calcolerà in automatico i campi.

ovviamente le viste le puoi solo leggere, non scrivere
?
2011-02-18 03:34:10 UTC
ti hanno già risposto bene. voglio solo aggiungere che benchè sia possibile inserire in una tabella campi ottenuti da formule e/o operazioni su altri campi della tabella è un inutile spreco di spazio ed è considerata una pessima organizzazione.

nella tabella vanno inseriti solo i dati essenziali, tutti quelli che possono essere calcolati da altri campi non vanno memorizzati nel DB
Attila
2011-02-17 17:27:38 UTC
Cerca nel web "report sql", trovi informazioni utili a riguardo, in quanto non indichi quale sia il database che intendi utilizzare o utilizzi e il linguaggio che usi.


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...