Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
getreal

Normalização de tabelas

Recommended Posts

getreal

Como nunca fui bom a normalizar tabelas, pedi ajuda a minha professora, mas ainda não entendi muito bem o que é que eu tenho que fazer nem tão pouco como o fazer. Tudo o que fiz até agora foi a Forma Não Normalizada (acho que é assim que se chama) e não consigo passar para as seguintes (o ideal era chegar até à 3FN). Gostava que me ajudassem a pelo menos aprender a fazer isto, como um exercício, que eu depois cá me arranjava. Esta base de dados vai ser para um daqueles fóruns muito básicos e por isso é que tem assim tanta "porcaria".

- -- ---
Forma não normalizada
- -- ---

UTILIZADOR:
   numero
   nome
   password
   imagem
   DETALHES:
      numero
      titulo
      detalhe
   MENSAGENS:
      numero
      titulo
      texto
      data criacao
      data edicao
      razao edicao
      CATEGORIA:
         numero
         nome
         tipo
         imagem
      VOTACAO:
         numero
         descricao
         opcoes
         qnt opcoes

Obrigado. ;)

Share this post


Link to post
Share on other sites
M6

Lê o artigo da wikipedia: http://en.wikipedia.org/wiki/Database_normalization#Normal_forms

Explica a coisa e podes ver os exemplos e acompanhar a coisa fazendo cada normalização ao teu modelo.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
getreal

Eu dei no 10º ano isto da normalização e até já tinha ido à Wikipedia ver se me ajudava, mas o problema e que não me entendo. Tudo o que fiz na escola tinha só duas tabelas inicialmente e ficava com um grande molhe delas, mas agora é diferente. Especialmente porque isto é para uma PAP (Prova de Aptidão Profissional) e agora tenho de início 5 tabelas (??). É-me esquisito pela quantidade de tabelas iniciais... Só para dar um "chuto" na coisa, é na 1FN que se mete as chaves de umas tabelas noutras? Por ex., na DETALHES pôr os seus campos mais o campo Numero_Utilizador.

Share this post


Link to post
Share on other sites
M6

Um truque "quick and dirty": um tipo de informação só pode estar representado numa única tabela (ex: campo morada só deve estar numa tabela) e não deve haver informação repetida na tabela (ex: código postal, como repete dado que várias moradas podem ter o mesmo código postal, isso quer dizer que os códigos postais devem estar numa tabela separada).


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
getreal

Então no caso da Forma Não Normalizada estar correcta (por favor digam-me se está ou não), na 1FN a especificação do detalhe do utilizador deveria fazer parte da tabela UTILIZADOR e o título do detalhe estar na tabela DETALHE? E se assim fosse, não seria pôr o Numero_Utilizador na DETALHES, mas sim o Numero_Detalhe na UTILIZADOR.

Share this post


Link to post
Share on other sites
M6

Uma tabela está na 1FN, se e somente se, não possuir atributos multivalor, assim para passares à 1FN, tens de:

- gerar uma única tabela com colunas simples;

- chave primária: id de cada tabela de detalhe.

Se bem compreendi o teu modelo, isto quer dizer que as datas da mensagem e as opções de votação devem estar em tabelas à parte.

Creio que o artigo em Português está mais fácil de entender: http://pt.wikipedia.org/wiki/Normaliza%C3%A7%C3%A3o_de_dados


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
getreal

Em princípio vou alterar o tema do trabalho para um website de venda de artigos (do género destes dois sites [1][2]), onde também irá ter a parte de administração, mas queria fazer pelo menos a normalização desta base de dados, poderia ser que aprendesse qualquer coisa com isto.

para passares à 1FN, tens de:

- gerar uma única tabela com colunas simples

Ui, aquilo tudo numa só tabela? É um bocado complicado... (e também acho que nunca fiz isso na escola...)


EDIT: Acho que entendi o meu problema. Tem ali coisas que podiam resolver metade dos meus problemas alterando tabelas (depois no fim de ter isto na 3FN), com isto quero dizer, adicionar campos e remover campos de tabelas, como por exemplo nos detalhes de cada utilizador. Obrigado M6, quando precisar de ajuda para isto da tabelas volto cá. ;D

Share this post


Link to post
Share on other sites
getreal

Desculpem o double-post, mas encontrei algo que pode ajudar outros com o mesmo problema que o meu. É um tutorial muito bem explicado de como atingir a 3ª Forma Normal. Notem que eu não percebia nada de normalização e já aprendi alguma coisa. Aqui está o link.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.