Aplicação ou Banco de Dados - Qual deve ser desenhado primeiro?

Quem já começou um sistema do zero já deve ter passado por isso

Queria saber a opinião de vocês qual a melhor forma: montar o modelo entidade-relacionamento do banco de dados e depois projetar o sistema em cima dele ou montar a arquitetura do sistema (diagrama de classes na UML) e projetar o modelo do banco de dados em-cima dela?

Começo sempre, sem dúvida, pelo ER

Comece pelo modelo de dados, se possível com o levantamento de requisitos em mãos, para você ter uma visão ‘geral’ das funcionalidades do sistema.

Comece com as classes e sobre elas molde o banco.

Projetos em grandes empresas começam sempre pelo banco, pois em uma concepção tradicional ele é o coração do sistema.

Já para alguns mais modernos o centro do sistema é o código; deve-se pensar primeiramente na implementação, e o banco é apenas uma ferramenta para persistir as informações da aplicação. Pensando nessa maneira, o desenho do banco deve vir depois, ou pode até mesmo ser deixado inteiramente a cargo do framework ORM.

Na minha opinião, a melhor coisa a se fazer é começar pensando no modelo de entidades. Se for adotada a estratégia de ter as classes de entidade como um espelho das tabelas do BD (e vice-versa), então ONDE vc desenha primeiro é apenas uma questão de gosto, já que ambos os modelos são equivalentes - a única diferença é que no banco as entidades tem TB_ na frente hehe.

Existe as duas abordagens:

[quote=gomesrod]Projetos em grandes empresas começam sempre pelo banco, pois em uma concepção tradicional ele é o coração do sistema.

Já para alguns mais modernos o centro do sistema é o código; deve-se pensar primeiramente na implementação, e o banco é apenas uma ferramenta para persistir as informações da aplicação. Pensando nessa maneira, o desenho do banco deve vir depois, ou pode até mesmo ser deixado inteiramente a cargo do framework ORM.

Na minha opinião, a melhor coisa a se fazer é começar pensando no modelo de entidades. Se for adotada a estratégia de ter as classes de entidade como um espelho das tabelas do BD (e vice-versa), então ONDE vc desenha primeiro é apenas uma questão de gosto, já que ambos os modelos são equivalentes - a única diferença é que no banco as entidades tem TB_ na frente hehe.[/quote]

Na verdade para esses mais “modernos” as duas coisas acontecem quase ao mesmo tempo.

Voce comeca pelo mais importante para o sistema. Voce escreve os testes (e por consequencia as classes) primeiro, depois faz com que uma funcionalidade especifica funcione do inicio ao fim. Voce cria a menor estrutura necessaria para que ela funcione. Desde tela, camadas, classes e banco. Assim que a “funcionalidade” esta concluida, validada e aprovada pelo usuario, voce comeca a escrever outra, seguindo o mesmo processo, criando novas classes e tabelas conforme necessario.

Tanto o modelo de classes como o banco de dados vao evoluindo aos poucos a medida que as funcionalidade vao sendo de fato implementadas. Nao se tenta resolver tudo antes da hora, nem com o MER, nem com o diagrama de classes.

Mas para o autor do topico especificamente eu responderia:

Se eh um projeto real procure fazer da forma com a qual voce esta mais habituado e nas horas vagas/outros projetos tente usar outras formas para avaliar voce mesmo. Alem de ler bastante sobre o assunto.

Se eh um projeto de estudo, use as duas formas, primeiro o modelo, depois as classes, depois faca outro comecando pelas classes. Depois outro evolutivo e veja o que eh melhor. Alem de ler bastante sobre o assunto

Na minha opinião, começaria pela aplicação. Perguntaria primeiramente assim: “Quais funcionalidades meu sistema deve ter?”

Após definir as funcionalidades do meu sistema, mapearia quais entidades seriam envolvidas no processo, parar à partir dai modelar o banco. Penso que o banco é a forma que guardamos as informações do nosso sistema, então como poderíamos mapeá-lo antes sem saber o domínio da aplicação?