Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come generare dati di test in SQL Server

Quando si verifica la funzionalità dell'applicazione o le prestazioni di una specifica procedura memorizzata o di una query ad hoc nell'ambiente di sviluppo, è necessario disporre di dati archiviati nei database di sviluppo tipici o simili ai dati archiviati nei database di produzione. Ciò è dovuto al fatto che le prestazioni di una query che elabora 50 record saranno diverse dalle prestazioni della stessa query che elabora 50 milioni di righe. Il ripristino di una copia del database di produzione sul server del database di sviluppo a scopo di test non è sempre un'opzione valida, a causa dei dati critici che sono archiviati in questi database e non dovrebbero essere visibili a tutti i dipendenti, a meno che non si stia sviluppando un nuovo applicazione e non esiste ancora un database di produzione.

L'alternativa migliore e più sicura consiste nel riempire le tabelle del database di sviluppo con dati di test. La generazione dei dati di test è utile per testare le prestazioni dell'applicazione o una nuova funzionalità senza modificare i dati di produzione. Non esiste un unico modo semplice per generare dati di test che si adattino a tutti gli scenari, soprattutto quando è necessario generare grandi quantità di dati per testare le prestazioni di query e transazioni complesse in cui è necessario coprire tutte le possibili combinazioni di casi di test.

Per riempire una tabella con una grande quantità di dati, il modo più semplice è scrivere un semplice script che continui a inserire record identici nella tabella del database con il numero di duplicati necessari. Ma il problema è che Query Optimizer di SQL Server creerà un piano diverso sul database di sviluppo da quello costruito sul database di produzione a causa della differenza nella distribuzione dei dati. Ad esempio, lo script seguente riempirà la tabella Studenti con 100.000 record di test ridondanti utilizzando il Numero GO dichiarazione:

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('John','Horold','2005-10-01','London, St15')

GO 25000

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Mike','Zikle','2005-06-08','London, St18')

GO 25000

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Faruk','Cedrik','2005-03-15','London, St24')

GO 25000

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Faisal','Ali','2005-12-05','London, St41')

GO 25000

Un'altra opzione consiste nel generare dati casuali a seconda del tipo di dati di ciascuna colonna. La colonna ID con proprietà IDENTITY genererà automaticamente numeri di sequenza senza la necessità di alcuno sforzo di codifica da parte tua. Ma se prevedi di generare voti casuali per gli studenti, puoi trarre vantaggio dal RAND() T-SQL ed eseguire il cast del risultato come tipo di dati numerico richiesto. Ad esempio, lo script seguente genererà 100.000 voti casuali per lo studente tra 1 e 100 con tre diversi tipi di dati:voti INTEGER, voti REALI e voti DECIMALI, con la possibilità di controllare gli intervalli di questi valori a seconda delle tue abilità matematiche e di programmazione , come mostrato di seguito:

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as int)) AS INT_Grage

GO 100000

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as real)) AS Real_Grage

GO 100000

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as decimal(6,2))) AS Decimal_Grage

GO 100000

La generazione di nomi casuali può essere ottenuta anche utilizzando i database di test Microsoft di AdventureWorks e Northwind . È necessario scaricare questi database dal sito Web Microsoft, allegare questi database all'istanza di SQL Server e sfruttare i dati archiviati in questi database per generare nomi casuali nel database di sviluppo. Ad esempio, la tabella DimCustomer del database AdventureworksDW2016CTP3 contiene circa 18.000 nomi, secondi nomi e cognomi che è possibile utilizzare. Puoi anche utilizzare un'istruzione CROSS JOIN per generare un numero elevato di combinazioni di questi nomi per superare il valore di 18 KB. Il seguente script può essere utilizzato per generare 100.000 nomi e cognomi:

INSERT INTO StudentsGrades (First_Name, Last_Name)

SELECT TOP 100000 N.[FirstName],cN.[LastName]

FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N

CROSS JOIN AdventureworksDW2016CTP3.[dbo].[DimCustomer] cN

È inoltre possibile generare indirizzi e-mail casuali e date dai database di test Microsoft. Ad esempio, la colonna BirthDate e la colonna EmailAddress della stessa tabella DimCustomer possono fornirci date e indirizzi e-mail casuali. Lo script seguente può essere utilizzato per generare una combinazione di 100.000 di date di nascita e indirizzi e-mail:

INSERT INTO StudentsGrades (BirthDate, EmailAddress)

SELECT TOP 100000 N.BirthDate,cN.EmailAddress

FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N

CROSS JOIN AdventureworksDW2016CTP3.[dbo].[DimCustomer] c

I valori casuali della colonna Country possono essere generati anche utilizzando la tabella Person.CountryRegion dal database di test AdventureWorks2016CTP3. Può fornirti più di 200 nomi e codici di paesi dai quali puoi trarre vantaggio nel tuo database di sviluppo. Ad esempio, puoi prenderla come una tabella di ricerca per mappare tra il nome del paese e il codice, come nello script seguente:

INSERT INTO MappedConutries (CountryRegionCode, Name)

SELECT [CountryRegionCode],[Name]

FROM [AdventureWorks2016CTP3].[Person].[CountryRegion]

Then insert a random name or country code from these countries that has ID equal to a random ID generated between 1 and 238, as the script below:

INSERT INTO StudentsGrades (Country_Name) values

( (SELECT NAME FROM MappedConutries WHERE ID=CAST(RAND(CHECKSUM(NEWID()))*238 as int)))

GO 10000

Per generare valori di Indirizzo casuali, puoi trarre vantaggio dai dati memorizzati nella Persona. Tabella di indirizzi dal database di test AdventureWorks2016CTP3. Contiene più di 19.000 indirizzi diversi con la sua posizione spaziale, che puoi facilmente utilizzare nel tuo database di sviluppo e prendere una combinazione casuale da questi valori, nello stesso modo in cui abbiamo fatto nell'esempio precedente. Lo script seguente può essere facilmente utilizzato per generare indirizzi casuali di 100.000 dalla tabella Person.Address:

INSERT INTO StudentsGrades (STD_Address) values

( (SELECT NAME FROM [AdventureWorks2016CTP3].[Person].[Address] WHERE [AddressID]=CAST(RAND(CHECKSUM(NEWID()))*19614 as int)))

GO 100000

Per generare password casuali per utenti di sistema specifici, possiamo trarre vantaggio da CRYPT_GEN_RANDOM Funzione T-SQL. Questa funzione restituisce un numero esadecimale crittografico, generato in modo casuale con una lunghezza di un numero specificato di byte, generato dall'API Crypto (CAPI). Il valore restituito da quella funzione può essere convertito in un tipo di dati VARCHAR per avere password più significative, come nello script seguente, che genera una password casuale di 100.000:

INSERT INTO SystemUsers (User_Password) SELECT CONVERT(varchar(20), CRYPT_GEN_RANDOM(20))

GO 100000

La generazione di dati di test per riempire le tabelle del database di sviluppo può anche essere eseguita facilmente e senza perdere tempo a scrivere script per ogni tipo di dati o utilizzare strumenti di terze parti. È possibile trovare vari strumenti sul mercato che possono essere utilizzati per generare dati di test. Uno di questi meravigliosi strumenti è il dbForge Data Generator per SQL Server . È un potente strumento GUI per una rapida generazione di dati di test significativi per i database di sviluppo. Lo strumento di generazione dati dbForge include oltre 200 generatori di dati predefiniti con opzioni di configurazione sensate che consentono di emulare dati casuali intelligenti per colonna. Lo strumento consente inoltre di generare dati demo per database SQL Server già pieni di dati e di creare generatori di dati di test personalizzati. dbForge Data Generator per SQL Server consente di risparmiare tempo e fatica nella generazione di dati demo popolando le tabelle di SQL Server con milioni di righe di dati di esempio che sembrano proprio dati reali. dbForge Data Generator per SQL Server aiuta a popolare le tabelle con i tipi di dati utilizzati più di frequente come i tipi di dati di base, aziendali, sanitari, IT, posizione, pagamento e persona. La figura seguente mostra la facilità di funzionamento di questo strumento:

Dopo aver installato lo strumento dbForge Data Generator per SQL Server ed eseguito lo strumento, è necessario specificare il nome del server di destinazione e il nome del database nella finestra Connessione come mostrato di seguito:

Nella finestra Opzioni, puoi specificare il numero di righe da inserire nella tabella e altre diverse opzioni che controllano i criteri dei dati di test generati, come mostrato di seguito:

Dopo aver personalizzato le opzioni per adattarle ai requisiti dei dati di test, fare clic su e verrà visualizzata una nuova finestra con un elenco di tutte le tabelle e le colonne del database selezionato, chiedendo puoi scegliere quale tabella riempire con i dati di test, come mostrato di seguito:

Basta scegliere la tabella che devi riempire con i dati e lo strumento ti fornirà automaticamente i dati suggeriti nella sezione Anteprima nella parte inferiore della finestra e le opzioni personalizzabili per ogni colonna di quella tabella che puoi personalizzare facilmente, come mostrato sotto:

Ad esempio, puoi scegliere tra i tipi di dati dei generatori integrati che possono essere utilizzati per generare i valori della colonna ID come descritto in precedenza:

Oppure personalizza le caratteristiche dei valori della colonna ID, come Unicità, Min, Max e Incremento dei valori generati, come di seguito:

Inoltre, la colonna First_Name può essere limitata a essere maschile o femminile o una combinazione di questi due tipi. Inoltre, puoi controllare la percentuale di valori NULL o vuoti all'interno di quella colonna, come mostrato di seguito:

La colonna Data di nascita può anche essere controllata specificando la categoria in cui rientreranno questi studenti, come Studenti, Adolescenti, Adulti o Pensionati, come mostrato di seguito:

Puoi anche specificare il generatore completamente descritto che può essere utilizzato per generare i valori della colonna Paese come mostrato di seguito:

E personalizza l'equazione che verrà utilizzata per generare i valori della colonna Indirizzo e-mail come segue:

Oltre alla complessità dell'equazione personalizzabile, generiamo i valori della colonna Password, come mostrato di seguito:

E infine, per il mio esempio e non per questo strumento magico, i generatori e le equazioni utilizzati per generare i valori della colonna Indirizzo di seguito:

Dopo questo tour, puoi immaginare come questo magico strumento ti aiuterà nella generazione di dati e nella simulazione di scenari in tempo reale per testare la funzionalità della tua applicazione. Installalo e divertiti a sfruttare tutte le funzionalità e le opzioni disponibili.

Strumento utile:

dbForge Data Generator per SQL Server:potente strumento GUI per una rapida generazione di dati di test significativi per i database di SQL Server.