Il problema
Sto lavorando su un'applicazione con ~ 1000 tabelle in un database SQL Server. Sto riscontrando un problema ricorrente con uno script sql.
Lo script viene utilizzato dal team di consulenti per "pulire" parte del database e talvolta fallisce perché una nuova tabella con un vincolo di chiave esterna è stata aggiunta qualche mese fa e fino a questo momento nessuno ha eseguito lo script con qualsiasi dato in questa nuova tabella. Viene sollevata una violazione di chiave esterna e tutti gridano agli sviluppatori per i loro strumenti scadenti.
Esiste un test CI su questo script, ma nessuno aggiorna i dati forniti nel test. Quindi il test non fallisce mai perché le nuove tabelle sono lasciate vuote, ma lo script non riesce ancora negli ambienti reali.
La possibile soluzione
Vorrei assicurarmi che ogni tabella nel database contenga almeno alcune righe quando viene eseguito il test dell'interfaccia dello script. Potrei provare a mantenere uno script manuale per riempire i dati e aggiungere un test che controlli che ogni tabella contenga alcune righe ma temo che sarà un incubo di manutenzione.
Un'altra soluzione è quella di avere un altro powershell / sql che lo script analizzi lo schema e crei le righe in base ai tipi di colonna con valori costanti / casuali in tutte le tabelle ordinate utilizzando un ordinamento topologico basato sul grafico delle relazioni delle chiavi esterne. Lo script prima riempirebbe la tabella senza relazioni, quindi le tabelle con le relazioni alle tabelle già piene, ecc.
Ho due domande:
- questa soluzione sembra ragionevole?
- sto complicando le cose? c'è un modo più semplice per assicurarsi che uno script sql non fallirà a causa di violazioni dei vincoli di chiave esterna?
Ho controllato gli strumenti esistenti ma gli strumenti di analisi statica non sembrano avere le caratteristiche richieste e gli strumenti di generazione dei dati sono usati per specificare dati "realistici" di cui non mi importa.