Sono a conoscenza di alcune best practice generali durante la progettazione di un database per un'applicazione, ma per quanto riguarda la riprogettazione?
Sono in una squadra incaricata di riprogettare un'applicazione aziendale interna, anche se, nonostante io abbia detto "interno", sfortunatamente molti, molti strati di persone non contattano gli utenti effettivi del sistema.
Il programma corrente è in Oracle Forms, sparpagliato su una serie di tabelle non normalizzate, a volte con più tabelle quasi duplicate che contengono leggere varianti sui dati degli altri. I vincoli sono spesso sotto forma di stored procedure scarsamente applicate. Anche i tipi non sembrano essere archiviati correttamente. Ho riscontrato tutti i tipi di dati errati che Oracle sembra ignorare, ma ha dato risultati (e giustamente) all'importazione / esportazione guidata di SQL Server. (Ad esempio, i numeri interi a due cifre non costituiscono un datetime completo!)
Il programma originale probabilmente risale a vent'anni fa e tutti gli sviluppatori originali si sono ritirati tanto tempo fa che anche le persone anziane qui non hanno idea di chi fossero. Di conseguenza, non ci sono nemmeno dei requisiti chiari da cui partire: dovremmo solo duplicare le funzionalità dell'applicazione esistente e conservare i dati esistenti.
Il risultato finale della riscrittura sarà una versione basata su Web in esecuzione su ASP.NET con MS SQL Server per il back-end.
I miei altri due compagni di team di sviluppatori sono molto, molto più vecchi di me, entrambi con background aziendali / MIS mentre il mio è CS. L'esperienza del membro anziano è stata quasi esclusivamente forme Oracle e l'altro membro ha fatto principalmente applicazioni di business funzionano in Visual Basic. Sebbene il mio background di database sia stato limitato alla progettazione di nuovi database per progetti in MySQL o SQLite, principalmente per le mie classi undergrad, mi sembra di essere l'unico con esperienza nella progettazione di database.
Ho già scritto un piccolo programma in C # che legge tutti i dati esistenti in un formato neutro, pronto per essere ri-cast e inserito in un nuovo database. Ho intenzione di scrivere il codice di caricamento dopo che il database di destinazione è stato progettato, in modo che i dati possano essere suddivisi correttamente tra le nuove tabelle normalizzate, aggiunti nell'ordine corretto per seguire nuovi vincoli, ecc. Lo stesso programma potrebbe quindi essere eseguito di nuovo in seguito per copiare i dati di produzione per la nuova riprogettazione completa appena implementata. Questo lascia la reale riprogettazione del database come la cosa principale da capire.
Quindi il nocciolo della mia domanda: quali sono le migliori pratiche per eseguire una riprogettazione dal livello di database di un'applicazione esistente?