Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

getreal

Normalização de tabelas

Mensagens Recomendadas

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. ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.