terça-feira, 13 de dezembro de 2011

Há 100 anos no Polo Sul

Amundsen e equipe fazendo medições para
confirmar que chegaram ao local correto.
Totalmente fora do assunto deste blog, mas podemos dizer que os protagonistas desta aventura são alguns dos nossos heróis preferidos. Pois amanhã, dia 14 de Dezembro de 2011, completa-se 100 anos da chegada de Amundsen ao Polo Sul!

Amundsen pesquisou e experimentou alternativas para chegar ao Polo Sul. Escolheu trenós puxados por cachorros. Toda equipe e alguns cachorros sobreviveram o percurso completo, ida e volta.

Seu concorrente, Scott, acreditava que com esforço e coragem superaria qualquer obstáculo. Chegou ao Polo Sul na metade de Janeiro, apenas para encontrar a bandeira da Noruega marcando o ponto exato. Não retornou a tempo para o acampamento e morreu congelado.  

Portanto, pode-se colocar muitas horas de esforço na solução de um problema, mas é fundamental ter conhecimento, explorar alternativas e escolher aquelas que garantem maior chance de sucesso. Inclusive em problemas de BD.

3 comentários:

  1. Para quem não tem ideia do que estes caras passaram reforço a recomendação do livro: A Incrível Viagem de Shackleton.

    Cesar Blumm

    ResponderExcluir
  2. 1. Acrescente a essa script, após as operações de inserção de registos, as instruções (SELECT) que executam as seguintes queries:

    a. Quais os clientes (id_cliente, nome) não assinam o canal "RTP", id_canal = 5?

    select id_cliente, nome
    from clientes
    where id_cliente not in
    ( select id_cliente
    from assinaturas
    where id_canal = 5);


    b. Que canais (id_canal, canal) não têm qualquer assinatura de clientes?

    select id_canal, canal
    from canais
    where not exists
    ( select *
    from assinaturas
    where assinaturas.id_canal = canais.id_canal);

    ou

    select id_canal, canal
    from canais
    where id_canal not in
    ( select id_canal
    from assinaturas);

    c. Qual o cliente ou clientes (nome) com a assinatura mais antiga?

    select nome
    from clientes
    where id_cliente in
    ( select id_cliente
    from assinaturas
    where data_assinatura =
    ( select min(data_assinatura)
    from assinaturas));

    d. Quais os clientes (id_cliente, nome) que assinam pelo menos os mesmos canais que o cliente "Joaquim Lopes", com id_cliente = 1?

    select id_cliente, nome
    from clientes
    where id_cliente <> 1 and not exists
    ( select id_canal
    from assinaturas
    where id_cliente = 1
    and id_canal not in
    ( select id_canal
    from assinaturas
    where id_cliente = clientes.id_cliente));

    e. Que canais (canal) são assinados por todos os clientes?

    select id_canal, canal
    from canais
    where not exists
    ( select id_cliente
    from clientes
    where id_cliente not in
    ( select id_cliente
    from assinaturas
    where id_canal = canais.id_canal));

    ou numa abordagem distinta:

    select id_canal, canal
    from canais
    where (
    select count(*) from clientes) =
    ( select count(*) from assinaturas where id_canal = canais.id_canal ) ;

    ResponderExcluir
  3. 2. Views

    a. Crie uma view que forme uma tabela com o número de clientes que assinam cada canal. Essa view deverá apresentar os campos id_canal, canal, num_assinantes. Exemplo de um registo seria (1, "SportTV", 3), que indica que o canal "SportTV" tem 3 assinantes. Acrescente o comando que cria a view à script que manipulou no exercício anterior.

    create view total_assinaturas as
    select canais.id_canal, canal, count(*)as total_assinantes
    from canais, assinaturas
    where canais.id_canal = assinaturas.id_canal
    group by canais.id_canal;

    b. Utilizando a view que criou, acrescente à script uma query que mostre o canal (canal) com mais assinaturas.

    select canal
    from total_assinaturas
    where total_assinantes =
    ( select max(total_assinantes)
    from total_assinaturas);

    3. Analise as expressões álgebricas indicadas e transcreva para este enunciado a pergunta que está subjacente a cada expressão:
    c. T = Π
    id_cliente, nome (σ cidade = "Porto" (Clientes))

    R = Π id_cliente, nome (Clientes∞Assinaturas∞σ tipo = "Filmes" (Canais))

    S = R T

    R: Quais os clientes (id_cliente, nome) que são ou moram no Porto e assinam canais do tipo "Filmes"?

    a. Canais – Canais ∞ (Π id_canal (σ localidade = "Braga" ( Clientes ) ∞Assinaturas ) )

    R: Quais os canais ou qual a lista de canais que não são subscritas por clientes que são ou moram em Braga




    create table programacao
    ( id_programa int,
    titulo varchar(100),
    data_emissao date,
    hora_emissao time,
    duracao int,
    id_canal int,
    constraint chave_pk_programacao primary key (id_programa ),
    constraint chave_fk_programacao_canais foreign key (id_canal) references canais(id_canal)
    ) engine = INNODB;

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (1, "O Império Romano: Rebelião e Traição", "2011-01-12", "17:00", 60, 6);

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (2, "Objectos Perdidos: Comida Rápida", "2011-01-12", "18:00", 30, 6);

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (3, "A Queda Do Muro De Berlim - Ep. 1", "2011-01-12", "18:30", 60, 6);

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (4, "Telejornal", "2011-01-12", "13:00", 60, 5);

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (5, "Rock Temple", "2011-01-12", "17:00", 60, 2);

    ----
    b.


    create table programacao
    ( id_programa int,
    titulo varchar(100),
    data_emissao date,
    hora_emissao time,
    duracao int,
    id_canal int,
    constraint chave_pk_programacao primary key (id_programa ),
    constraint chave_fk_programacao_canais foreign key (id_canal) references canais(id_canal)
    ) engine = INNODB;

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (1, "O Império Romano: Rebelião e Traição", "2011-01-12", "17:00", 60, 6);

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (2, "Objectos Perdidos: Comida Rápida", "2011-01-12", "18:00", 30, 6);

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (3, "A Queda Do Muro De Berlim - Ep. 1", "2011-01-12", "18:30", 60, 6);

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (4, "Telejornal", "2011-01-12", "13:00", 60, 5);

    insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (5, "Rock Temple", "2011-01-12", "17:00", 60, 2);

    ResponderExcluir