Corretto inserimento di righe in Ordine

di il
6 risposte

Corretto inserimento di righe in Ordine

Ciao a tutti, sto progettando un DB in Oracle (avvalendomi di sql developer) per la vendita di libri online. Il tutto poi verrà gestito da una interfaccia in Java che si connetterà al DB.
Gìà mi sono tolta vari dubbi nella discussione
http://www.iprogrammatori.it/forum-programmazione/progettazione-database/per-vendita-online-t24861.html

Ma un dubbio mi è rimasto,ricapitolo le tabelle interessate:

Ordine(codice, IDcliente,importo_tot, pagato, spedito)

DettagliOrdini(IDdettagli, IDordine, IDlibro, quantità)

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 e poi, magari con un trigger, inserisco la riga in Ordine???(ma avrei il problema di IDordine che è chiave esterna)

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

L'inserimento prima in Ordine o in DettagliOrdine avverrà con una funzione pl/sql che prende i dati dall'interfaccia java inseriti dal cliente e li passa al DB.

Spero tanto che qualcuno possa aiutarmi

grazie

6 Risposte

  • Re: Corretto inserimento di righe in Ordine

    La risposta è ovvia, oltre che scontata:

    prima si crea l'Ordine (cioè quello che si chiama 'testata'), poi crei i dettagli.
    Anche perché non è immaginabile che tu possa valorizzare l'IDOrdine nella riga di ogni Dettaglio, se prima non hai creato l'Ordine, e ricavato l'IDOrdine.

    Trigger? Cosa c'entra il trigger ? I trigger servono ad altro...

    E' fondamentale che invece ti preoccupi di racchiudere il tutto all'interno di una transazione.
  • Re: Corretto inserimento di righe in Ordine

    gibra ha scritto:


    La risposta è ovvia, oltre che scontata:

    prima si crea l'Ordine (cioè quello che si chiama 'testata'), poi crei i dettagli.
    Anche perché non è immaginabile che tu possa valorizzare l'IDOrdine nella riga di ogni Dettaglio, se prima non hai creato l'Ordine, e ricavato l'IDOrdine.

    Trigger? Cosa c'entra il trigger ? I trigger servono ad altro...

    E' fondamentale che invece ti preoccupi di racchiudere il tutto all'interno di una transazione.

    Ok, ho capito...hai ragione ero io ad essermi fissata con i trigger

    Però non mi è chiaro cosa intendi per transazione ?

    Grazie mille
  • Re: Corretto inserimento di righe in Ordine

    lady5 ha scritto:


    gibra ha scritto:


    Però non mi è chiaro cosa intendi per transazione ?
    Vuoi dire che non sai cos'è una transazione?
    Attenta che non è un opzione (ovvero facoltativa) ma è assolutamente fondamentale.
    Ti suggerisco di documentarti per bene, altrimenti rischi grossi problemi.
    Cerca TRANSACTION...

    Nel tuo caso si hanno diverse operazioni in sequenza:
    1. La registrazione dell'ordine (testata)
    2. <n> registrazioni dei singoli dettagli (5 libri? 5 operazioni)
    3. calcoli vari, ecc.


    Ora, se per qualsiasi motivo (errore nel programma, nei dati, ecc.) NON TUTTE le registrazioni vanno a buon fine (metti che il terzo libro ha un problema, non è disponibile, e così via), ti ritrovi con un ordine non conforme.
    Non vorrai far pagare al cliente 5 libri, e poi gliene mandi 2? Vero?

    La transazione, assicura questo:
    - o tutte le operazioni vanno a buon fine
    - oppure tutto viene annullato.

    Per cui, non solo è indispensabile usare la transazione, ma occorre anche gestirla in caso di errore.
  • Re: Corretto inserimento di righe in Ordine

    Vuoi dire che non sai cos'è una transazione?
    Attenta che non è un opzione (ovvero facoltativa) ma è assolutamente fondamentale.
    Ti suggerisco di documentarti per bene, altrimenti rischi grossi problemi.
    Cerca TRANSACTION...

    Nel tuo caso si hanno diverse operazioni in sequenza:
    1. La registrazione dell'ordine (testata)
    2. <n> registrazioni dei singoli dettagli (5 libri? 5 operazioni)
    3. calcoli vari, ecc.


    Ora, se per qualsiasi motivo (errore nel programma, nei dati, ecc.) NON TUTTE le registrazioni vanno a buon fine (metti che il terzo libro ha un problema, non è disponibile, e così via), ti ritrovi con un ordine non conforme.
    Non vorrai far pagare al cliente 5 libri, e poi gliene mandi 2? Vero?

    La transazione, assicura questo:
    - o tutte le operazioni vanno a buon fine
    - oppure tutto viene annullato.

    Per cui, non solo è indispensabile usare la transazione, ma occorre anche gestirla in caso di errore.
    Perdonami, ma ora devo capire , per transazione intendi sequenze di istruzioni sql che andranno nel blocco BEGIN-END, giusto?? Perchè io devo realizzare Funzioni in pl/sql in cui metterò operazioni tipo quelle che hai scritto tu nei punti 1. 2. e 3. E' questo che intendi???

    Poi utti i possibili vincoli li sto implementando con on delete cascade, vari check, on update cascade (ricreato con trigger perchè in oracle non c'è) e trigger vari che vanno ad effettuare controlli e calcoli.
    Man mano che mi viene in mente qualche controllo/vincolo lo implemento.

    Cmq ti ringrazio tantissimo
  • Re: Corretto inserimento di righe in Ordine

    lady5 ha scritto:


    Perdonami, ma ora devo capire , per transazione intendi sequenze di istruzioni sql che andranno nel blocco BEGIN-END, giusto??
    Invece che 'tentare' a caso di capire cosa che non conosci DEVI documentarti, come ti ho suggerito:

    Cerca su Google: oracle transaction

    Transactions
    http://docs.oracle.com/cd/E11882_01/server.112/e10713/transact.htm#CNCPT037

    13.3.1 START TRANSACTION, COMMIT, and ROLLBACK Syntax
    https://docs.oracle.com/cd/E17952_01/refman-5.1-en/commit.html
  • Re: Corretto inserimento di righe in Ordine

    Ok, messaggio ricevuto, però ci tengo a precisare che non sto tentando a caso assolutamente nulla!
    Grazie mille per i link
Devi accedere o registrarti per scrivere nel forum
6 risposte