Vous êtes sur la page 1sur 4

Faculdade Cenecista de Varginha- FACECA Sistemas de Informao Banco de dados II Prof.

Mrcio Henrique

EXERCCIOS DE BANCO DE DADOS II 11/04/2012 Questo 01: Defina uma estrutura de dados para armazenar os cdigos e nomes dos atletas de corridas de rua, a data e o local das corridas e um ranking dos 5 primeiros colocados com o tempo gasto de cada um. Monte o script necessrio para criar as tabelas. Lembre-se de levar em considerao a normalizao, as chaves primrias e chaves estrangeiras: CREATE TABLE ATLETAS ( IDATLETA INTEGER NOT NULL, NOMEATLETA VARCHAR(50) NOT NULL); CREATE TABLE CORRIDAS( IDCORRIDA SMALLINT NOT NULL, DATA DATE NOT NULL, LOCAL VARCHAR(50) NOT NULL); CREATE TABLE RANKING( IDATLETA SMALLINT NOT NULL, IDCORRIDA NOT NULL, MINUTOS NOT NULL) ALTER TABLE ATLETAS ADD CONSTRAINT PK_ATLETA PRIMARY KEY (IDATLETA); ALTER TABLE CORRIDAS ADD CONSTRAINT PK_CORRIDA PRIMARY KEY (IDCORRIDA); ALTER TABLE RANKING ADD CONSTRAINT PK_RANKING PRIMARY KEY (IDATLETA,IDCORRIDA); ALTER TABLE RANKING ADD CONSTRAINT FK_RANKATRETA FOREIGN KEY (IDATLETA) REFERENCES ATLETAS (IDATLETA) ON UPDATE CASCADE USING INDEX IDX_FK_RANKATLETA; ALTER TABLE RANKING ADD CONSTRAINT FK_RANKCORRIDA FOREIGN KEY (IDCORRIDA) REFERENCES CORRIDAS (IDCORRIDA) ON UPDATE CASCADE USING INDEX IDX_FK_RANKCORRIDA;

Questo 02: Quanto ao comando EXIT da linguagem DSQL do Firebird marque a opo CORRETA: A-( ) Pode ser utilizado tanto em triggers quanto em procedures B-( x ) Encerra a execuo da procedure que no possui variveis de output. C-( ) Tem a mesma funo do comando SUSPEND; D-( ) Precisa ser usado para retornar os valores da procedure. Questo 03: No um benefcio da normalizao: A-( ) Redues de valores redundantes B-( ) Correta representao semntica C-( ) Reduo/eliminao de tuplas esprias D-( X ) Garantir a integridade dos dados

Faculdade Cenecista de Varginha- FACECA Sistemas de Informao Banco de dados II Prof. Mrcio Henrique

Metadata do banco de dados Financeiro Referncia para as questes de 4 a 10


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 SET SQL DIALECT 3; SET NAMES NONE; CREATE DATABASE '127.0.0.1/3050:T:\FIREBIRD\FINANCEIRO.FDB' USER 'SYSDBA' PASSWORD 'masterkey' PAGE_SIZE 16384 DEFAULT CHARACTER SET NONE; CREATE GENERATOR PESSOAS_ID; SET GENERATOR PESSOAS_ID TO 0; CREATE GENERATOR PLANOCONTAS_ID; SET GENERATOR PLANOCONTAS_ID TO 0; CREATE TABLE PAGAMENTOS ( IDPGTO INTEGER NOT NULL, CREDOR INTEGER NOT NULL, IDPLANO SMALLINT NOT NULL, EMISSAO DATE NOT NULL, VENCIMENTO DATE NOT NULL, VALOR DECIMAL(15,2) DEFAULT 0 NOT NULL, DATAPGTO DATE, ACRESCIMO NUMERIC(15,2) DEFAULT 0, DESCONTOS NUMERIC(15,2) DEFAULT 0, VALORPAGO NUMERIC(15,2) DEFAULT 0, VALORDEB COMPUTED BY (VALOR + ACRESCIMO - DESCONTOS - VALORPAGO) ); CREATE TABLE PESSOAS ( IDPESSOA INTEGER NOT NULL, TIPO CHAR(1) NOT NULL, CPF_CNPJ VARCHAR(14) NOT NULL, NOME VARCHAR(50) NOT NULL ); CREATE TABLE PLANOCONTAS ( IDPLANO SMALLINT NOT NULL, DESCPLANO VARCHAR(80) NOT NULL, TIPO CHAR(1) NOT NULL, PAI SMALLINT NOT NULL, NIVEL SMALLINT NOT NULL ); ALTER TABLE PESSOAS ADD CHECK (TIPO IN ('F','J')); ALTER TABLE PAGAMENTOS ADD CONSTRAINT PK_PAGAMENTOS PRIMARY KEY (IDPGTO); ALTER TABLE PESSOAS ADD CONSTRAINT PK_PESSOAS PRIMARY KEY (IDPESSOA); ALTER TABLE PLANOCONTAS ADD CONSTRAINT PK_PLANOCONTAS PRIMARY KEY (IDPLANO); ALTER TABLE PLANOCONTAS ADD CHECK (TIPO IN ('D', 'C')); SET TERM ^ ; CREATE TRIGGER SET_PESSOAS_ID FOR PESSOAS ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF ((NEW.IDPESSOA IS NULL) OR (NEW.IDPESSOA = 0)) THEN NEW.IDPESSOA = GEN_ID(PESSOAS_ID,1); END ^ CREATE TRIGGER SET_PLANOCONTAS_ID FOR PLANOCONTAS ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF ((NEW.IDPLANO IS NULL) OR (NEW.IDPLANO = 0)) THEN NEW.IDPLANO = GEN_ID(PLANOCONTAS_ID,1); END ^ SET TERM ; ^

Questo 04: Monte um comando SQL-SELECT para listar o nome da pessoa e o valor total de seus pagamentos realizados em ordem alfabtica: SELECT P.NOME, SUM(D.VALDEP) AS TOTAL FROM PESSOAS P INNER JOIN DEBITOS D ON D.CREDOR = P.IDPESSOA GROUP BY 1 ORDER BY 1 Questo 05: Qual comando deve ser usado para impedir que o mesmo CPF/CNPJ possa ser includo mais de vez na tabela PESSOAS? ALTER TABLE PESSOAS ADD CONSTRAINT UNQ_DOC UNIQUE (CPF_CNPJ) USING INDEX IDX_UNQ_CPF_CNPJ;

Faculdade Cenecista de Varginha- FACECA Sistemas de Informao Banco de dados II Prof. Mrcio Henrique

Questo 06: Considerando que a tabela PESSOAS possui os seguintes dados:

Selecione o comando abaixo que reproduz o seguinte resultado:

A-( ) B-( X )

C-( ) D-( )

SELECT IIF(P.TIPO='F','FISICA','JURIDICA') AS TIPO,COUNT(*) AS QTD FROM PESSOAS P GROUP BY 1 SELECT 'FISICA' AS TIPO,COUNT(*) AS QTD FROM PESSOAS P UNION SELECT 'JURIDICA' AS TIPO,COUNT(*) AS QTD FROM PESSOAS P SELECT 'FISICA','JURIDICA' TIPO,COUNT(*) AS QTD FROM PESSOAS P GROUP BY 1 SELECT IIF(P.TIPO='F','FISICA','JURIDICA') AS TIPO, QTD FROM PESSOAS P

Questo 07: Aps criar o usurio ADM ser preciso dar direito a este usurio para consultar e alterar registros na tabela PAGAMENTOS e permitir que este direito seja delegado a outros: Qual a sintaxe correta? GRANT SELECT, UPDATE ON PAGAMENTOS TO ADM WITH GRANT OPTION; Questo 08: Observe o cdigo da procedure abaixo:
CREATE PROCEDURE CALCULAACRESCIMO (IDPAGTO INTEGER, DATAPGTO DATE, MULTAMES NUMERIC(8,2)) RETURNS ( ACRESCIMO NUMERIC(15,2)) AS DECLARE VARIABLE VALOR NUMERIC(15,2); DECLARE VARIABLE VENCIMENTO DATE; DECLARE VARIABLE MESES INTEGER; BEGIN SELECT P.VALOR,P.VENCIMENTO FROM PAGAMENTOS P WHERE P.IDPGTO = :IDPAGTO INTO :VALOR,:VENCIMENTO; MESES = UDF_MONTHSBETWEEN(:VENCIMENTO,:DATAPGTO); ACRESCIMO = :VALOR * :MESES * :MULTAMES/100; SUSPEND; END

A funo de usurio com o nome UDF_MONTHSBETWEEN retorna o nmero de meses entre duas datas. Considerando que um registro de dbito possui os seguintes dados: IDPGTO 1 VALOR 300 VENCIMENTO 31/01/2011

Se o comando SELECT * FROM CALCULAACRESCIMO(1,'31.03.2011',10) for executado, qual ser o valor do acrscimo calculado? ACRESCIMO = :VALOR * :MESES * :MULTAMES/100 => 300 * 2 * 10/100 = 60

Faculdade Cenecista de Varginha- FACECA Sistemas de Informao Banco de dados II Prof. Mrcio Henrique

Questo 09: Ao observar o metadata do banco de dados Financeiro da linha 42 em diante podemos perceber que se trata da criao da trigger responsvel por gerar os identificadores das tabelas PESSOAS e PLANOCONTAS. Crie abaixo uma trigger para gerar o identificador para a tabela PAGAMENTOS, porm, a numerao dever ser decrescente, sempre com nmero IMPAR e comear em 11111: SET GENERATOR PAGAMENTOS_ID TO 11111; CREATE TRIGGER SET_PAGAMENTOS_ID FOR PAGAMENTOS ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF ((NEW.IDPAGAMENTO IS NULL) OR (NEW.PAGAMENTO = 0)) THEN NEW.IDPAGAMENTO = GEN_ID(PAGAMENTOS_ID,-2); END

Questo 10: Voc precisa criar um trigger para validar incluso e alterao na tabela PAGAMENTOS e ajustar o valor do campo VALORPAGO para que no seja maior que o valor (VALOR + ACRESCIMENTO DESCONTOS) sem usar o comando UPDATE. Qual evento usaria? A-( ) B-( x ) C-( ) D-( ) AFTER INSERT OR UPDATE BEFORE INSERT OR UPDATE ON INSERT OR UPDATE WHEN INSERT OR UPDATE

Questo 11: (7 pts) Relacione: ROWS (E)

A-

(C) (A) (B) (C)

CHECK CONSTRAINT NORMALIZAO REVOKE DOMNIO

BCDE-

Processo atravs do qual esquemas de relao, que no sejam satisfatrios s caractersticas do modelo relacional, so decompostos em esquemas menores que satisfaam as propriedades desejveis. Comando utilizado para retirar direitos a um usurio do banco de dados. Chave que restringe ou valida os valores estticos ou dinmicos de um atributo. Serve para representar uma tupla armazenada em outra tabela do mesmo banco de dados para estabelecer uma restrio. Define o intervalo de registros que sero retornados com o objetivo de limitar o nmero de registros

Questo 12: Preencha com V(verdadeiro) ou F(falso): B-( F ) Uma trigger After Insert nunca pode ser usada para validar dados C-( F ) Uma mesma trigger pode ser executa before update e after update D-( F ) Se em uma trigger o valor NEW de um determinado atributo for diferente do valor OLD podemos dizer o valor foi alterado por outra trigger E-( V ) Para ativar ou desativar um ndice no Firebird podemos utilizar o comando ALTER INDEX Questo 13: So informaes mantidas pelo dicionrio de dados, exceto: B-( ) Definio precisa sobre elementos de dados C-( x ) Valores inseridos pelos usurios da aplicao D-( ) Descrio de objetos do banco E-( ) Perfis de usurios, papis e privilgios. Questo 14: Marque a opo correta: B-( ) UPDATE e INSERT so comandos DDL C-( ) CREATE TABLE um comando de manipulao de dados D-( x ) A funo UDF_LEN no faz parte do grupo de funes internas do Firebird E-( ) CREATE TRIGGER e CREATE PROCEDURE so comandos DML