+4

Modelagem e normalização de dados

criado por Shadow Brujah em 27/02/2004 11:16am
Modelagem de dados é o nome que damos ao processo de desenho do banco de dados.
Esta técnica é muito importante para economizar tempo de desenvolvimento e dores de cabeça no futuro. É com um bom planejamento do banco de dados que se determina o quão eficaz foi o processo de analise.

Antes de tudo, para começar, você precisará de uma ferramenta para criar seus modelos. Eu uso o Erwin 3.5.2, me adaptei melhor a ele e é o que a empresa onde eu trabalho tem. Existem outras ferramentas, como o MS Visio, mas não vou abordar aqui o uso da ferramenta.

Para criar modelos, você antes precisa conhecer bem o funcionamento de um banco de dados relacional.

Imagine o seguinte cenário: Você tem um cadastro de usuários em um sistema, e quer atribuir permissões de acesso para cada usuário. Muitas pessoas fariam apenas uma tabela de usuários, com vários campos TRUE/FALSE que dizem se o usuário tem ou não acesso ao recurso que o campo controla. ISSO É A MORTE. Se o seu sistema crescer, e precisar de 300 tipos de permissões diferentes, você terá mais de 300 colunas na mesma tabela. Se precisar criar uma página dinâmica para controlar as permissões, vai precisar inventar os códigos mais bizarros para ler os nomes dos campos e criar inputs nos forms. Enfim: fica uma caca.

Graças a Deus, todo banco de dados relacional permite criar querys com mais de 1 tabela. Então, nosso sisteminha de permissões teria 3 tabelas: Uma de usuários, uma de tipos de permissões, e uma que diz qual usuário tem qual permissão:

TABELA USUARIO:
Login_Name(PK) text, Password text, Record_State int

TABELA PERMISSAO:
Permissao_ID(PK) int, Permissao_Nome text, Record_State int

TABELA USUARIO_X_PERMISSAO:
Login_Name(PK) text, Permissao_ID(PK) int

Repare: a tabela USUARIO_X_PERMISSAO concentra as chaves primárias das duas tabelas. Então, por meio de querys nestas tabelas, você consegue saber se determinado usuário tem ou não acesso ao recurso solicitado

SELECT 1 FROM USUARIO_X_PERMISSAO WHERE Login_name = 'Blablabla' AND Permissao_ID = '23'

Se a query retornar registros, significa que o usuário tem acesso, se não, ele não tem.

Na proxima página, alguns exemplos mais complexos.

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 (~11 anos atrás)

Celso Endo disse:
existe sim...
Menu Database / Reverse Egineering
siga os passos e pronto! =)
18/06/2004 12:18am (~12 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 (~12 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 (~12 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 (~12 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 (~12 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 (~12 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 (~12 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 (~12 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 (~12 anos atrás)

Novo Comentário:

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