Voglio memorizzare un elenco di numeri (in sostanza, un set in termini matematici) in un database relazionale, in particolare SQL Server 2005.Come si memorizza al meglio un elenco di numeri in un database relazionale?
Idealmente, vorrei che fosse una singola colonna su una determinata tabella, ma sono disposto a sentire qualsiasi tipo di soluzione. I dati che devo memorizzare sono, come ho detto, una serie di numeri.
- Non è necessario essere sequenziale (cioè le lacune vanno bene, normale e tipico)
- Ranges sono possibili (ad esempio 1-4), ma mentre mi piacerebbe visualizzare in questo modo io' m bene con l'utilizzo di scorciatoie e tali per memorizzarlo
- Può anche essere "tutto", quindi almeno un valore deve essere riservato, preferibilmente logicamente, per questo caso "infinito"
- L'elenco dei numeri non deve essere ordine (cioè 3, 2, 9, 5) ma è preferibile e perfettamente ragionevole che siano e possano essere ordinati prima di inserirli, poiché solo il codice farà l'inserimento, non gli utenti manuali. Tuttavia, probabilmente non dovrebbe fare affidamento o aspettarsi che l'elenco sia già ordinato.
- L'insieme dei numeri deve essere facilmente reperibile per un sottoinsieme (vedi sotto)
- Tutti i numeri devono essere distinti (non dupes), ma questo può e verranno applicate prima dell'inserimento
Questa colonna è destinata per memorizzare tutti i "numeri di passo" di un dato processo a cui si applica la riga. Ogni riga può, quindi, applicare a uno o più passaggi, in qualsiasi ordine, intervallo o sequenza. Il numero massimo di passi possibili (il range massimo, in sostanza) è diverso da una riga all'altra, anche se dubito fortemente che qualcuno di loro entrerà a centinaia, quindi nel 99,9% dei casi il massimo non dovrebbe mai superare i 20 o 30, e io sarei sorpreso se arrivasse mai vicino a 100. Ogni riga è garantita per avere un valore (passo) al minimo (cioè non ha senso avere una riga che non si applica a nessun passo), ma io la figura è semplice come impostare la colonna su not null
.
Tuttavia, è archiviato, mi piacerebbe che fosse cercato facilmente. Per esempio, preferirei non dover passare attraverso molti loop per scrivere una query SQL per trovare tutte le righe che si applicano al "passaggio 3", per esempio. Se una determinata riga ha diversi passaggi a cui si applica (ad esempio, 2, 3, 7 e 8), non dovrebbe essere troppo difficile abbinarla durante la ricerca dal passaggio 3.
Inoltre, mentre mi piacerebbe per dare una sorta di senso logico quando si guardano i dati grezzi (per chiunque abbia bisogno di lavorare sul sistema dopo che non sono in giro per chiedere e quindi non devono leggere una documentazione spessa per capire la mia oscura codifica), Sono disposto a scendere a compromessi su questo. La codifica dell'elenco in qualcosa che può essere decodificato in modo affidabile è, quindi, accettabile.
Mi scuso se questo è un dupe — Sono stato su Google ma ho il sospetto che questo mio problema soffra di non sapere cosa cercare o come esprimere o chiamarlo per trovare quello che sto cercando.
Su una nota di commento, mi chiedo se questa non è una di quelle aree in cui i database relazionali sono insufficienti. Sfortunatamente, non ho scelta qui. Devo memorizzarlo in SQL Server. Ho paura che salvare separatamente in un file o in un'altra memoria persistente dei dati sia fuori questione.
Ma l'elenco non hanno bisogno (e di solito non è) una bella gamma semplice. Tipicamente è uno o due, forse tre numeri distinti in nessuna sequenza particolare (cioè 3, 5, 9). Solo occasionalmente è 1 - 4. –