Sono a conoscenza di alcune best practice generali durante la progettazione di un database per un'applicazione, ma per quanto riguarda la riprogettazione?
Faccio parte di un team incaricato di riprogettare un'applicazione aziendale interna, sebbene nonostante io dica "interno", purtroppo sono molte, molte persone lontane dal contatto con gli utenti reali del sistema.
Il programma attuale è in Oracle Forms, distribuito su un gruppo di tabelle non normalizzate, a volte con più tabelle quasi duplicate che contengono lievi varianti sui dati degli altri. I vincoli si presentano spesso sotto forma di procedure memorizzate scarsamente applicate. Anche i tipi non sembrano essere memorizzati correttamente. Ho riscontrato tutti i tipi di dati errati che Oracle sembra ignorare ma che si sono adattati (e giustamente) all'importazione / esportazione guidata di SQL Server. (Ad esempio, numeri interi a due cifre non costituiscono un datetime completo!)
Il programma originale risale probabilmente a vent'anni fa e tutti gli sviluppatori originali si sono ritirati così tanto tempo fa che anche le persone anziane qui non hanno idea di chi fossero. Di conseguenza, non ci sono davvero requisiti puliti da soddisfare: dobbiamo solo duplicare la funzionalità dell'applicazione esistente e conservare i suoi dati esistenti.
Il risultato finale della riscrittura sarà una versione basata sul Web in esecuzione su ASP.NET con MS SQL Server per il back-end.
I miei altri due compagni di squadra sono molto, molto più vecchi di me, entrambi con background di business / MIS mentre il mio è CS. L'esperienza del membro senior è stata quasi esclusivamente di moduli Oracle e l'altro membro ha svolto principalmente il lavoro di applicazioni aziendali 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 lezioni universitarie, 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 rilanciato e inserito in un nuovo database. Ho intenzione di scrivere il codice di caricamento dopo aver progettato il database di destinazione, in modo che i dati possano essere suddivisi correttamente tra le nuove tabelle normalizzate, aggiunti nell'ordine corretto per seguire i nuovi vincoli, ecc. Lo stesso programma potrebbe quindi essere eseguito nuovamente in un secondo momento per copiare i dati di produzione nella riprogettazione ultimata appena implementata. Questo lascia la riprogettazione effettiva del database come la cosa principale da capire.
Quindi il cuore della mia domanda: quali sono alcune best practice per eseguire una riprogettazione dal livello del database a livello di un'applicazione esistente?