Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 09-10-2008, 10.32.47   #1
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
[MySQL] - Trigger? o no?

Salve ragazzi, chiedo aiuto perchè sono disperato. Devo ultimare un progetto per un esame universitario e sono a un punto morto. Non sono molto esperto di SQL, anzi diciamo che è solo da un mese che ci sto mettendo mano. Vi spiego che cosa devo realizzare, poi se qualcuno è esperto in materia e riesce ad aiutarmi lo ringrazio fin da subito.

Sto realizzando un database su un sistema di videonoleggio.

Tra le varie tabelle che ho realizzato ce ne sono due in particolare: NOLEGGIO e DVD:

Quota:
CREATE TABLE noleggio(
id_nol int(11) auto_increment primary key,
DataRestEff date,
Cliente int(11) references cliente(id_cliente),
dvd int(11) references dvd(id_dvd),
inizio timestamp references giorno(data_iniz),
tipo tinyint(1) default 0 COMMENT '0 se è un noleggio passato, 1 se è un
noleggio in corso'
)

Quota:
CREATE TABLE dvd(
id_dvd int(10) auto_increment primary key,
data_fabb date,
quantita tinyint(1) NOT NULL default '5',
id_film int(4) references film(id_film),
check(quantita >= 0 and quantita <=5)
)

Quello che devo fare a questo punto è questo:

1) Inserire un nuovo noleggio corrente nella tabella NOLEGGIO. Di conseguenza l’attributo quantità nella tabella DVD relativo al dvd che è noleggiato viene decrementato di 1 unità automaticamente . E' possibile inserire un noleggio corrente solo se l’attributo quantità relativo al dvd che si vuole noleggiare è maggiore di zero.

2) Aggiorna un noleggio da corrente a passato nella tabella NOLEGGIO, nel momento in cui il dvd viene restituito. Di conseguenza l’attributo quantità nella tabella DVD relativo al dvd che è noleggiato viene incrementato di una unità automaticamente.

Vi prego se c'è qualcuno che sa metterci mano e ha tempo da perderci mi date una mano? sono disperato

Ultima modifica di Poseidon : 13-10-2008 alle ore 09.50.43
Poseidon non è collegato   Rispondi citando
Vecchio 09-10-2008, 13.04.18   #2
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Un appunto sulla creazione delle tabelle.
Per il campo id_nol di noleggio e id_dvd di dvd puoi evitare di scrivere NOT NULL, i campi auto_increment non saranno mai nulli, inoltre primary key sottointende NOT NULL.
NOT NULL lo metteri per il campo quantita di DVD invece, qui sono andato a occhio perché non so come lo hai pensato.

Che tipo di progetto è? Una web application? Che linguaggio stai utilizzando?
Alhazred non è collegato   Rispondi citando
Vecchio 09-10-2008, 13.15.20   #3
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
Grazie per le dritte adesso sistemo il codice. E' un progetto per un piccolo database su un sistema di videonoleggio. Uso MySQL.

Per quanto riguarda il problema specifico che ho proposto, nessuna idea?

Ultima modifica di Poseidon : 09-10-2008 alle ore 15.13.44
Poseidon non è collegato   Rispondi citando
Vecchio 09-10-2008, 15.51.35   #4
micmen
Junior Member
 
Registrato: 11-09-2008
Messaggi: 53
micmen promette bene
Ma è un progetto java stand-alone usando JDBC ?
micmen non è collegato   Rispondi citando
Vecchio 10-10-2008, 08.33.55   #5
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
umm no java non c'entra niente, sto usando MySQL
Poseidon non è collegato   Rispondi citando
Vecchio 10-10-2008, 08.52.45   #6
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Si, ma la domanda penso sia questa in realtà: il database, una volta messo in funzione, farà tutto da solo e dall'esterno si potrà interagire su di esso solo tramite la console di MySQL o sarà possibile gestirlo con un qualche programma in dotazione ad esempio al proprietario della videoteca?
Non penso si possa fare senza avere un software che interagisce col database, sennò chi gli dice che un dvd è stato affittato oppure che è stato restituito? Ad un cliente che vuole sapere i film in listino oppure allo stesso proprietario della videoteca penso tu debba presentare un interfaccia diversa dalla console di MySQL, non dovrà mica scrivere
select * from film;

Ultima modifica di Alhazred : 10-10-2008 alle ore 08.58.13
Alhazred non è collegato   Rispondi citando
Vecchio 10-10-2008, 10.00.14   #7
micmen
Junior Member
 
Registrato: 11-09-2008
Messaggi: 53
micmen promette bene
Quoto Alhazred. Un sw. è composto di solito da 3 strati: Interfacce grafiche, Manager e Gestione dei Dati. Per intenderci, i controlli di cui parli (ad es. verifica quantità DVD >0) vanno fatti nel programma (Manager) che interagisce col DB (Gestione Dati). Se non è Java, sarà C, C++, VISUAL BASIC, COBOL...
micmen non è collegato   Rispondi citando
Vecchio 13-10-2008, 08.34.56   #8
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
aah ok capito il dubbio: no non mi serve alcuna interfaccia grafica, perkè è parte di 1 progetto per un esame universitario, e non mi si richiede alcuna interfaccia grafica.
Poseidon non è collegato   Rispondi citando
Vecchio 13-10-2008, 09.21.04   #9
micmen
Junior Member
 
Registrato: 11-09-2008
Messaggi: 53
micmen promette bene
Quindi deduco che ti servono solo delle query che eseguono le operazioni di cui parlavi.
micmen non è collegato   Rispondi citando
Vecchio 13-10-2008, 09.45.48   #10
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
Esattamente .. io ho pensato 1 codice di questo tipo, ma non funziona e ovviamente non essendo 1 esperto non ne capisco il motivo:

Quota:
delimiter //
create trigger decrementa_quantita
after insert on noleggio
for each row
BEGIN
IF dvd.id_dvd in (select dvd.id_dvd
from dvd join noleggio
on dvd.id_dvd = noleggio.dvd
where DataRestEff > now())
THEN
update dvd
set quantita = quantita - 1
END IF;
END; //
create trigger incrementa_quantita
after update of tipo and DataRestEff on noleggio
for each row
BEGIN
IF dvd.id_dvd in (select dvd.id_dvd
from dvd join noleggio
on noleggio.dvd = dvd.id_dvd
where noleggio.DataRestEff < now())
THEN
update dvd
set quantita = quantita + 1
END IF;
END; //
delimiter;

Ultima modifica di Poseidon : 13-10-2008 alle ore 10.20.35
Poseidon non è collegato   Rispondi citando
Vecchio 13-10-2008, 13.50.12   #11
micmen
Junior Member
 
Registrato: 11-09-2008
Messaggi: 53
micmen promette bene
Da cosa capisci che non funziona, hai dei messaggi d'errore o semplicemente vedi che le operazioni non vengono eseguite ? O addirittura non ti crea i trigger ?
micmen non è collegato   Rispondi citando
Vecchio 13-10-2008, 14.42.32   #12
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
dunque se eseguo questo codice nel mio database, in cui le due tabelle coinvolte dal trigger sono come quelle definite sopra, usando MySQL Query Browser mi da semplicemente errore.

"You tried to execute an empty string."

Cosa che mi sembra assurda.
Poseidon non è collegato   Rispondi citando
Vecchio 13-10-2008, 14.49.23   #13
micmen
Junior Member
 
Registrato: 11-09-2008
Messaggi: 53
micmen promette bene
La creazione delle tabelle a me è ok, mentre quando creo i trigger mi da errore sul secondo quando trova l'and. Ma come condizione del trigger non basterebbe solo "on update of DataRestEff" che da quanto capisco è la data di restituzione del dvd che viene aggiornata da una funzione ad hoc al momento della restituzione del dvd ?
micmen non è collegato   Rispondi citando
Vecchio 13-10-2008, 15.00.09   #14
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
beh la DataRestEff viene aggiornata manualmente, inserendo la data di restituzione del dvd, nel momento quello viene restituito, non ho scritto alcuna particolare funziona per questo.

Tu dici quindi di ridurre il codice a questo? ..

Quota:
delimiter //
create trigger decrementa_quantita
after insert on noleggio
for each row
BEGIN
IF dvd.id_dvd in (select dvd.id_dvd
from dvd join noleggio
on dvd.id_dvd = noleggio.dvd)
THEN
update dvd
set quantita = quantita - 1
END IF;
END; //
create trigger incrementa_quantita
after update of DataRestEff on noleggio
for each row
BEGIN
IF dvd.id_dvd in (select dvd.id_dvd
from dvd join noleggio
on noleggio.dvd = dvd.id_dvd
where noleggio.DataRestEff < now())
THEN
update dvd
set quantita = quantita + 1
END IF;
END; //
delimiter;
?

Ultima modifica di Poseidon : 13-10-2008 alle ore 15.27.55
Poseidon non è collegato   Rispondi citando
Vecchio 13-10-2008, 15.43.49   #15
micmen
Junior Member
 
Registrato: 11-09-2008
Messaggi: 53
micmen promette bene
Credo che se si aggiorna DataRestEff vuol dire che il dvd è stato restituito, quindi come condizione dovrebbe essere sufficiente.
micmen non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
[MYSQL] perkè questo codice non funziona? Poseidon Programmazione 6 03-11-2008 02.44.12
[MYSQL] On delete cascade Alhazred Programmazione 2 01-10-2008 13.49.20
[MySQL] SQLException: Before start of result set Alhazred Programmazione 5 20-07-2008 18.57.21
[MySQL] query complessa Thor Programmazione 5 29-08-2005 04.34.15
[mysql] nana_d Programmazione 2 20-04-2005 10.38.17

Orario GMT +2. Ora sono le: 16.31.18.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.