Visões (Views) em SQL - Visão Temporária e Visão Materializada em Detalhes (PostgreSQL)
ฝัง
- เผยแพร่เมื่อ 7 ก.พ. 2025
- Neste vídeo, o prof. Olibário explica as visões em SQL: motivação, vantagens, desvantagens e implementação. Também é abordado o que ocorre quando dados do banco de dados e/ou da visão são alterados. Um exemplo completo é implementado usando a linguagem postgreSQL com a IDE pgAdmin 4. Se você curtir o vídeo, por favor clique em Gostei, se inscreva no nosso canal e ative o sininho das notificações para não perder nenhum de nossos conteúdos. Juntos vamos aprender e levar conhecimento a mais pessoas!
Script para inserção usado na aula:
CREATE TABLE ALUNO(
nro_aluno INT PRIMARY KEY,
nome varchar(70) NOT NULL
);
CREATE TABLE PROVA(
nro_prova INT PRIMARY KEY
);
CREATE TABLE REALIZA(
nro_aluno INT,
nro_prova INT,
nota INT,
PRIMARY KEY(nro_aluno, nro_prova),
FOREIGN KEY (nro_aluno) REFERENCES ALUNO (nro_aluno)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (nro_prova) REFERENCES PROVA (nro_prova)
ON DELETE CASCADE
ON UPDATE CASCADE
);
INSERT INTO PROVA VALUES (1);
INSERT INTO PROVA VALUES(2);
INSERT INTO ALUNO(nro_aluno, nome) VALUES (1, 'Carla Fernandes');
INSERT INTO ALUNO(nro_aluno, nome) VALUES (2, 'Marília Júlia');
INSERT INTO ALUNO(nro_aluno, nome) VALUES (3, 'Jô Dolores');
INSERT INTO ALUNO(nro_aluno, nome) VALUES (4, 'Pedro Fernando');
-- ALUNOS E PROVAS QUE REALIZARAM
INSERT INTO REALIZA(nro_aluno, nro_prova, nota) VALUES (1,1,0);
INSERT INTO REALIZA(nro_aluno, nro_prova, nota) VALUES (1,2,0);
INSERT INTO REALIZA(nro_aluno, nro_prova, nota) VALUES (2,1,6);
INSERT INTO REALIZA(nro_aluno, nro_prova, nota) VALUES (2,2,8);
INSERT INTO REALIZA(nro_aluno, nro_prova, nota) VALUES (3,1,10);
INSERT INTO REALIZA(nro_aluno, nro_prova, nota) VALUES (3,2,9);
INSERT INTO REALIZA(nro_aluno, nro_prova, nota) VALUES (4,1,6);
INSERT INTO REALIZA(nro_aluno, nro_prova, nota) VALUES (4,2,7);
Excelente material! estava procurando o tema para criar uma base histórica em que os dados precisam ficar congelados dentro de um período. Ajudou bastante com essa explicação!
Fico feliz que tenha gostado!
explicação com uma dinâmica excelente! nem precisa aumentar a velocidade de reprodução
Muito obrigado.
Me ajudou bastante. Parabéns ótimo vídeo.
Obrigado. Que bom que te ajudou.
Parabens. Muito didatico.
Obrigado
show!!
Muito a explicação e exemplificação. Ótimo trabalho.
Obrigado.
Muito bom parabéns !!
muito bom cara, ganhou um inscrito e um like, me salvou aqui
Obrigado pelo apoio. Que bom que te ajudou!
Muito bom, amigo. Obrigado!
Disponha!
Muito bom o video, parabéns.
Perfect! :)
Qual a diferença entre uma view temporária e uma tabela temporária? Qual a melhor?
Excelente canal. +1 inscrito
A tabela temporária é uma tabela comum. Você pode mudá-la como quiser, inclusive criar índices. A view não vai mudar. A tabela temporária em geral criada por create table. Tanto a tabela temporária qto a view não mterializada são descartadas qdo a sessão encerra.
@@DesCOMPlicaOliba muito obrigado
olá! Tem como vc disponibilizar o slide? É pra um trabalho q o professor passou na faculdade pra fazer um vídeo explicando sobre views.
Oi. Não tenho mais, Gabriel.
@@DesCOMPlicaOliba tudo bem professor! Mesmo assim ajudou mtu! Fiz um aqui inspirado no seu 👏
cara, parabens, mt bom msm.
Poderia me tirar uma duvida. Sou novo em BD.
SELECT p.id_primeiro_jogador as nome_primeiro_jogador,
p.id_segundo_jogador as nome_segundo_jogador,
e.rating_atual as rating_primeiro,
e.rating_atual as rating_segundo,
e.vencedor as vencedor,
t.nome,
p.hora_inicio_partida,
p.hora_termino_partida
FROM "PARTIDA" as p, "JOGADOR" as j, "ESTATISTICA" as e, "TIPO_PARTIDA" as t
WHERE p.id_primeiro_jogador = id.jogdor and p.id_segundo_jogador = id.jogador
Queria criar essa view que tem duas colunas FK de jogador. Só q n sei como pegar os dados dos dois jogadores. Ali no WHRE eu tentei pelo id, mas não dá certo. Como eu faria?
O que é id.jogador? Com a sintaxe que vc escreveu, id teria que ser uma tabela do from. Tb tá estranho o rating_atual duas vezes dessa forma. Sua modelagem deve estar ruim ou vc não está conseguindo escrever o comando corretamente para uma modelagem valida.
Olá, a grande questão é que n sei fazer o select que forma essa view.
CREATE or REPLACE VIEW HISTORICO
AS (
SELECT j.nome as nome_primeiro_jogador,
j.nome as nome_segundo_jogador,
e.rating_atual as rating_primeiro,
e.rating_atual as rating_segundo,
j.nome as vencedor,
t.nome,
p.hora_inicio_partida,
p.hora_termino_partida
FROM "PARTIDA" as p, "JOGADOR" as j, "ESTATISTICA" as e, "TIPO_PARTIDA" as t
WHERE ???
)
Tabelas:
CREATE TABLE IF NOT EXISTS public."ESTATISTICA"
(
id_estatistica integer NOT NULL,
id_jogador integer,
total_partidas integer,
partidas_ganhas integer,
partidas_empatadas integer,
rating_atual integer,
maior_rating integer,
partidas_perdidas integer,
CONSTRAINT "ESTATISTICA_pkey" PRIMARY KEY (id_estatistica),
CONSTRAINT "ESTATISTICA_id_jogador_fkey" FOREIGN KEY (id_jogador)
REFERENCES public."JOGADOR" (id_jogador) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
)
CREATE TABLE IF NOT EXISTS public."JOGADOR"
(
id_jogador integer NOT NULL,
id_estatisica integer,
id_clube integer,
id_historico_partida integer,
data_cadastro date,
email character varying COLLATE pg_catalog."default",
senha character varying COLLATE pg_catalog."default",
foto character varying COLLATE pg_catalog."default",
nome character varying COLLATE pg_catalog."default",
descricao character varying COLLATE pg_catalog."default",
is_bot boolean,
CONSTRAINT "JOGADOR_pkey" PRIMARY KEY (id_jogador),
CONSTRAINT "JOGADOR_id_clube_fkey" FOREIGN KEY (id_clube)
REFERENCES public."CLUBE" (id_clube) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT "JOGADOR_id_estatisica_fkey" FOREIGN KEY (id_estatisica)
REFERENCES public."ESTATISTICA" (id_estatistica) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT "JOGADOR_id_historico_partida_fkey" FOREIGN KEY (id_historico_partida)
REFERENCES public."HISTORICO_PARTIDA" (id_historico_partidas) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
)
CREATE TABLE IF NOT EXISTS public."PARTIDA"
(
id_partida integer NOT NULL,
id_tipo_partida integer,
id_primeiro_jogador integer,
id_segundo_jogador integer,
hora_inicio_partida time without time zone,
hora_termino_partida time without time zone,
vencedor integer,
CONSTRAINT "PARTIDA_pkey" PRIMARY KEY (id_partida),
CONSTRAINT "PARTIDA_id_primeiro_jogador_fkey" FOREIGN KEY (id_primeiro_jogador)
REFERENCES public."JOGADOR" (id_jogador) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT "PARTIDA_id_segundo_jogador_fkey" FOREIGN KEY (id_segundo_jogador)
REFERENCES public."JOGADOR" (id_jogador) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT "PARTIDA_id_tipo_partida_fkey" FOREIGN KEY (id_tipo_partida)
REFERENCES public."TIPO_PARTIDA" (id_tipo_partida) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
)
Mestre criei um View nova no MSSQL e o usuário não tem permissão. Sabe como libero o acesso? grato
Precisa ver na documentação do MsSQL, pra ter certeza da sintaxe do comando. Eu acredito que seja algo assim:
use [nomeDoBanco]
GRANT SELECT ON OBJECT::[schemaDoBanco].[nomeDaVisao] TO [nomeDoUsuario]
Na primeira linha selecione o nome do banco que está usando. Na segunda, coloque o nome do schema do banco usado, o nome da visão e o nome do usuário.
Muito bom parabéns !!
Obrigado.