Conozco algunas de las mejores prácticas generales al diseñar una base de datos para una aplicación, pero ¿qué pasa con el rediseño?
Estoy en un equipo encargado de rediseñar una aplicación comercial interna, aunque a pesar de que yo diga "interno", desafortunadamente estoy lejos de tener contacto con los usuarios reales del sistema.
El programa actual está en Oracle Forms, disperso en un montón de tablas no normalizadas, a veces con múltiples tablas casi duplicadas que contienen ligeras variantes en los datos de los demás. Las restricciones a menudo se presentan en forma de procedimientos almacenados mal aplicados. Incluso los tipos no parecen estar almacenados correctamente. He encontrado todo tipo de datos incorrectos que Oracle parece ignorar pero le dio ajustes (y con razón) al Asistente de importación / exportación de SQL Server. (Por ejemplo, ¡los enteros de dos dígitos no constituyen una fecha y hora completa!)
El programa original probablemente se remonta a veinte años, y todos los desarrolladores originales se han retirado hace tanto tiempo que incluso las personas mayores aquí no tienen idea de quiénes eran. Como resultado, tampoco hay requisitos limpios para cumplir: solo se supone que debemos duplicar la funcionalidad de la aplicación existente y mantener sus datos existentes.
El resultado final de la reescritura será una versión basada en web que se ejecute en ASP.NET con MS SQL Server para el back-end.
Mis otros dos compañeros de equipo de desarrolladores son mucho, mucho mayores que yo, ambos con experiencia en negocios / MIS, mientras que el mío es CS. La experiencia del miembro senior ha sido casi exclusivamente formularios de Oracle y el otro miembro ha trabajado principalmente en aplicaciones comerciales en Visual Basic. Aunque mi experiencia en bases de datos se ha limitado a diseñar nuevas bases de datos para proyectos en MySQL o SQLite, principalmente para mis clases de pregrado, parece que soy el único con experiencia en el diseño de bases de datos.
Ya he escrito un pequeño programa en C # que lee todos los datos existentes en un formato neutral, listo para ser relanzado y colocado en una nueva base de datos. Planeo escribir el código de carga después de que se diseñe la base de datos de destino, de modo que los datos se puedan dividir adecuadamente en las nuevas tablas normalizadas, agregadas en el orden correcto para seguir las nuevas restricciones, etc. El mismo programa podría ejecutarse nuevamente más tarde para copiar los datos de producción al rediseño terminado real recién desplegado. Esto deja el rediseño real de la base de datos como lo más importante para descubrir.
Entonces, el corazón de mi pregunta: ¿cuáles son algunas de las mejores prácticas para hacer un rediseño desde el nivel de base de datos de una aplicación existente?