+4

Modelagem e normalização de dados

criado por Shadow Brujah em 27/02/2004 11:16am
Eu já vi alguns programas feitos por diversos programadores, que não usaram bem a ideia do conceito do banco de dados relacional. Algo muito comum acontece com os cadastros onde existem hierarquias: por exemplo, um cadastro de pessoas com Nome, Pais, Estado, Cidade e Bairro.

Existem 5 tabelas: Pessoa, Pais, Estado, Cidade e Bairro.
Algumas pessoas iriam preferir colocar na tabela PESSOA os 5 campos: Nome, Pais_ID, Estado_ID, Cidade_ID e Bairro_ID. Outras ainda fariam pior: colocariam além dos IDs, os nomes (strings) para facilitar a referencia.

Seria mais simples montar a hierarquia no banco de dados, e deixar que ele faça o trabalho de pesquisa.

TABELA PESSOA:
ID(PK) int, Nome text, Bairro_ID

TABELA BAIRRO:
Bairro_ID(PK), Cidade_ID, Bairro_Nome

TABELA CIDADE:
Cidade_ID(PK), Estado_ID, Cidade_Nome

TABELA ESTADO:
Estado_ID(PK), Pais_ID, Estado_Nome

TABELA PAIS:
Pais_ID(PK), Pais_Nome



Esta é a representação do modelo de dados.

Para saber o Pais das pessoas da tabela PESSOA, basta:
SELECT
PESSOA.Nome,
PAIS.Pais_Nome
FROM
PESSOA,
BAIRRO,
CIDADE,
ESTADO,
PAIS
WHERE
PESSOA.Bairro_ID = BAIRRO.Bairro_ID
AND BAIRRO.Cidade_ID = CIDADE.Cidade_ID
AND CIDADE.Estado_ID = ESTADO.Estado_ID
AND ESTADO.Pais_ID = PAIS.Pais_ID

As utilizades para a modelagem de dados são inúmeras. Entre elas, está o fácil entendimento, tanto de programadores quanto de usuários não tão técnicos, fácil documentação, desenvolvimento mais rápido, possibilidade de integrar mais membros a equipe de desenvolvimento para tornar o projeto mais rápido e, é claro, segurança, afinal todos os processos do sistema vão ser pensados e simulados antes mesmo do programador começar a codificar.

Uma dica: Caso queira começar a usar o Erwin, saiba que ele não suporta o MySQL nativamente. Mas ele suporta ODBC, então, basta usar o MyODBC e configurar uma conexão com o banco, depois sair modelando suas bases de dados.

Espero ter ajudado, e aguarde novos artigos!

Comentários:

Mostrando 1 - 10 de 18 comentários
Gostei do artigo, mas como outros citaram acima, não foi muito completo, mas já serve para alertar aqueles que não usam nenhuma metodologia na hora de desenvolver um sistema.

Eu sempre prefiro 'gastar' um tempo antes de começar a desenvolver o sistema propriamente dito, modelando os dados. Ou seja, fazendo isso com uma ferramenta ou até mesmo no papel. O que importa é que na hora de desenvolver, você já saberá o que fazer.

Uma pena, é que, no dia-a-dia corrido que temos, acontecem casos em que não temos tempo de projetar o sistema e temos que colocar a 'mão na massa'. Infelizmente, muitas vezes é assim. Em uma empresa que trabalhei eu falava para eles (gerentes) terem mais calma, porque os erros de agora (fazendo com pressa) seriam muito piores no futuro e que fazendo com calma e projetado no futuro seria bem melhor.

Lamentavelmente, parece que os gerentes e diretores (quase sempre quando não são da área de TI) não querem saber mesmo de projeto. Pensam que desenvolver um sistema é algo que se faz diretamente, sem antes pensar, planejar, discutir com os usuários envolvidos e etc.
29/11/2005 5:50am (~16 anos atrás)

Celso Endo disse:
existe sim...
Menu Database / Reverse Egineering
siga os passos e pronto! =)
18/06/2004 12:18am (~17 anos atrás)

Henrique, eu baixei o DBDesigner4 com os seu devidos plug-ins, eu ja ate fiz um MER, mas gostaria de saber se é possível ele conectar em um banco de dados e pegar a estrutura dele??
Se tiver como por favor me diz!! :D
21/04/2004 11:35pm (~18 anos atrás)

Pessoal, existe sim um excelente programa de modelagem opensource é o DBDesigner 4. Este programa é realmente muito bom. Ele suporta mysql e faz engenharia reversa e sincronisação da extrutura do banco. Taí o link: http://www.fabforce.net/dbdesigner4/
07/04/2004 4:44pm (~18 anos atrás)

Dependendo do tamanho do sistema e da equipe de desenvolvimento o projeto do sistema muitas vezes é indispensavel.
Pq com o projeto em mãos podemos calcular os custos do sistema o tempo de desenvolvimento e com isso saber se o desenvolvimento do sistema é viavel ou não entre outras coisas.
Já vi projetos serem abandonados pela metade por fauta de projeto.
É claro que se o sistema for pequeno o projeto não é necessario para o desenvolvimento mas serve para documentação que bem util
28/03/2004 12:26pm (~18 anos atrás)

Poorlyte disse:
Modelagem de dados é muito importante mas não é essencial. Só tirar como base os milhares, e talvez milhões, de "programadores" que sempre fizeram seus sistemas de "qualquer jeito" ganhando a vida e resolvendo, bem ou mal, os problemas das empresas.

Qto ao exemplo citado no artigo é bacana e, só pra complementar, gostaria de citar um outro método de verificação de permissões que é usando BIT MASK. Mesmo sem usar a modelagem do exemplo não é necessário criar um campo para cada tipo de permissão. Só é necessário criar um campo tipo inteiro que o problema já está resolvido (mesmo que o sistema venha a crescer, moderadamente).

O assunto modelagem é muito mais extenso do que foi abordado no artigo (sem desmerecer o autor) e não é só modelagem de dados. Levantamento de processos, eventos, etc etc etc são, também, muito importantes num projeto. Porém, este artigo, é um ótimo aviso para os que ainda não aplicam quaisquer métodologias no desenvolvimento de software.
14/03/2004 10:22pm (~18 anos atrás)

Infelizmente, hoje não temos nenhuma boa ferramenta gratuita para modelagem. Vc terá q decidir entre duas opções tirar o money do bolso e bancar ou fazer uma cópia "genérica"!

Eu pessoalmente utilizo o PowerDesigner. É uma ferramenta excelente. Já utilizei o System Architect, mas não gostei.

Deus abençoe a todos e intê mais...
09/03/2004 10:31am (~18 anos atrás)

João K. disse:
O caso das permissões é meio espinhoso porque de repente não precisa fazer este estilo de permissões em tabela separada do jeito que fez e sim um monte de colunas numa única tabela.

No caso de informações armazenadas no BD da imobiliária estamos diante de um problema de dimensões bem maiores diferente. Neste se espera que no futuro haja novas característica a serem acrescentas (novas colunas na tabela no modelo tradicional). Ai realmente a sua abordagem é a recomendada.

Tem o fato que devemos pensar um pouco na questão de hardware do servidor ao fazer mais queries (pesquisa no banco de dados) do que o necessário.

sei lá... esse assunto é treta hehehe
07/03/2004 1:59am (~18 anos atrás)

ola pessoal,
já ouvi falar muito de um programa chamado DBDesigner(muito bem por sinal)para MYSQL. baixei o programa mas não sou utiliza-lo.
mas depois desse artigo finalmente entendi como ele funciona.
valeu a todos por compartilhar seus conhecimentos!!!

Leonardo França
03/03/2004 5:06pm (~18 anos atrás)

Bom, tapa na orelha não pois sou contra violência lol.

Eu não acho a modelagem importante, acho FUNDAMENTAL. A modelagem de dados e modelagem de projeto são excenciais a qualquer sistema, por menor que seja.

Meu toque foi para que nos próximos artigos (já que conteúdo para passar você tem), tome mais cuidade. Vamos dizer assim, faça uma "modelagem de artigo" que fica mais fácil de desenvolver.

Valeu e boa sorte!
03/03/2004 4:18pm (~18 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)