Salve a tutti, sono nuova e spero di aver scelto la sezione adatta per tutti i miei dubbi
Allora, sto progettando (a fine didattico) un db per la vendita di libri online in Oracle, ho sviluppato il diagramma delle classi e dopo tantissime versioni, sono arrivata a questo che vi allego (spero tanto si legga), che ne pensate?
DUBBIO, ho le tabelline
Ordine(
codice, importo_tot, data, pagato,spedito)
Composizione_Ordine(
codice_ord, cliente_id, libro_id, quantità, prezzo)
codice è chiave primaria di Ordine, codice_ord è primaria (parziale) in Composizione_ordine e dovrebbe essere esterna con riferimento ad Ordine,ma in realtà il codice_ord viene settato in Composizione_ordine e poi arriva in Ordine --->DUBBIO: è quindi l'inverso??ossia codice è sì chiave primaria di Ordine, ma è chiave esterna con riferimento a Composizione_ordine??? Qui non riesco a capire
Altro problemino è su un trigger, vi spiego l'idea:
- il cliente mette nel "carrello" (dal sito di vendita in pratica) gli articoli scelti, alla fine dell'operazione decide se procedere con l'ordine cliccando su un tasto conferma;
- cliccando conferma verranno caricate nella tabellina Composizione_ordine le tuple corrispondenti;
(ma completo è settato a 'no'). credo che farò questa operazione con una funzione pl/sql ;
- dal sito ci sarà il riepilogo dell'ordine, una volta cliccato il tasto procedi all'acquisto la variabile completo in Compozione_ordine sarà settata a 'si' (sempre, credo, con una funzioncina pl/sql);
-nella tabella Composizione_ordine quando completo=si deve succedere che viene inserita la corrispondente riga in Ordine e questo dovrei farlo un trigger, ma non riesco a farlo funzionare bene
create or replace TRIGGER INSERISCI_ORDINE
AFTER UPDATE OF COMPLETO ON COMPOSIZIONE_ORDINE
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
WHEN(NEW.COMPLETO='si' AND OLD.COMPLETO='no')
BEGIN
INSERT INTO ORDINE VALUES ( :NEW.CODICE_ORD , 0, SYSDATE, 'no','no');
END;
Funziona, ma non come dovrebbe perchè non sceglie in modo univoco il codice, ci vorrebbe una SELECT DISTINTIC, ma come la metto?!
L'importo totale lo metto a zero perchè poi farò un altro trigger, spero! so che potrei fare tutto assieme, ma da come si è capito non sono ferrata in sql
Scusate se ho scritto troppo e grazie mille per la vostra pazienza
Allegati: