Ho le seguenti tabelle nel mio database:
Tabella di configurazione:
======================================
Start_Range | End Range | Config_id
10 | 15 | 1
======================================
Available_UserIDs
==========================
ID | UserID | Used_YN |
1 | 10 | t |
1 | 11 | f |
1 | 12 | f |
1 | 13 | f |
1 | 14 | f |
1 | 15 | f |
==========================
Users
==========================
UserId | FName | LName |
10 | John | Doe |
==========================
Questo è usato in un sistema di prenotazione ... che consente ad un amministratore di specificare un intervallo di numeri che saranno assegnati agli utenti nella tabella di configurazione. Una volta definito l'intervallo, il sistema popola la tabella Available_userIDs con tutti i numeri compresi nell'intervallo e imposta il flag Used_YN su false.
Quando gli utenti si registrano, afferrano il prossimo numero user_id che non è in uso ... e prenotalo Quindi il sistema aggiunge un record alla tabella Utenti.
Una volta che l'amministratore ha specificato un intervallo, è possibile che possano cambiarlo. Ad esempio, possono iniziare con 10-15 ... e poi quando l'intervallo è esaurito, dovrebbero essere in grado di specificare un altro intervallo come 16 - 99.
Ho inserito un vincolo univoco sulla tabella Available_UserIDs, nonché sulla tabella Users - per garantire che gli UserId non possano essere duplicati.
-
Qual è il modo migliore per impedire agli amministratori di utilizzare un intervallo già in uso? Ho pensato alle seguenti opzioni:
- Controllare la tabella Utenti per vedere se vengono utilizzati i numeri dell'intervallo di inizio o di intervallo finale. Se lo sono, supponi che tutti i numeri in mezzo siano anch'essi in uso, e rifiuta l'intervallo.
- Permetti loro di specificare ciò che vogliono, prova a compilare la tabella Available_UserIDs. Se ci sono duplicati, ignora il messaggio di errore specifico dal database e continua.
-
Come faccio a trovare spazi vuoti negli intervalli di numeri? Ad esempio, se specificano 10-15 e quindi 20-25, sarebbe bello essere in grado di suggerire in qualche modo sulla mia pagina web che 16-19 è attualmente disponibile.
Ho trovato l'articolo Come trovo una "distanza" nel contatore di corsa con SQL? , ma sembra solo restituire il primo numero disponibile ... quindi nel mio esempio sopra, restituirei solo il numero 16.
Sono sicuro che c'è un modo più semplice per fare cose che sto trascurando!