DB per vendita online

di il
4 risposte

DB per vendita online

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:
17728_ba9837f98f1dca597c12eb344d046052.png
17728_ba9837f98f1dca597c12eb344d046052.png

4 Risposte

  • Re: DB per vendita online

    Io non so usare Oracle, ma immagino che la logica relazionale sia la stessa per tutte le applicazioni di database.

    lady5 ha scritto:


    DUBBIO, ho le tabelline Ordine(codice, importo_tot, data, pagato,spedito)Composizione_Ordine(codice_ord, cliente_id, libro_id, quantità, prezzo)
    Prova a leggere qui
    https://www.iprogrammatori.it/forum-programmazione/access/gestionale-prenotazione-libri-t24852.html
    in particolare il mio post del 24/6/2015 06:43.
  • Re: DB per vendita online

    OsvaldoLaviosa ha scritto:


    Io non so usare Oracle, ma immagino che la logica relazionale sia la stessa per tutte le applicazioni di database.

    lady5 ha scritto:


    DUBBIO, ho le tabelline Ordine(codice, importo_tot, data, pagato,spedito)Composizione_Ordine(codice_ord, cliente_id, libro_id, quantità, prezzo)
    Prova a leggere qui
    https://www.iprogrammatori.it/forum-programmazione/access/gestionale-prenotazione-libri-t24852.html
    in particolare il mio post del 24/6/2015 06:43.

    Innanzitutto grazie mille

    Ho letto tutta la discussione in particolare il tuo post, e finalmente mi sono tolta quel brutto dubbio sulla chiave
    Quello che aggiungerei (almeno nel mio caso) è il campo quantità in DettagliOrdini, credo sia importante, giusto?

    La cosa che mi è ancora poco chiara è il MOMENTO in cui creare una riga in Ordine

    - il cliente conferma l'ordine dal carrello....devo creare le righe in DettagliOrdini (ma avrei il problema di IDordine) e poi, magari con un trigger, inserisco la riga in Ordine???

    - oppure il cliente conferma l'ordine, creo prima la riga in Ordine (con eventuali campi non settati ancora, tipo importo_tot), poi credo quelle in DettagliOrdine e successivamente mi setto il campo importo totale

    Il trigger devo riscriverlo


    Ps: perdonate l'ignoranza, ma questo famoso (non per me ) database di esempio Northwind dove si può visionare??

    Grazie mille a tutti
  • Re: DB per vendita online

    lady5 ha scritto:


    Quello che aggiungerei (almeno nel mio caso) è il campo quantità in DettagliOrdini, credo sia importante, giusto?
    OK.

    lady5 ha scritto:


    La cosa che mi è ancora poco chiara è il MOMENTO in cui creare una riga in Ordine

    - il cliente conferma l'ordine dal carrello....devo creare le righe in DettagliOrdini (ma avrei il problema di IDordine) e poi, magari con un trigger, inserisco la riga in Ordine???

    - oppure il cliente conferma l'ordine, creo prima la riga in Ordine (con eventuali campi non settati ancora, tipo importo_tot), poi credo quelle in DettagliOrdine e successivamente mi setto il campo importo totale

    Il trigger devo riscriverlo
    Credo che queste domande entrano più nello specifico di Oracle. Ti consiglio, assodato che questa è la struttura giusta (quindi questo thread avrebbe assolto al proprio compito), di aprire un nuovo thread in Oracle e riesporre il problema...volendo puoi sempre indicare il link di questa discussione per dare una idea più completa.
    Io uso Access e provo a dirti quello che so. In Access non esiste la parola "trigger"...quindi non so a cosa ti riferisci. Più comunemente in queste applicazioni si parla di maschera/sottomaschera e a te torna utile avere una maschera Ordini con sottomaschera DettagliOrdini. In alto compili i campi di un NUOVO Ordine e in basso ne compili i Dettagli...

    lady5 ha scritto:


    perdonate l'ignoranza, ma questo famoso (non per me ) database di esempio Northwind dove si può visionare??
    Effettivamente si tratta di un database molto legato ad Access. Lo trovi in molti manuali di base (Access)...fai una ricerca su internet...dovresti trovarlo facilmente...
  • Re: DB per vendita online

    OsvaldoLaviosa ha scritto:


    Credo che queste domande entrano più nello specifico di Oracle. Ti consiglio, assodato che questa è la struttura giusta (quindi questo thread avrebbe assolto al proprio compito), di aprire un nuovo thread in Oracle e riesporre il problema...volendo puoi sempre indicare il link di questa discussione per dare una idea più completa.
    Io uso Access e provo a dirti quello che so. In Access non esiste la parola "trigger"...quindi non so a cosa ti riferisci. Più comunemente in queste applicazioni si parla di maschera/sottomaschera e a te torna utile avere una maschera Ordini con sottomaschera DettagliOrdini. In alto compili i campi di un NUOVO Ordine e in basso ne compili i Dettagli...
    Assolutamente sì, il thread ha assolto al proprio compito
    Ok, farò come hai detto, aprirò un nuovo thread in Oracle

    Ti ringrazio tantissimo, ma anche io, non usando Access, non riesco a seguire il tuo ragionamento....non so cosa siano le maschere

    Grazie mille per il grande aiuto che mi hai dato...
Devi accedere o registrarti per scrivere nel forum
4 risposte