Approccio per l'inserimento di righe

1

Diciamo che ho un ordine di vendita con più file di prodotti. Più utenti inseriscono righe quindi devo verificare la concorrenza. Nel mio db l'ID dell'ordine e il numero della riga rendono il mio record unico.

In passato ho utilizzato uno dei seguenti due metodi:

  1. Inserisci un record vuoto con il valore predefinito, il numero massimo di righe disponibili e quindi aggiorna il record.
  2. Controlla se il RowNumber esiste già. In caso contrario, inserire altrimenti l'utente (di solito basta inserire con il successivo numero di riga disponibile).

Quali sono altri metodi che posso usare?

    
posta SilentRage47 28.04.2016 - 17:32
fonte

2 risposte

3

Il metodo più semplice da utilizzare per evitare la situazione è probabilmente non farlo affatto .

La maggior parte dei database si prenderà cura di te per te e genera automaticamente un id riga senza che tu debba alzare un dito.

risposta data 28.04.2016 - 17:59
fonte
1

Il tuo secondo metodo è probabilmente l'approccio migliore. Tuttavia, non hai chiesto quale fosse il "miglior approccio" o menzioni alcun problema specifico che incontri al di fuori della concorrenza, ma piuttosto:

What are other methods I can use ?

Il "numero di riga" per un ordine non è realmente necessario per l'unicità nel database. Quando viene visualizzato un ordine, l'ordine delle righe può o non può avere importanza. Se estrai il concetto di "numero di riga" nella tabella, ottieni più opzioni:

  1. Il numero di riga della tabella (non la vendita) garantirebbe univocità consentendo al tuo RDBMS di gestire la concorrenza nella maggior parte dei casi (come AUTOINCREMENT su MySQL). Se hai bisogno di un "numero di riga" puoi scrivere il codice per assegnare il numero dopo l'inserimento e poi restituire i risultati.

  2. Aggiungi un'altra chiave (come userId) alla struttura della chiave. Potrebbe essere utile per scopi di controllo, ma principalmente due utenti non possono avere lo stesso ID, quindi garantirebbe che anche se il "numero di riga" fosse identico, la chiave non lo è. Tuttavia, una vendita può avere duplicati "numeri di riga", quindi in realtà non sono "numeri di riga", ma piuttosto "la sequenza in cui un utente ha inserito prodotti per questa vendita". Il più delle volte i "numeri di riga" sarebbero sequenziali, ma ci sarebbero eccezioni ... brutti.

  3. Un nonce - "numero usato una volta" - l'uso di un algoritmo hash assegnerebbe ID univoci, ma non è molto utile in nessun altro modo (cioè non è ordinato).

Se stai cercando soluzioni specifiche per database, alcuni di essi supporteranno "Trigger" o altri codici personalizzati che puoi utilizzare per gestire la numerazione per te (come l'opzione "autoincrement" di cui ho parlato sopra, ma Oracle o MS SQL ha altre funzioni / caratteristiche più complesse).

    
risposta data 28.04.2016 - 17:58
fonte

Leggi altre domande sui tag