Desidero aggiungere database (tradizionali RDBMS client / server come Mysql / Postgresql anziché NoSQL o database incorporati) alla mia casella degli strumenti come sviluppatore. Sto usando SQLite per progetti più semplici con solo 1 client, ma ora voglio fare cose più complicate (es. Sviluppo web con db-backed). Di solito mi piace seguire i principi di sviluppo agili e / o basati sui test. Generalmente codice in Perl o Python. Domande:
- Come faccio a testare il mio codice in modo tale che ogni esecuzione della suite di test inizi con uno stato "pristine"? Eseguo un'istanza separata del server del database ogni test? Utilizzo un database temporaneo?
- Come posso progettare tabelle / schemi in modo che siano flessibili rispetto ai requisiti in evoluzione?
- Comincio con un ORM per la mia lingua? O mi limito a codificare manualmente SQL? Una cosa che non trovo attraente è dover cambiare più di una cosa (ad esempio, l'istruzione CREATE TABLE e le relative istruzioni crude) per una modifica, b / c che è soggetta a errori. D'altra parte, mi aspetto che gli ORM siano un po 'più lenti e difficili da debug rispetto a SQL raw.
- Qual è la strategia generale per la migrazione dei dati tra una versione del programma e una nuova? Scrivo attentamente le istruzioni ALTER TABLE tra ciascuna versione, oppure scarico i dati e li importa nella nuova versione?