Vous êtes sur la page 1sur 9

Atividade Extra 2 Bimestre

1. Criem o Banco de Dados ProdutoraFilmes e definam as tabelas


abaixo:
Filme
- Codigo
- Nome

FilmeArtista
CodigoFilme
CodigoArtista
DataGravacao

- Genero

Artista
Codigo
Nome
DataNascimento
PaisOrigem
Caracteristicas
Genero

- DataLancamento

CREATE DATABASE PRODUTORAFILMES;


USE PRODUTORAFILMES;
CREATE TABLE FILME(
CODIGO INT NOT NULL AUTO_INCREMENT
, NOME VARCHAR(50) NOT NULL
, GENERO VARCHAR(30)
, DATALANCAMENTO TIMESTAMP
, CONSTRAINT PRIMARY KEY (CODIGO) );
CREATE TABLE ARTISTA(
CODIGO INT NOT NULL AUTO_INCREMENT
, NOME VARCHAR(50)
, DATANASCIMENTO DATE
, PAISORIGEM VARCHAR(30)
, CARACTERISTICAS VARCHAR(100)
, GENERO VARCHAR (30)
, CONSTRAINT PK_CODIGO PRIMARY KEY (CODIGO));
CREATE TABLE FILMEARTISTA(
CODIGOFILME INT
, CODIGOARTISTA INT
, DATAGRAVACAO TIMESTAMP
, CONSTRAINT FK_CODIGOFILME FOREIGN KEY (CODIGOFILME) REFERENCES FILME (CODIGO)
, CONSTRAINT FK_CODIGOARTISTA FOREIGN KEY(CODIGOARTISTA) REFERENCES ARTISTA
(CODIGO)
);

2. Crie uma Procedure para cada uma das tabelas, que ir


inserir e atualizar os respectivos registros.
TABELA ARTISTA
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_ARTISTA_IU`(_CODIGO INT, _NOME
VARCHAR(50), DATANASCIMENTO DATE,
PAISORIGEM VARCHAR(30),
CARACTERISTICAS VARCHAR(100), GENERO VARCHAR (30), _OP CHAR(1))
BEGIN
IF (_OP = 'U' OR _OP ='u') THEN
UPDATE ARTISTIA SET
NOME = _NOME,
DATANASCIMENTO = _DATANASCIMENTO,
PAISORIGEM = _PAISORIGEM,
CARACTERISTICAS = _CARACTERISTICAS,
GENERO = _GENERO
WHERE
CODIGO = _CODIGO;
END IF;
IF (_OP = 'I' OR _OP = 'i') THEN
INSERT INTO ARTISTA (NOME, DATANASCIMENTO, PAISORIGEM,
CARACTERISTICAS, GENERO)
VALUES (_NOME, _DATANASCIMENTO, _PAISORIGEM, _CARACTERISTICAS,
_GENERO);
END IF;
END

TABELA FILME
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_FILME_IU`(_CODIGO INT, _NOME
VARCHAR(50), _GENERO VARCHAR(30),
_DATALANCAMENTO DATETIME, _OP CHAR(1))
BEGIN
IF (_OP = 'U' OR _OP = 'u') THEN
UPDATE FILME SET
NOME = _NOME,
GENERO = _GENERO,
DATALANCAMENTO = _DATALANCAMENTO
WHERE
CODIGO = _CODIGO;
END IF;
IF (_OP = 'I' OR _OP = 'i') THEN
INSERT INTO FILME (NOME, GENERO, DATALANCAMENTO)
VALUES (_NOME, _GENERO, _DATALANCAMENTO);
END IF;
END

TABELA FILMEARTISTA
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_FILMEARTISTA_I`(_CODIGOFILME INT,
_CODIGOARTISTA INT)
BEGIN
INSERT INTO FILMEARTISTA (CODIGOFILME, CODIGOARTISTA)
VALUES (_CODIGOFILME, _CODIGOARTISTA);
END

3. Crie uma Procedure para cada uma das tabelas, que ir


apagar os registros das tabelas, tomando por base a chave
primria.
TABELA FILME
DELIMITER $$
USE `produtorafilmes`$$
CREATE PROCEDURE `SP_FILME_D` (_CODIGO INT)
BEGIN
DELETE FROM FILMERTISTA WHERE CODIGOFILME = _CODIGO;
DELETE FROM FILME WHERE CODIGO = _CODIGO;
END
$$
DELIMITER;

TABELA ARTISTA
DELIMITER $$
USE `produtorafilmes`$$
CREATE PROCEDURE `SP_ARTISTA_D` (_CODIGO INT)
BEGIN
DELETE FROM FILMEARTISTA WHERE CODIGOARTISTA = _CODIGO
DELETE FROM ARTISTA WHERE CODIGO = _CODIGO;
END
$$
DELIMITER;

TABELA FILMEARTISTA
DELIMITER $$
USE `produtorafilmes`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_FILMEARTISTA_D`(_CODIGOFILME
INT, CODIGOARTISTA INT)
BEGIN
DELETE FROM FILMEARTISTA WHERE CODIGOFILME = _CODIGOFILME
AND CODIGOARTISTA = _CODIGOARTISTA;
END $$
DELIMITER ;

4. Crie uma View que exiba os Filmes


CREATE OR REPLACE VIEW `VW_FILME_SELECT` AS
SELECT * FROM FILME;
;

5. Crie uma View que exiba os Artistas.


CREATE OR REPLACE VIEW `VW_ARTISTA_SELECT` AS
SELECT * FROM ARTISTA;
;

6. Crie uma View que ir exibir o nome e gnero dos Filmes, e o


nome e pas dos Artistas que participaram dos respectivos
filmes.
CREATE OR REPLACE VIEW `VW_INFOFILMES` AS
SELECT B.NOME AS NOMEFILME, B.GENERO AS GENEROFILME, c.NOME AS
NOMEARTISTA, C.PAISORIGEM
FROM FILMEARTISTA A
INNER JOIN FILME B ON B.CODIGO = A.CODIGOFILME
INNER JOIN ARTISTA C ON C.CODIGO = A.CODIGOARTISTA
;

7. Crie duas novas tabelas, conforme diagramas abaixo:


HistoricoFilme

HistoricoArtista

- DataAlteracao

- DataAlteracao

- Codigo

- Codigo

- NomeAnterior

- NomeAnterior

- NomeAtual

- NomeAtual

- GeneroAnterior

- DataNascimentoAnterior

- GeneroAtual
- DataLancamentoAnter
ior
- DataLancamentoAtual

-DataNascimentoAtual
- PaisOrigemAnterior
- PaisOrigemAtual
- CaracteristicasAnterior
- CaracteristicasAtual
- GeneroAnterior
- GeneroAtual

CREATE TABLE HISTORICOFILME (


DATAALTERACAO TIMESTAMP
, CODIGO INT(11)
, NOMEANTERIOR VARCHAR(50)
, NOMEATUAL VARCHAR(50)
, GENEROANTERIOR VARCHAR(30)
, GENEROATUAL VARCHAR(30)
, DATALANCAMENTOANTERIOR TIMESTAMP
, DATALANCAMENTOATUAL TIMESTAMP
, CONSTRAINT PK_DTALTERACAO PRIMARY KEY (DATAALTERACAO));
CREATE TABLE HISTORICOARTISTA (
DATAALTERACAO TIMESTAMP
, CODIGO INT(11)
, NOMEANTERIOR VARCHAR(50)
, NOMEATUAL VARCHAR(50)
, DATANASCIMENTOANTERIOR TIMESTAMP
, DATANASCIMENTOATUAL TIMESTAMP
, PAISORIGEMANTERIOR VARCHAR(30)
, PAISORIGEMATUAL VARCHAR(30)
, CARACTERISTICASANTERIOR VARCHAR(100)
, CARACTERISTICASATUAL VARCHAR(100)
, GENEROANTERIOR VARCHAR(30)
, GENEROATUAL VARCHAR(30)
, CONSTRAINT PK_DTALTERACAO PRIMARY KEY (DATAALTERACAO));
CREATE TABLE HISTORICOFILMEARTISTA (
DATAALTERACAO TIMESTAMP
, TIPOALTERACAO CHAR(1)
, CODIGOFILME INT
, CODIGOARTISTA INT
, DATAGRAVACAO TIMESTAMP
, CONSTRAINT PK_DTALTERACAO PRIMARY KEY (DATAALTERACAO));

HistoricoFilmeAr
tista
- DataAlteracao
- TipoAlteracao
- CodigoFilme
- CodigoArtista
- DataGravacao

8. Crie uma Trigger que ser disparada quando ocorrer um UPDATE na


tabela Filme. Ela dever inserir na tabela HistoricoFilme a data da
alterao, o cdigo do filme e tambm os dados anteriores a alterao e
os dados aps a alterao.
DELIMITER $$
USE `produtorafilmes`$$
CREATE DEFINER=current_user TRIGGER
`produtorafilmes`.`filme_after_update` AFTER UPDATE ON `filme` FOR EACH
ROW
BEGIN
INSERT INTO HISTORICOFILME (DATAALTERACAO, CODIGO,
NOMEANTERIOR, NOMEATUAL, GENEROANTERIOR, GENEROATUAL,
DATALANCAMENTOANTERIOR, DATALANCAMENTOATUAL)
SELECT NOW(), CODIGO, OLD.NOME, NEW.NOME, OLD.GENERO,
OLD.GENERO,
OLD.DATALANCAMENTO, NEW.DATALANCAMENTO FROM
FILME
WHERE
CODIGO = NEW.CODIGO;
END $$
DELIMITER ;

9. Crie uma Trigger que ser disparada quando ocorrer um UPDATE na


tabela Artista. Ela dever inserir na tabela HistoricoArtista a data da
alterao, o cdigo do artista e tambm os dados anteriores a alterao
e os dados aps a alterao.
DELIMITER $$
USE `produtorafilmes`$$
CREATE DEFINER= current_user TRIGGER `produtorafilmes`.`artista_AFTER_UPDATE` AFTER
UPDATE ON `artista` FOR EACH ROW
BEGIN
INSERT INTO HISTORICOARTISTA (DATAALTERACAO, CODIGO, NOMEANTERIOR,
NOMEATUAL, DATANASCIMENTOANTERIOR, DATANASCIMENTOATUAL, PAISORIGEMANTERIOR,
PAISORIGEMATUAL, CARACTERISTICASANTERIOR, CARACTERISTICASATUAL, GENEROANTERIOR,
GENEROATUAL)
select NOW(), codigo, OLD.nome, new.nome, OLD.datanascimento,
NEW.DATANASCIMENTO, OLD.PAISORIGEM, new.PAISORIGEM, OLD.CARACTERISTICAS,
NEW.CARACTERISTICAS, OLD.GENERO, NEW.GENERO
FROM ARTISTA
where
codigo = new.codigo;
END $$

DELIMITER ;

10. Crie uma Trigger que ser dispara quando ocorrer um INSERT na tabela
FilmeArtista. Ela dever inserir na tabela HistoricoFilmeArtista a data da
alterao, o tipo de alterao com o valor I e os demais valores
inseridos.
DELIMITER $$
USE `produtorafilmes`$$
CREATE DEFINER=current_user TRIGGER `produtorafilmes`.`filmeartista_AFTER_INSERT` AFTER
INSERT ON `filmeartista` FOR EACH ROW
BEGIN
INSERT INTO HISTORICOFILMEARTISTA (DATAALTERACAO, TIPOALTERACAO,
CODIGOFILME, CODIGOARTISTA, DATAGRAVACAO)
SELECT NOW(), 'I', NEW.CODIGOFILME, NEW.CODIGOARTISTA, NEW.DATAGRAVACAO
FROM FILMEARTISTA
WHERE
CODIGOFILME = NEW.CODIGOFILME AND CODIGOARTISTA =
NEW.CODIGOARTISTA;
END $$
DELIMITER ;

11. Crie uma Trigger que ser dispara quando ocorrer um DELETE na
tabela FilmeArtista. Ela dever inserir na tabela HistoricoFilmeArtista a
data da alterao, o tipo de alterao com o valor D e os demais
valores apagados.
DELIMITER $$
USE `produtorafilmes`$$
CREATE DEFINER=current_user TRIGGER `produtorafilmes`.`filmeartista_BEFORE_DELETE`
BEFORE DELETE ON `filmeartista` FOR EACH ROW
BEGIN
INSERT INTO HISTORICOFILMEARTISTA (DATAALTERACAO, TIPOALTERACAO,
CODIGOFILME, CODIGOARTISTA, DATAGRAVACAO)
SELECT NOW(), 'D', OLD.CODIGOFILME, OLD.CODIGOARTISTA, OLD.DATAGRAVACAO
FROM FILMEARTISTA
WHERE
CODIGOFILME = OLD.CODIGOFILME AND CODIGOARTISTA =
OLD.CODIGOARTISTA;
END $$
DELIMITER ;

12. Depois de criada a estrutura das tabelas, insira ao menos 3 filmes e 5


artistas e filmes em que os artistas participem, utilizando as Procedures.

Vous aimerez peut-être aussi