SóProvas


ID
898075
Banca
CESGRANRIO
Órgão
BNDES
Ano
2013
Provas
Disciplina
Banco de Dados
Assuntos

Considere as tabelas a seguir para responder às questões. Essas tabelas pertencem ao esquema de um banco de dados de uma locadora de veículos.

CREATE TABLE VEICULO (
     PLACA CHAR(7) NOT NULL,
    MODELO VARCHAR2(50) NOT NULL,
    COD_CAT CHAR(2) NOT NULL,
    CONSTRAINT VEICULO_PK PRIMARY KEY (PLACA),
    CONSTRAINT VEICULO_FK FOREIGN KEY (COD_CAT) REFERENCES
    CATEGORIA (COD_CAT))


CREATE TABLE CATEGORIA (
    COD_CAT CHAR(2) NOT NULL,
    DESCR VARCHAR2(80) NOT NULL,
    VAL_DIARIA NUMBER(7,2),
    CONSTRAINT CATEGORIA_PK PRIMARY KEY (COD_CAT))


CREATE TABLE ALUGUEL (
        PLACA CHAR(7) NOT NULL,
        DATA_DEV NUMBER(6),
        DATA_ALG NUMBER(6) NOT NULL,
        CONSTRAINT ALUGUEL_PK PRIMARY KEY (PLACA, DATA_ALG),
        CONSTRAINT ALUGUEL_FK FOREIGN KEY (PLACA) REFERENCES
        VEICULO (PLACA))


Observações:
• A tabela VEICULO contém as informações sobre os veículos que a locadora dispõe para aluguel. Ela possui uma coluna chamada COD_CAT, que contém a categoria à qual um veículo pertence.
• A tabela CATEGORIA representa a tabela de preços da locadora. Ela registra o valor que será cobrado por um dia de aluguel de um veículo de uma determinada categoria.
• A tabela ALUGUEL é usada para registrar todas as operações de aluguel. A coluna DATA_ALG guarda a data na qual um veículo foi alugado, enquanto a coluna DATA_DEV guarda a data na qual o veículo foi devolvido. Ela é informada ao sistema quando o cliente devolve o veículo à locadora. Ambas as datas estão no formato AAMMDD. Dessa forma, a data 05/02/2011 será armazenada como 110205.

Qual comando SQL será executado com sucesso, independente do estado das tabelas que compõem a base de dados da locadora de veículos?

Alternativas
Comentários
  • Eu não tenho certeza absoluta da minha explicação mas vou tentar ajudar.


    A letra A e letra C, você pode matar imaginando que essas chaves primárias já estão cadastradas previamente no banco de dados.


    A letra B e D, caso apaguem uma linha da tabela deixarão a base inconsistente porque a FK ficará com a referência perdida. 

    Por exemplo, caso eu delete a placa do veículo na tabela VEÍCULO, a tabela ALUGUEL que possui uma FK referenciando a tabela VEÍCULO será perdida. 

  • Comentado em : http://www.itnerante.com.br/group/bancodedados/forum/topics/bndes-2013-sql?xg_source=activity

  • O item não é tão fácil quanto parece. Veja que o examinador pede para identificarmos o comando que será executado com sucesso, de forma independente do estado das tabelas - ou seja, o comando que nunca produzirá erro, seja qual for o dado que esteja armazenado nas tabelas.

    Nesse caso, podemos eliminar os itens A e C, pois embora sintaticamente corretos, fazem inserções que teoricamente podem produzir erro, se o valor da chave primária inserido por eles já estiver presente nas tabelas.

    A letra B está errada porque o comando EXISTS só confere se não existe algum veículo atualmente alugado (A.data_dev IS NOT NULL) que pertence à categoria. No entanto, o comando abre margem para que se remova uma categoria que é referenciada por algum veículo existente na frota da locadora (tabela Veículo, chave estrangeira COD_CAT). Nesse caso, se eliminarmos a categoria antes de eliminarmos os veículos associados a essa categoria, teremos um erro de integridade referencial.

    A letra D está incorreta por um motivo parecido. Nesse caso, o EXISTS confere se existe um veículo atualmente alugado (A.data_dev IS NOT NULL). Se existe, a remoção do veículo não poderia acontecer, pois o registro de aluguel faz referência ao veículo.

    Por fim, a letra E é a nossa resposta, pois simplesmente altera o valor do campo COD_CAT, e o comando só é executado caso exista algum veículo pertencente à categoria xs atualmente alugado. Nenhuma restrição de integridade relativa aos valores armazenados na tabela irá impedir esse comando de rodar!

  • O item não é tão fácil quanto parece. Veja que o examinador pede para identificarmos o comando que será executado com sucesso, de forma independente do estado das tabelas - ou seja, o comando que nunca produzirá erro, seja qual for o dado que esteja armazenado nas tabelas.

    Nesse caso, podemos eliminar os itens A e C, pois embora sintaticamente corretos, fazem inserções que teoricamente podem produzir erro, se o valor da chave primária inserido por eles já estiver presente nas tabelas.

    A letra B está errada porque o comando EXISTS só confere se não existe algum veículo atualmente alugado (A.data_dev IS NOT NULL) que pertence à categoria. No entanto, o comando abre margem para que se remova uma categoria que é referenciada por algum veículo existente na frota da locadora (tabela Veículo, chave estrangeira COD_CAT). Nesse caso, se eliminarmos a categoria antes de eliminarmos os veículos associados a essa categoria, teremos um erro de integridade referencial.

    A letra D está incorreta por um motivo parecido. Nesse caso, o EXISTS confere se existe um veículo atualmente alugado (A.data_dev IS NOT NULL). Se existe, a remoção do veículo não poderia acontecer, pois o registro de aluguel faz referência ao veículo.

    Por fim, a letra E é a nossa resposta, pois simplesmente altera o valor do campo COD_CAT, e o comando só é executado caso exista algum veículo pertencente à categoria xs atualmente alugado. Nenhuma restrição de integridade relativa aos valores armazenados na tabela irá impedir esse comando de rodar!

    Gabarito: E

    Professor Arthur Mendonça