Estou ciente de algumas práticas recomendadas gerais ao projetar um banco de dados para um aplicativo, mas e a reformulação?
Estou em uma equipe encarregada de redesenhar um aplicativo comercial interno, embora, apesar de eu dizer "interno", infelizmente esteja muitas, muitas camadas de pessoas afastadas do contato com os usuários reais do sistema.
O programa atual está no Oracle Forms, espalhado por várias tabelas não normalizadas, às vezes com várias tabelas quase duplicadas, mantendo pequenas variações nos dados uns dos outros. As restrições geralmente estão na forma de procedimentos armazenados mal aplicados. Mesmo os tipos não parecem estar armazenados corretamente. Encontrei todos os tipos de dados incorretos que a Oracle parece ignorar, mas deu ajustes (e com razão) ao Assistente de Importação / Exportação do SQL Server. (Por exemplo, números inteiros de dois dígitos não constituem uma data e hora completa!)
O programa original provavelmente remonta a vinte anos, e todos os desenvolvedores originais se aposentaram há tanto tempo que nem mesmo os idosos aqui têm idéia de quem eles eram. Como resultado, também não existem requisitos limpos - apenas devemos duplicar a funcionalidade do aplicativo existente e manter os dados existentes.
O resultado final da reescrita será uma versão baseada na Web em execução no ASP.NET com o MS SQL Server para o back-end.
Meus outros dois colegas de equipe de desenvolvedores são muito, muito mais velhos que eu, ambos com formação em negócios / MIS, enquanto o meu é CS. A experiência do membro sênior tem sido quase exclusivamente formulários Oracle e o outro membro fez o trabalho de aplicativos de negócios principalmente no Visual Basic. Embora meu histórico em bancos de dados tenha sido limitado ao design de novos bancos de dados para projetos no MySQL ou SQLite, principalmente para minhas aulas de graduação, pareço ser o único com experiência na criação de bancos de dados.
Eu já escrevi um pequeno programa em C # que lê todos os dados existentes em um formato neutro, pronto para ser convertido novamente e colocado em um novo banco de dados. Eu pretendo escrever o código de carregamento após o design do banco de dados de destino, para que os dados possam ser divididos corretamente nas novas tabelas normalizadas, adicionadas na ordem correta para seguir novas restrições etc. O mesmo programa pode ser executado novamente mais tarde para copiar os dados de produção para o real redesenhado final recém-implantado. Isso deixa o redesenho real do banco de dados como a principal coisa a descobrir.
Portanto, o cerne da minha pergunta: quais são algumas das práticas recomendadas para fazer uma reformulação a partir do nível do banco de dados de um aplicativo existente?