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:
-
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.
-
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.
-
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).