+4

Técnicas de Normalização

criado por Phaser em 12/04/2002 9:59pm
Terceira Forma Normal


  1. Eliminar campos que não dependem da chave.



O nome e endereço da nossa empresa não tem nada a ver com o Id do usuário, então eles teriam que ter seus próprios Id de Empresa:

<table align="center" border="1" cellpadding="4" cellspacing="0" width="400" bgcolor="#FFFFFF" bordercolor="#CCCCCC" style="font-family: arial; font-size: 10pt;"><tr align="center"><td colspan="3" bgcolor="#DDDDDD">usuarios</td></tr><tr align="center"><td bgcolor="#FFCC00">usrId</td><td>nome</td><td bgcolor="#0099CC">relemprId </td></tr><tr align="center"><td>1</td> <td>Carlos</td><td>1</td></tr><tr align="center"><td>2</td><td>Flávia</td><td>2</td></tr></table>

<table align="center" border="1" cellpadding="4" cellspacing="0" width="400" bgcolor="#FFFFFF" bordercolor="#CCCCCC" style="font-family: arial; font-size: 10pt;"><tr align="center"><td colspan="3" bgcolor="#DDDDDD">empresas</td></tr><tr align="center"><td bgcolor="#0099CC">emprId</td><td>empresa</td><td>empresa_endereco</td></tr><tr align="center"><td>1</td><td>ABC</td><td>Santos Dummont, 100</td></tr><tr align="center"><td>2</td><td>XYZ</td><td>Des. Moreira, 100</td></tr></table>

<table align="center" border="1" cellpadding="4" cellspacing="0" width="400" bgcolor="#FFFFFF" bordercolor="#CCCCCC" style="font-family: arial; font-size: 10pt;"><tr align="center"><td colspan="3" bgcolor="#DDDDDD">urls</td></tr><tr align="center"><td>urlId</td><td bgcolor="#FFCC00">relusrId</td><td>url</td></tr><tr align="center"><td>1</td><td>1</td><td>abc.com</td></tr><tr align="center"><td>2</td><td>1</td><td>xyz.com</td></tr><tr align="center"><td>3</td><td>2</td><td>abc.com</td></tr><tr align="center"><td>4</td><td>2</td><td>xyz.com</td></tr></table>

Agora nós temos a chave primária emprId na tabela de empresas relacionada à chave estrangeira na tabela de usuários chamada relemprId, e podemos adicionar 200 usuários enquanto só inserimos o nome &quot;ABC&quot; uma vez. Nossa tabela de usuários e urls podem crescer o quão grande quiserem sem necessariamente duplicar ou corromper nossos dados.
A maioria dos desenvolvedores diriam que a Terceira Forma Normal já é suficiente, e nosso esquema de dados poderia facilmente manipular dados de uma empresa inteira, e na maioria dos casos eles estariam corretos.

Mas olhe para nossos campos de url - você nota a duplicação de dados ? Isso é prefeitamente aceitável se não estamos pre-definindo estes campos. Se o input da página HTML permite que nossos usuários insiram livremente o seu texto não há nada que possamos fazer a respeito disso, e é apenas uma coincidência que Carlos e Flávia ambos puseram o mesmo bookmark. Mas e se temos um menu drop-down onde sabemos que somente estas 2 urls são permitidas, ou talvez 20 ou mais ? Podemos elevar o nosso esquema de banco de dados para o próximo nível, a Quarta Forma, uma que muitos desenvolvedores ignoram porque ela depende em um tipo muito específico de relacionomento, o relacionomento muitos-para-muitos, o qual nós não encontramos ainda em nossa aplicação.

Comentários:

Mostrando 1 - 5 de 5 comentários
Ederson disse:
estava testando aki, eu programo php com mysql no windows e qundo ta ok testo no linux, tive um problema de campos no mysql, onde os num posso usar maiusculas no nomes dos campos, tem que se rtudo minusculo....alguem ja passou por isso?
25/10/2004 1:46pm (~19 anos atrás)

isso foi o que eu não entendi, você quis dizer que se eu pegar as chaves estrangeiras de outras tabelas eu consigo reconstituir essa tabela de quinta forma ? :)
17/04/2002 11:36am (~22 anos atrás)

Phaser disse:
Opa André, acho que me enganei aqui nos emails, me desculpe.

Bem, quanto a quinta forma como não é algo muito utilizado o autor se restringiu a apenas comentá-la. Na verdade você faz a volta do que você fez, vai destrinchando as tabelas inferiores até chegar a uma tabela principal, na verdade é apenas ler o artigo de trás pra frente. É mais uma forma de se certificar que uma tabela está restringida ao máximo do que uma forma de construir a tabela principal.

[]s
17/04/2002 11:28am (~22 anos atrás)

Phaser disse:
Olá André...

...quando você vai começar a estruturar um banco de dados com tabelas e etc, você começa estabelecendo uma tabela no Formato Zero, como é mostrado no artigo. Você nunca começa com as tabelas já normalizadas, a não ser que você tenha uma boa experiência já e comece já fazendo uma normalização inicial.

Então, a princípio você estabelece uma tabela na Forma Zero e vai aplicando regras de normalização.

[]s
17/04/2002 11:17am (~22 anos atrás)

Acho que a Quinta forma ficou muito no "ar", seria interessante se você conseguisse exemplificar, como nas outras formas ! :-)
15/04/2002 10:42am (~22 anos atrás)

Novo Comentário:

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