Per rispondere alla tua domanda, no, non è normale in un processo Agile.
Dove può sembrare che derivi da un atteggiamento Agile è dal ciclo di progettazione / sviluppo / test di breve iterazione di Agile e dall'enfasi di Agile su soluzioni leggere che soddisfano i requisiti noti, ma sono ben strutturate per essere in grado di soddisfare i nuovi requisiti con cambiamento minimo. Date queste due cose, potresti dire che uno sviluppatore, non sapendo cosa potrebbe venire giù la linea ma sapendo che la sua modifica non dovrebbe avere un impatto sul DB in un modo che non può essere annullato, apporta semplicemente le modifiche necessarie allo schema nel Il modo "più leggero" possibile, e poi a intervalli diversi set di cambiamenti "leggeri" verranno trasformati in qualcosa di più permanente e stabile.
Detto questo, non ho ancora lavorato con uno sviluppatore che si è abbonato alla teoria e alla metodologia Agile e ho anche pensato che la creazione e l'eliminazione sistematiche di tabelle nello schema fossero necessarie per qualsiasi motivo. Agile non significa slap-dash o bolt-on. Se ti viene fornita una storia che richiede l'aggiunta di un nuovo campo di dati appartenenti a un particolare record, aggiungi il campo alla tabella. Se quella modifica rompe qualcosa, capisci perché e apporti altre modifiche che potrebbero essere necessarie (posso pensare a pochissime cose che potrebbero rompersi aggiungendo una colonna a un DB interrogato; se si rompe con questo tipo di modifica, tu hanno problemi più grandi). Il refactoring è normalmente limitato al codice; la modifica dello schema è in genere un processo più coinvolto rispetto alla modifica del codice, pertanto quando si verificano modifiche dello schema, di solito vengono eseguite con maggiore attenzione, e almeno qualche attenzione prestata alla conoscenza della direzione futura del progetto. Dover ristrutturare tutto o parte del database indica un fallimento fondamentale della progettazione; essere Agile non significa che non ci sia un "piano generale" di architettura di base e regole di progettazione da seguire durante la costruzione organica del programma e della struttura dei dati.
Ora, ci sono casi in Agile in cui ciò che "conosci" ora sarà contraddetto da ciò che imparerai in seguito. Supponi di avere un requisito secondo cui il tuo sistema deve avere un indirizzo per ogni persona. Poiché si tratta di una relazione 1: 1 e i dati saranno necessari nella maggior parte dei casi, è sufficiente aggiungere i campi Indirizzo alla tabella Persona. Una settimana dopo ricevi un requisito secondo cui una persona può avere più di un indirizzo. Ora è una relazione 1: N e per modellarla correttamente è necessario annullare le modifiche precedenti, suddividendo i campi in una nuova tabella degli indirizzi. Questo non è di routine, soprattutto tra gli sviluppatori senior. Uno sviluppatore esperto vedrà che una persona ha un indirizzo, li considera come concettualmente separati e crea una tabella persona e una tabella indirizzo, collegando la persona all'indirizzo con un riferimento FK a un indirizzo ID. Uno schema come questo è più semplice da modificare in caso di modifica della natura della relazione; senza creare o eliminare intere tabelle di dati "ampie", la relazione tra Persona e Indirizzo può essere facilmente modificata da 1: 1 a 1: N a N: N.