You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-não ha grupos de atributos repetidos (há apenas um dado por coluna nas linhas)
-existe uma chave primaria
-relação nao possui atributos multivalorados ou relações aninhadas (uma tabela dentro de outra tabela)
(Imagem tabela não normalizada, acima!)
(Imagem tabela Normalizada!! acima!!)
Obs: Contem 1Pk, Desmembrar o endereço para que nao tenha compostos dentro de um campo só,e na segunda tab temos os telefones não multivalorados e fazendo referenciação a pk da primeira tab.
CODIGO da 1°Fn do exemplo:
-- https://www.youtube.com/watch?v=eRaAMNjCFYw-----------------------------Tabela não normalizada--------------------------------DROPTABLE cliente;
SELECT*FROM cliente;
CREATETABLEcliente (
cod_cliente INTPRIMARY KEY,
nome_cliente VARCHAR(50),
telefone_cliente VARCHAR(20),
endereco_cliente VARCHAR(150)
)
INSERT INTO cliente (cod_cliente, nome_cliente, telefone_cliente, endereco_cliente)
VALUES
(2532, 'José ', '998241004,998877665', 'Rua 19, 244 - Formosinha'),
(2536, 'Marcus ', '998877665', 'Avenida Brocoto, 670 apt-103 - Abreu'),
(2453, 'Ana ','400289222,666777888', 'Rua 9a, 9 - Bela Vista');
------------------------------------------------------DROPTABLE telefone_cliente;
SELECT*FROM telefone_cliente;
CREATETABLEtelefone_cliente (
cod_cliente INT,
telefone NUMERIC(11),
FOREIGN KEY (cod_cliente) REFERENCES cliente (cod_cliente)
);
INSERT INTO telefone_cliente (cod_cliente, telefone)
VALUES
(2532, 998241004),
(2532, 998877665),
(2536, 998877665),
(2453, 400289222),
(2453, 666777888);
-------------- organizando CLIENTE ------------------ALTERTABLE cliente DROP COLUMN telefone_cliente;
ALTERTABLE cliente ADD COLUMN bairro VARCHAR(30);
UPDATE cliente
SET bairro ='Formosinha'WHERE cod_cliente =2532;
UPDATE cliente
SET bairro ='Abreu'WHERE cod_cliente =2536;
UPDATE cliente
SET bairro ='Bela Vista'WHERE cod_cliente =2453;
UPDATE cliente
SET endereco_cliente ='Rua 19, 244'WHERE cod_cliente =2532;
UPDATE cliente
SET endereco_cliente ='Avenida Brocoto, 670 apt-103'WHERE cod_cliente =2536;
UPDATE cliente
SET endereco_cliente ='Rua 9a, 9'WHERE cod_cliente =2453;
------------- RESULTA DO FINAL ---------------SELECT*FROM cliente;
SELECT*FROM telefone_cliente;
Conceito 2°Fn:
Baseado no conceito de Dependencia funcional total (DFT)
Cada Atributo que nao for chave tende ser total e funcionalmente dependentes da PK
Um atributo-chave é um atributo que é uma PK ou parte de uma PKC (Composta) .
Atributos não-chaves São os demais atributos .
Para a tabela estar na 2° Fn ela deve:
- Estar na 1°Fn .
- Todos atributos não-chave são funcionalmente dependentes de * TODAS-AS-PARTES * da chave primaria.
- Não existem Dependencias Parciais (DFP).
- Caso Contrario deve se criar outra tabela com os dados.
(Imagem tabela não normalizada, acima!)
(Imagem tabela Normalizada!! acima!)
o que vc deve fazer é analisar a tabela inteira desde nome a atributos , e os atributos que não fazem parte diretamente da chave primaria inteira (se for uma composta no caso)
vc vai remover da tabela principal e criar outra tabela com chave primaria referenciando ao msm numero da chave que esta na primeira tabela.
Cod exemplo 2°Fn:
-- https://www.youtube.com/watch?v=6ER9lWOk-cY-----------------------------Tabela não normalizada--------------------------------SELECT*FROM tbl_pecas
DROPTABLE tbl_pecas
CREATETABLEtbl_pecas (
cod_peca INT,
cod_fornec INT,
local_fornecedor VARCHAR(50),
qnt_estoq INT,
tel_fornecedor NUMERIC(11),
qtde_Caixas INT,
primary key(cod_peca,cod_fornec)
);
INSERT INTO tbl_pecas
VALUES
(0009,121,'São Paulo',512,30302020,52),
(0023,122,'Manaus',263,60607070,27),
(0065,121,'São Paulo',196,30302020,20),
(0071,123,'Porto Alegre',89,10121314,9),
(0073,122,'Manaus',296,60607070,30)
-------------------------------- separando dfp da primeira tab pra outra tab --------------------------------------SELECT*FROM tbl_fornecedor
DROPTABLE tbl_fornecedor
CREATETABLEtbl_fornecedor(
cod_fornecedor INT,
local_fornec VARCHAR(50),
tel_fornec NUMERIC(11),
primary key(cod_fornecedor)
);
INSERT INTO tbl_fornecedor
VALUES
(121,'São Paulo',30302020),
(122,'Manaus',60607070),
(123,'Porto Alegre',10121314)
----------------------------------- Modelando as tabelas --------------------------------------adicionando fk na tabela peças no cod_fornecedor , e referenciando para a tbl_fornecedor no cod_fornecedor ALTERTABLE tbl_pecas
ADD CONSTRAINT fk_pecas_fornecedor
FOREIGN KEY (cod_fornec)
REFERENCES tbl_fornecedor (cod_fornecedor)
ALTERTABLE tbl_pecas DROP COLUMN local_fornecedor
ALTERTABLE tbl_pecas DROP COLUMN tel_fornecedor
-------------------------------------- Saida final -----------------------------SELECT*FROM tbl_pecas
SELECT*FROM tbl_fornecedor
Ou seja:
Resumindo vc vai criar uma tabela com atributos principais e o atributos secundario vc vai colocar na outra tabela e fazer refenciação daquelas atributos secundarios que possuem um ID ao msm aID da tabela principal.
Conceito 3°Fn
- Baseado no Conceito DFT dependencia transitiva
- Atributos não-chave na mesma tabela nao podem se relacionar com outro atributos não-chave
- Não deve haver dependencia Transitiva de um atributo não chave sobre a PK
- Se eu tenho um atributo comum que é não-chave que depende de outro atributo que é não-chave ,voce deve montar outra relação contendo esses novos atributos os dois ou mais.
Terceira forma normal:
- Deve estar na 2°Fn
- Não existe DFT
- A DFT em uma tabela é uma depencia funcional entre dois atributos não-chave
3°Fn
(Imagem tabela não normalizada, acima!)
(Imagem tabela Normalizada!! acima!)
Oque vc deve fazer é analisar a tabela e perceber se ela tem alguns atributos não chaves que não dependem da chave primaria
com isso vc deve criar outra relação e lá vc coloca um Pk e os atributos que dependem dos não-chave
e na relação principal vc coloca uma FK para fazer relação com a PK dos atributo não-chave
Cod ex 3°Fn:
-- https://www.youtube.com/watch?v=usA8QKvEHWw-----------------------------Tab não normalizada------------------------SELECT*FROM tbl_venda
DROPTABLE tbl_venda
CREATETABLEtbl_venda (
nota_fiscal INT,
cod_vendedor INT,
nome_vendendor VARCHAR(15),
cod_produto INT,
qtde_vendida INT,
PRIMARY KEY (nota_fiscal)
);
INSERT INTO tbl_venda
VALUES
(15326,002,'Leila',132,10),
(15327,006,'Ana',153,12),
(15328,002,'Leila',143,11),
(15329,009,'Fábio',132,9),
(15330,007,'Renato',153,12)
---------------------------------- Criando a relação para atributos nao-chave -------------------------------------------SELECT*FROM tbl_vendedor
DROPTABLE tbl_vendedor
CREATETABLEtbl_vendedor(
cod_vendedor INT,
nome_vendedor VARCHAR(30),
PRIMARY KEY (cod_vendedor)
);
INSERT INTO tbl_vendedor
VALUES
(002,'Leila'),
(006,'Ana'),
(007,'Renato'),
(009,'Fabio')
-- adicionando relacionamento de fk na tab principal para fazer relação com a pk da tabela secundariaALTERTABLE tbl_venda
ADD CONSTRAINT fk_vendedor_venda
FOREIGN KEY (cod_vendedor)
REFERENCES tbl_vendedor (cod_vendedor)
-------------------------------- Modelando -------------------------------------ALTERTABLE tbl_venda DROP COLUMN nome_vendendor
---------------------------------RESULTADO FINAL-----------------------------------------------SELECT*FROM tbl_venda
SELECT*FROM tbl_vendedor