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

ความคิดเห็น • 33

  • @felipemanso
    @felipemanso ปีที่แล้ว

    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!

  • @EvandroBellintane
    @EvandroBellintane ปีที่แล้ว

    explicação com uma dinâmica excelente! nem precisa aumentar a velocidade de reprodução

  • @viniciusfreitas2647
    @viniciusfreitas2647 2 ปีที่แล้ว

    Me ajudou bastante. Parabéns ótimo vídeo.

  • @alexyt75029
    @alexyt75029 2 ปีที่แล้ว

    Parabens. Muito didatico.

  • @frog.amacao
    @frog.amacao 3 ปีที่แล้ว

    show!!

  • @abilion6299
    @abilion6299 2 ปีที่แล้ว

    Muito a explicação e exemplificação. Ótimo trabalho.

  • @pcreis
    @pcreis 3 ปีที่แล้ว

    Muito bom parabéns !!

  • @peterjordanson4201
    @peterjordanson4201 3 ปีที่แล้ว

    muito bom cara, ganhou um inscrito e um like, me salvou aqui

    • @DesCOMPlicaOliba
      @DesCOMPlicaOliba  3 ปีที่แล้ว

      Obrigado pelo apoio. Que bom que te ajudou!

  • @hangeryouhen3311
    @hangeryouhen3311 2 ปีที่แล้ว

    Muito bom, amigo. Obrigado!

  • @MisaelBeray
    @MisaelBeray 3 ปีที่แล้ว

    Muito bom o video, parabéns.

  • @AC_z
    @AC_z 3 ปีที่แล้ว

    Perfect! :)

  • @cesarvaz6622
    @cesarvaz6622 2 ปีที่แล้ว

    Qual a diferença entre uma view temporária e uma tabela temporária? Qual a melhor?
    Excelente canal. +1 inscrito

    • @DesCOMPlicaOliba
      @DesCOMPlicaOliba  2 ปีที่แล้ว +1

      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.

    • @cesarvaz6622
      @cesarvaz6622 2 ปีที่แล้ว

      @@DesCOMPlicaOliba muito obrigado

  • @CanaldoHasura
    @CanaldoHasura 2 ปีที่แล้ว

    olá! Tem como vc disponibilizar o slide? É pra um trabalho q o professor passou na faculdade pra fazer um vídeo explicando sobre views.

    • @DesCOMPlicaOliba
      @DesCOMPlicaOliba  2 ปีที่แล้ว

      Oi. Não tenho mais, Gabriel.

    • @CanaldoHasura
      @CanaldoHasura 2 ปีที่แล้ว

      @@DesCOMPlicaOliba tudo bem professor! Mesmo assim ajudou mtu! Fiz um aqui inspirado no seu 👏

  • @isaniovitor7480
    @isaniovitor7480 3 ปีที่แล้ว

    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?

    • @DesCOMPlicaOliba
      @DesCOMPlicaOliba  3 ปีที่แล้ว

      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.

    • @isaniovitor7480
      @isaniovitor7480 3 ปีที่แล้ว

      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
      )

  • @jlima5560
    @jlima5560 3 ปีที่แล้ว

    Mestre criei um View nova no MSSQL e o usuário não tem permissão. Sabe como libero o acesso? grato

    • @DesCOMPlicaOliba
      @DesCOMPlicaOliba  3 ปีที่แล้ว +1

      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.

  • @gustavorocha6592
    @gustavorocha6592 3 ปีที่แล้ว +1

    Muito bom parabéns !!