SlideShare uma empresa Scribd logo
Departamento de Eletr´onica, Telecomunica¸c˜oes e Inform´atica
Trabalho Pr´atico Final
Gestor de Filmes
Curso [8240] MI em Engenharia de Computadores e Telem´atica
Disciplina [42532] Base de Dados
Ano letivo 2015/2016
Alunos [68779] Rui Oliveira
[68287] V´ıtor Barros
Pr´atica P1-G10
Docente Professor Joaquim Sousa Pinto
Aveiro, 10 de Junho de 2016
Conte´udo
1 Introdu¸c˜ao 1
2 An´alise de requisitos 1
3 Diagrama Entidade-Rela¸c˜ao 4
4 Modelo Relacional 5
5 T-SQL DDL 6
5.1 Tabelas SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6 T-SQL DML 8
7 Normaliza¸c˜ao 9
8 Stored Procedures 11
9 Views 15
10 UDF’s 15
11 ´Indices 16
12 Triggers 17
13 Seguran¸ca 18
14 Interface gr´afica 19
14.1 Demo - V´ıdeo . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
15 Reposit´orio 23
16 Conclus˜ao 24
17 Referˆencias 24
18 Anexos 24
1 Introdu¸c˜ao
Este trabalho foi realizado no ˆambito da unidade curricular Base de Da-
dos do Mestrado Integrado em Engenharia de Computadores e Telem´atica
da Universidade de Aveiro. O objetivo deste trabalho pr´atico consiste no de-
senvolvimento de uma aplica¸c˜ao com uma interface gr´afica que permita uma
intera¸c˜ao do utilizador com uma base de dados SQL Server para manipula¸c˜ao
de dados.
O trabalho que propos´emos consistiu numa aplica¸c˜ao que permite gerir
filmes. Esta aplica¸c˜ao foi desenvolvida utilizando WPF1
na linguagem C#
conjuntamente com uma base de dados SQL Server. Atrav´es desta aplica¸c˜ao,
o utilizador poder´a adicionar os filmes pretendidos, associar-lhe os atores
intervenientes, o diretor, o realizador, o escritor, a companhia de realiza¸c˜ao,
a banda sonora, os trailers, os locais e datas de lan¸camento e os pr´emios
que recebeu, caso existam. Para al´em do descrito anteriormente, a nossa
aplica¸c˜ao permite apenas que utilizadores registados possam aceder/alterar
a informa¸c˜ao disponibilizada.
A base de dados existente fornece ferramentas que permitem a cria¸c˜ao,
altera¸c˜ao e consulta da base de dados de forma segura, eficiente e robusta.
Este relat´orio reflete todos os passos e decis˜oes tomadas na cria¸c˜ao da base
de dados que sustenta o projeto bem como uma descri¸c˜ao das capacidades
da aplica¸c˜ao desenvolvida para o utilizador.
Para a cria¸c˜ao deste projeto foi seguido o processo lecionado nas aulas,
sendo estas as seguintes fases do processo: an´alise de requisitos, desenho
conceptual, desenho do esquema l´ogico, desenho do esquema f´ısico e admi-
nistra¸c˜ao.
2 An´alise de requisitos
Dada as especifica¸c˜oes principais descritas na introdu¸c˜ao deste relat´orio,
teremos as seguintes entidades:
• Filme: um determinado filme ´e caracterizado por uma descri¸c˜ao, uma
categoria, uma classifica¸c˜ao, um titulo, uma dura¸c˜ao, uma companhia
de produ¸c˜ao, as datas de lan¸camento e o(s) pr´emio(s) ganhos. Possui
ainda os atores intervenientes, o diretor, o realizador, o escritor e uma
banda sonora associada.
• Diretor: ´e caracterizado por um nome, uma foto, e uma data de
nascimento.
1
Windows Presentation Foundation
1
• Ator: ´e caracterizado por um nome, uma foto e uma data de nasci-
mento, para al´em disso inclui uma biografia.
• Escritor: ´e caracterizado por um nome, uma foto e uma data de
nascimento, para al´em disso inclui uma biografia.
• Realizador: ´e caracterizado por um nome, uma foto, e uma data de
nascimento.
• Companhia: ´e caracterizada por um nome.
• M´usica: ´e caracterizada por um titulo, um g´enero, e uma banda/in-
terprete.
• Trailer: ´e caracterizado por um titulo, uma dura¸c˜ao, uma data de
lan¸camento e o idioma.
• Lan¸camento: ´e caracterizado por um titulo, uma data e o pa´ıs.
• Pr´emio: ´e caracterizado por um tipo, o ano e uma breve descri¸c˜ao.
Foram tamb´em registadas algumas especifica¸c˜oes para o desenho concep-
tual:
• Cada filme ter´a que ter (obrigatoriamente) um ou mais escritores asso-
ciados.
• Cada filme ter´a que ter (obrigatoriamente) um ou mais atores associa-
dos.
• Cada filme ter´a que ter um realizador associados (obrigatoriamente).
• Cada filme ter´a que ter (obrigatoriamente) um ou mais m´usicas asso-
ciadas - constituindo a banda sonora do filme.
• Cada filme ter´a que ter um diretor associados (obrigatoriamente).
• Cada filme ter´a que ter uma companhia associadas (obrigatoriamente).
• Cada filme poder´a ter um ou mais trailers associados.
• Cada filme poder´a ter um ou mais pr´emios associados.
• Cada filme poder´a ter um ou mais lan¸camentos associados.
• Realizadores, escritores, atores e diretores s˜ao todos pessoas!
2
Para al´em da possibilidade de adi¸c˜ao, esta aplica¸c˜ao tamb´em disponibi-
liza a op¸c˜ao de algumas edi¸c˜oes (atores, escritores, realizadores, m´usicas),
pesquisar filmes e tudo o que a eles est´a associado, escolhendo a categoria
na qual se pretende pesquisar e preenchendo um dos campos antes de fazer
efetivamente a pesquisa.
As principais tarefas que o utilizador pode encontrar encontram-se des-
critas no seguinte diagrama.
Adicionar Filme
Adicionar Ator
Adiconar Diretor
Adiconar Escritor
Adicionar Realizador
Adicionar Musicas
(banda sonora)
Adiconar Trailer
Adiconar Lançamento
(do filme)
Adiconar Prémios
Pesquisar por Trailer
Pesquisar por Prémios
Pesquisar por Filme
Pesquisar por Diretor
Pesquisar por Musica
Pesquisar por
Lançamento
Pesquisar por Escritor Pesquisar por Realizador
Pesquisar por Ator
Editar Realizador
Editar Ator
Editar Escritor
Editar Musica
Editar Diretor
Figura 1: Casos de utiliza¸c˜ao do sistema
3
3 Diagrama Entidade-Rela¸c˜ao
Depois da an´alise de requisitos desenhou-se o diagrama entidade rela¸c˜ao
do nosso sistema. Este desenho foi descrito atrav´es de um diagrama enti-
dade rela¸c˜ao. No diagrama, foram definidas entidades, atributos, rela¸c˜oes,
cardinalidades e dependˆencias. Os retˆangulos representam as tabelas exis-
tentes, as elipses os atributos e por fim os losangos representam as rela¸c˜oes
existentes.
Pessoa
Companhia
Escritor
Realizador
Ator
ID
Foto
Data Nascimento
Nome
Diretor
Biografia
Biografia
Tipo
Ano
Descrição
ID
Data
País
Titulo
Nome
ID
Titulo
ID
Duração URL
Data
Idioma
Titulo
ID Género
Interprete
/ Banda
URL
Titulo
Descrição
Classificação
Duração
ID
Prémio
ganhou
Lançamento
tem
Trailer
tem
Músicas
escrito
por
produzido
contém
dirigido
represe
ntado
criado
N
1
1
N
N
1
M
N
N
N
N
M
1
M
N
N
1
1
Filme
Categoria
Figura 2: Diagrama ER
4
4 Modelo Relacional
Ap´os a constru¸c˜ao do nosso desenho conceptual procedeu-se `a elabora¸c˜ao
do modelo relacional. Este modelo foi constru´ıdo tendo por base o diagrama
entidade rela¸c˜ao e as regras para a realiza¸c˜ao desta tarefa. Cada entidade
e cada rela¸c˜ao ir´a gerar uma ´unica tabela e ap´os realizados os passos para
convers˜ao do desenho conceptual no modelo relacional foi criado o modelo
relacional.
ID Título Descrição ClassificaçãoFilme
Músicas
Companhia
Escritor
Diretor
Ator
Realizador
Prémio
Lançamento
Trailer
Músicas do Filme
Representado por
Escrito por
Duração ID Companhia
ID Título Género Intérprete/Banda URL
ID Nome
Ano Tipo Descrição ID Filme
ID Título Data País ID Filme
ID Título Duração Data URL Idioma
ID Filme
ID Filme ID Música
ID Filme ID Ator
Biografia
ID Nome Foto Data de Nascimento
ID Nome Foto Data de Nascimento
BiografiaID Nome Foto Data de Nascimento
ID Nome Foto Data de Nascimento
ID Diretor ID Realizador
ID Filme
ID Filme ID Escritor
Categoria
Figura 3: Modelo Relacional
Para al´em das tabelas acima, foi criada um tabela simples - apenas com
id, username e password - que permite o utilizador registar-se e autenticar-se
na aplica¸c˜ao. O campo password ´e do tipo varbinary(128).
5
5 T-SQL DDL
Ap´os a elabora¸c˜ao do modelo relacional procedemos `a cria¸c˜ao dos coman-
dos SQL que permitem a cria¸c˜ao das respetivas tabelas. Usou-se a linguagem
T-SQL DDL2
onde ´e poss´ıvel especificar todos os atributos, chaves prim´arias
e estrangeiras. O exemplo seguinte ilustra a cria¸c˜ao da tabela filmes, ator e
rela¸c˜ao entre ator e filmes.
Exemplo c´odigo 1
1 -- TABELA FILME
2 create table gestordefilmes.filme(
3 id int NOT NULL Identity ,
4 titulo varchar (100) ,
5 descricao varchar (8000) ,
6 categoria varchar (100) ,
7 classificacao int ,
8 duracao int ,
9 idcompanhia int ,
10 iddiretor int ,
11 idrealizador int ,
12 constraint PKFID primary key (id),
13 constraint FKCID foreign key (idcompanhia)
14 references gestordefilmes.companhia(id),
15 constraint FKDID foreign key (iddiretor)
16 references gestordefilmes.diretor(id),
17 constraint FKRID foreign key (idrealizador)
18 references gestordefilmes.realizador(id));
19 -- TABELA ATOR
20 create table gestordefilmes.ator(
21 id int not null Identity ,
22 nome varchar (50),
23 urlfoto varchar (500) ,
24 datanascimento date ,
25 biografia varchar (1000) ,
26 constraint PKAID primary key (id));
27 -- TABELA REPRESENTADO POR
28 create table gestordefilmes.representadopor(
29 idfilme int not null ,
30 idator int not null ,
2
Data Definition Language
6
31 constraint PKRPFIDMID primary key (idfilme , idator),
32 constraint FKRPFID foreign key (idfilme)
33 references gestordefilmes.filme(id),
34 constraint FKAID foreign key (idator)
35 references gestordefilmes.ator(id));
5.1 Tabelas SQL
Ap´os da inser¸c˜ao de todas as tabelas na base de dados (SQL server)
obtivemos o seguinte diagrama de rela¸c˜oes.
Figura 4: Diagrama relacional de tabelas
7
A tabela que permite a autentica¸c˜ao ´e a seguinte:
Figura 5: Tabela para autentica¸c˜ao dos utilizadores
Todos os identificadores de cada tabela (id’s) s˜ao auto-incrementados.
6 T-SQL DML
Outra linguagem associada ao SQL que utiliz´amos foi o T-SQL-DML3
.
No caso particular do nosso trabalho, us´amos explicitamente esta lingua-
gem na inser¸c˜ao de um pr´emio a um filme, o mesmo pode ser visto no exemplo
de c´odigo c# seguinte.
Exemplo c´odigo 2
1 string queryInsertSQLDML = INSERT INTO gestordefilmes.premio
2 (idfilme , ano , tipo , descricao)
3 VALUES(@idfilme , @ano , @tipo , @descricao );
4
5 SqlCommand insertQuery = new SqlCommand(queryInsertSQLDML , cnn);
6 insertQuery.Parameters.AddWithValue(@idfilme , p.filme_id );
7 insertQuery.Parameters.AddWithValue(@ano , p.ano);
8 insertQuery.Parameters.AddWithValue(@tipo , p.tipo );
9 insertQuery.Parameters.AddWithValue(@descricao , p.descricao );
Implicitamente o T-SQL DML ´e usado em Stored Procedures e User De-
fined Functions como se vai ver mais a frente.
3
Data Manipulation Language
8
7 Normaliza¸c˜ao
Ap´os alguns estudos, conclu´ımos que as rela¸c˜oes da nossa base de dados
se encontram na forma BCNF, logo tamb´em podemos afirmar que satisfaz
as condi¸c˜oes das 1º, 2ª e 3ª formas. Nas seguintes figuras s˜ao apresentadas
as normaliza¸c˜oes das rela¸c˜oes da nossa base de dados.
Figura 6: Normaliza¸c˜ao de Filme, M´usica, Companhia e Escritor
Figura 7: Normaliza¸c˜ao de Diretor, Ator e Realizador
9
Figura 8: Normaliza¸c˜ao de Pr´emio, Lan¸camento, Trailer e M´usicas Do Filme
Figura 9: Normaliza¸c˜ao de Representado por, Escrito por e Login
10
8 Stored Procedures
Dicidiu-se usar stored procedures para criar uma camada de abstra¸c˜ao en-
tre o modelo de dados, a sua manipula¸c˜ao e a camada aplicacional. A adop¸c˜ao
desta abordagem permite-nos criar de forma segura, com boa performance e
que garante a integridade dos dados, m´etodos para criar, modificar e apagar
modelo de dados do nosso sistema de base de dados.
Outro dos motivos foi garantir um contrato de utiliza¸c˜ao entre o ”de-
veloper”da aplica¸c˜ao e a utiliza¸c˜ao do nosso modelo de dados, permitindo
assim especificar que parˆametros s˜ao necess´arios para realizar cada opera¸c˜ao
e garantindo tamb´em um bom controlo de erro avisando-o com T-SQL Raise
Error quando este n˜ao estiver a cumprir o contrato.
As stored procedures ao contr´ario de um uso do nosso modelo de dados em
DML permite que o conjunto de instru¸c˜oes compiladas na Stored Procedure
n˜ao tenham de ser recompiladas cada vez que o procedimento ´e invocado,
sendo estas, apenas compiladas na primeira vez que s˜ao executadas e depois
disso s˜ao guardadas em cache, sendo que isto permite maior rapidez no acesso
ao modelo de dados.
Sendo assim, o principal foco em todas as stored procedures que se de-
senvolveu foi procurar garantir um bom controlo de erro para a camada
aplicacional e que a cria¸c˜ao, altera¸c˜ao ou remo¸c˜ao de dados do nosso modelo
de dados fosse realizada de forma consistente.
O c´odigo seguinte ´e um bom exemplo da abstra¸c˜ao dada ao utilizador.
Exemplo c´odigo 3
1 GO
2 CREATE PROCEDURE gestordefilmes.sp_AddFilme (
3 @id INT = NULL OUTPUT ,
4 @titulo varchar (100) ,
5 @descricao varchar (8000) ,
6 @categoria varchar (100) ,
7 @classificacao int ,
8 @duracao int ,
9 @idcompanhia int ,
10 @iddiretor int ,
11 @idrealizador int ,
12 @Escritor AS gestordefilmes.listaEscritor READONLY ,
13 @Elenco AS gestordefilmes.listaElenco READONLY ,
14 @Banda AS gestordefilmes.listaBanda READONLY
15 )
11
16 AS
17 WITH ENCRYPTION
18 BEGIN
19 INSERT into gestordefilmes.filme VALUES (@titulo ,
20 @descricao , @categoria , @classificacao , @duracao ,
21 @idcompanhia , @iddiretor , @idrealizador );
22
23 SET @id = SCOPE_IDENTITY ();
24 insert into gestordefilmes.escritopor select @id ,
25 id from @Escritor;
26 insert into gestordefilmes.representadopor select
27 @id , id from @Elenco;
28 insert into gestordefilmes.musicasdofilme select
29 @id , id from @Banda;
30 END
31 GO
Qualquer utilizador desta base de dados, sabe que para inserir um filme
tem de chamar o Stored Procedure ”gestordefilmes.sp AddFilme”com os parˆametros
definidos, para o filme ser inserido. Assim sendo, ´e completamente transpa-
rente para o utilizador que, na realidade, a informa¸c˜ao que ele introduziu
est´a guardada em 3 tabelas diferentes. Essa transparˆencia e simplicidade do
lado do utilizador era um objetivo a alcan¸car na cria¸c˜ao do nosso projeto.
O c´odigo seguinte ´e um exemplo da implementa¸c˜ao de um Stored proce-
dures que permite editar os dados na base de dados.
Exemplo c´odigo 4
1 go
2 create procedure gestordefilmes.sp_EditEscritor(
3 @escritor_id int ,
4 @nome varchar (50),
5 @data date ,
6 @url varchar (500) ,
7 @bio varchar (1000)
8 )
9 as
10 WITH ENCRYPTION
11 begin
12 update gestordefilmes.escritor
13 set nome = @nome ,
14 datanascimento = @data ,
12
15 urlfoto = @url ,
16 biografia = @bio
17 where gestordefilmes.escritor.id = @escritor_id
18 end
19 go
Os Stored procedures foram tamb´em utilizados para podermos efetuar
pesquisas sobre as tabelas pretendidas pelo utilizador. Para esta situa¸c˜ao,
pretendia-se tornar a abstra¸c˜ao para o utilizador ainda maior, de modo a
que este pudesse pesquisar por m´ultiplos atributos sem que nenhum seja
obrigat´orio. Por esta l´ogica, a combina¸c˜ao de atributos na pesquisa ´e sempre
um “and”.
Um exemplo de uma pesquisa implementada recorrendo a um Stored pro-
cedures pode ser visto no c´odigo seguinte.
Exemplo c´odigo 5
1 go
2 CREATE procedure gestordefilmes.sp_pesquisarPremio (
3 @IDFilme int = null ,
4 @Ano int = null
5 )
6 AS
7 WITH ENCRYPTION
8 BEGIN
9 declare @tmp table(id int , idfilme int , ano int ,
10 tipo varchar (20), descricao varchar (200));
11 declare @out table(id int , idfilme int , ano int ,
12 tipo varchar (20), descricao varchar (200));
13
14 insert into @out select * from
15 gestordefilmes.udf_GetPremios ();
16
17 if not @IDFilme is null
18 insert into @tmp select * from @out
19 where idfilme=@IDFilme;
20 else
21 insert into @tmp select * from @out;
22 delete from @out
23
24 if not @Ano is null
25 insert into @out select * from @tmp
13
26 where ano=@Ano;
27 else
28 insert into @out select * from @tmp;
29
30 delete from @tmp;
31 select idfilme ,ano ,tipo ,descricao from @out;
32 END
33 go
14
9 Views
Opt´amos por n˜ao utilizar views uma vez que n˜ao s˜ao compiladas, op-
timizadas e n˜ao suportam uma l´ogica mais complexa para uma consulta.
Consequentemente decidimos utilizar somente User Defined Funtions.
10 UDF’s
User Defined Funtions (UDF) constituem outra ferramenta utilizada para
a cria¸c˜ao da camada de abstra¸c˜ao, proporcionando ao utilizador os dados que
ele pede, independentemente da sua localiza¸c˜ao nas tabelas da base de dados.
Existe uma grande semelhan¸ca entre views e UDF’s, mas estas ´ultimas tˆem
a vantagem de poderem ser parametriz´aveis. Mais uma vez, temos UDFs
que apenas tem um ”select * from table”mas por raz˜oes de escalabilidade e
consistˆencia, foram utilizadas para todas as tabelas.
Exemplo c´odigo 6
1 go
2 CREATE FUNCTION gestordefilmes.udf_GetFilme () RETURNS table
3 AS
4 RETURN
5 (
6 SELECT titulo , categoria , classificacao ,
7 duracao , descricao , idcompanhia , idrealizador
8 FROM gestordefilmes.filme
9 );
10 go
Exemplo c´odigo 7
1 go
2 CREATE FUNCTION gestordefilmes.udf_GetLancamento () RETURNS table
3 AS
4 RETURN
5 (
6 SELECT pais , data , titulo
7 FROM gestordefilmes.lancamento
8 );
9 go
15
11 ´Indices
Com o aumento do volume de dados, os pedidos de consulta come¸cam
a ter tempos de resposta maiores, pois os dados que existem nas tabelas
encontram-se desorganizados. Para contrariar este aumento dos tempos de
resposta devemos manter as tabelas organizadas de forma a que as consultas
sejam efetuadas mais rapidamente. A utiliza¸c˜ao de ´ındices nos campos que
mais frequentemente ser˜ao utilizados ´e a maneira indicada, onde um ponteiro
´e criado para a posi¸c˜ao real de cada registo.
Exemplo c´odigo 8
1 -- index da tabela filmes , colunas: titulo , categoria ,
2 -- classificacao , companhia , diretor , realizador;
3 CREATE INDEX filmeTitulo ON gestordefilmes.filme (titulo );
4 CREATE INDEX filmeCategoria ON gestordefilmes.filme (categoria );
5 CREATE INDEX filmeClassificacao ON gestordefilmes.filme
6 ( classificacao );
7 CREATE INDEX filmeCompanhia ON gestordefilmes.filme
8 ( idcompanhia );
9 CREATE INDEX filmeDiretor ON gestordefilmes.filme (iddiretor );
10 CREATE INDEX filmeRealizador ON gestordefilmes.filme
11  (idrealizador );
Exemplo c´odigo 9
1 -- index da tabela realizador , colunas: nome;
2 CREATE INDEX realizadorNome ON gestordefilmes.realizador (nome );
3
4 -- index da tabela premio , colunas: filme , ano , tipo;
5 CREATE INDEX premioFilme ON gestordefilmes.premio (idfilme );
6 CREATE INDEX premioAno ON gestordefilmes.premio (ano);
7 CREATE INDEX premioTipo ON gestordefilmes.premio (tipo );
16
12 Triggers
Os triggers, tanto nesta base de dados para gest˜ao e organiza¸c˜ao de filmes
como em qualquer outra, s˜ao utilizados para restringir ou impedir o acesso
a tabelas por users sem acesso para tal. Eles impedem que, por exemplo,
aplica¸c˜oes que s´o possuem permiss˜oes de leitura possam inserir ou apagar
dados e inserir tabelas inteiras, por exemplo.
Atualmente a nossa base de dados contem triggers a impedir o delete de
todas as tabelas. Idealmente, haveria mudan¸cas a implementar nos triggers,
como impedir a inser¸c˜ao ou update em qualquer tabela e/ou nos Stored
Procedures, que executam essas fun¸c˜oes de desativ´a-los no in´ıcio e ativ´a-los
de volta no final. Desta forma todo o acesso `a base de dados seria controlado
atrav´es dos Stored Procedures, aumentando assim a seguran¸ca e impedindo
poss´ıveis inconsistˆencias provocadas por utilizadores.
Os exemplos seguintes ilustram a nossa implementa¸c˜ao de triggers.
Exemplo c´odigo 10
1
2 -- trigger delete ator
3 GO
4 CREATE TRIGGER gestordefilmes.t_removerAtor ON
5 gestordefilmes.ator
6 INSTEAD OF DELETE
7 AS
8 PRINT Operacao para eliminar ator nao e permitida !;
9 GO
Exemplo c´odigo 11
1
2
3 -- trigger delete filme
4 GO
5 CREATE TRIGGER gestordefilmes.t_removerFilme ON
6 gestordefilmes.filme
7 INSTEAD OF DELETE
8 AS
9 PRINT Operacao para eliminar Filme nao e permitida !;
10 GO
17
13 Seguran¸ca
De modo a que fosse poss´ıvel implementar um m´odulo de seguran¸ca,
decidimos que este podia ser aplicado num sistema de login. Para tal, e
como referido anteriormente, cri´amos uma tabela onde fosse possivel guardar
o username e a password.
Tal como pode ser visto no exemplo seguinte, foi criado um stored pro-
cedure que permite efetuar o registo de um novo utilizador, deste modo per-
mitindo um refor¸co da seguran¸ca.
Exemplo c´odigo 12
1 -- ADICIONAR NOVO UTILIZADOR
2 go
3 create procedure gestordefilmes.sp_AddNewUser (
4 @username varchar (50),
5 @pass varchar (128)
6 )
7 as
8 begin
9 insert into gestordefilmes.login values (@username ,
10 EncryptByPassPhrase('poy5t523dsz2s23zaw4 ', @pass ))
11 end
12 go
O c´odigo seguinte permite fazer a valida¸c˜ao das credencias inseridas.
Exemplo c´odigo 13
1 -- VERIFICAR LOGIN
2 go
3 CREATE FUNCTION gestordefilmes.udf_VerifyLogin (@username
varchar (20), @pass varchar (200)) RETURNS table
4 AS
5 RETURN
6 (SELECT DISTINCT idUser
7 FROM gestordefilmes.login
8 where gestordefilmes.login.username=@username
9 and convert(varchar (10), DECRYPTBYPASSPHRASE
10 ('poy5t523dsz2s23zaw4 ',
11 gestordefilmes.login.pass )) = @pass );
12 go
18
14 Interface gr´afica
Nesta sec¸c˜ao iremos apresentar um pouco da interface que o utilizador
poder´a encontrar ao aceder `a nossa aplica¸c˜ao.
Figura 10: Interface para o processo de login do utilizador
Figura 11: Interface para o processo de registo do utilizador
Figura 12: Interface inicial com icons ilustrativos de cada tarefa
19
Figura 13: Interface para o processo de adi¸c˜ao. Nesta caso, adi¸c˜ao de um
filme
Figura 14: Interface para o processo de adi¸c˜ao. Nesta caso, adi¸c˜ao de um
ator
20
Figura 15: Interface para o processo de edi¸c˜ao. Nesta caso, edi¸c˜ao de um
ator
Figura 16: Interface para o processo de edi¸c˜ao. Nesta caso, edi¸c˜ao de um
realizador
21
Figura 17: Interface para o processo de pesquisa. Nesta caso, pesquisa de
um filme
Figura 18: Interface para o processo de pesquisa. Nesta caso, pesquisa de
um ator
14.1 Demo - V´ıdeo
https://www.youtube.com/watch?v=yJHNKVBkXI0
22
15 Reposit´orio
https://github.com/ruipoliveira/gestorfilmesBDIHC
Pastas para o trabalho de Base de Dados:
• GestorDeFilmesWPF
• SQLs
23
16 Conclus˜ao
Chegado ao final deste relat´orio, ´e nossa inten¸c˜ao efetuar uma retrospetiva
da evolu¸c˜ao do mesmo, tendo em conta os problemas com que nos depar´amos,
e principais conclus˜oes retiradas.
A nossa aplica¸c˜ao - ’Gestor de Filmes’ - permitiu-nos aplicar os conheci-
mentos adquiridos ao longo das aulas te´oricas e pr´aticas da unidade curricular
de Base de Dados.
Apesar do projeto referido apresentar todas as funcionalidades indis-
pens´aveis para uma base de dados do tipo, havia mais funcionalidades que
n˜ao foram implementadas por falta de tempo, entre as quais destacamos:
cria¸c˜ao de novos triggers com funcionalidades diferentes das existentes; existˆencias
de novas formas de filtrar a informa¸c˜ao;
Em rela¸c˜ao `a parte de interface faltou-nos a visualiza¸c˜ao das fotos/v´ıdeos
(URL) dos atores, escritores, diretores e trailers/m´usicas.
Concluindo, foi um trabalho bastante ´util para o nosso desenvolvimento
enquanto estudantes da ´area de Engenharia de Computadores e Telem´atica,
pois permitiu a pr´atica dos conceitos adquiridos na disciplina de Base de
Dados.
17 Referˆencias
• http://www.flaticon.com/packs/linear-color-web-interface-elements/
• Slides das aulas te´oricas da disciplina de Base de Dados - edi¸c˜ao 2016
• Gui˜oes pr´aticos da disciplina de Base de Dados - edi¸c˜ao 2016
18 Anexos
Em anexo a este relat´orio anexou-se uma pasta com todos os SQL usados
para este sistema.
24

Mais conteúdo relacionado

Semelhante a Gestor de Filmes - Relatório Prático

Expremendo performance do sql server
Expremendo performance do sql serverExpremendo performance do sql server
Expremendo performance do sql server
Felipe Ferreira
 
UMLIntro.pptx
UMLIntro.pptxUMLIntro.pptx
UMLIntro.pptx
RicardoMarciano5
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
Keuller Magalhães
 
SLIDE-BOX.pptx
SLIDE-BOX.pptxSLIDE-BOX.pptx
SLIDE-BOX.pptx
CamilaNordi
 
Modelo spmp
Modelo spmpModelo spmp
Modelo spmp
Pris Cila
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
Vitor Albuquerque
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
Fábio Nogueira de Lucena
 
Práticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwarePráticas de Desenvolvimento de Software
Práticas de Desenvolvimento de Software
Tiago Barros
 
Estudo de caso_com_modelagem_de_software_halan
Estudo de caso_com_modelagem_de_software_halanEstudo de caso_com_modelagem_de_software_halan
Estudo de caso_com_modelagem_de_software_halan
Halan Ridolphi
 
Html 5
Html 5Html 5
Html 5
Daniel Lima
 
Introdução ao Entity Framework 4
Introdução ao Entity Framework 4Introdução ao Entity Framework 4
Introdução ao Entity Framework 4
Fábio Augusto Pandolfo
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
tdc-globalcode
 
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
Taise Dias da Silva
 
DOM, CSSOM e RenderThree - Introdução ao Browser Render Path
DOM, CSSOM e RenderThree - Introdução ao Browser Render PathDOM, CSSOM e RenderThree - Introdução ao Browser Render Path
DOM, CSSOM e RenderThree - Introdução ao Browser Render Path
Diego Eis
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?
Mozart Diniz
 
SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python
Filipe Fernandes dos Santos Brasil de Matos
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Comunidade NetPonto
 
Projeto CIA
Projeto CIAProjeto CIA
Projeto CIA
Marco Coghi
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
Pablo Dall'Oglio
 
Psd to html
Psd to htmlPsd to html
Psd to html
Abel Ribeiro
 

Semelhante a Gestor de Filmes - Relatório Prático (20)

Expremendo performance do sql server
Expremendo performance do sql serverExpremendo performance do sql server
Expremendo performance do sql server
 
UMLIntro.pptx
UMLIntro.pptxUMLIntro.pptx
UMLIntro.pptx
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
SLIDE-BOX.pptx
SLIDE-BOX.pptxSLIDE-BOX.pptx
SLIDE-BOX.pptx
 
Modelo spmp
Modelo spmpModelo spmp
Modelo spmp
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Práticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwarePráticas de Desenvolvimento de Software
Práticas de Desenvolvimento de Software
 
Estudo de caso_com_modelagem_de_software_halan
Estudo de caso_com_modelagem_de_software_halanEstudo de caso_com_modelagem_de_software_halan
Estudo de caso_com_modelagem_de_software_halan
 
Html 5
Html 5Html 5
Html 5
 
Introdução ao Entity Framework 4
Introdução ao Entity Framework 4Introdução ao Entity Framework 4
Introdução ao Entity Framework 4
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
 
DOM, CSSOM e RenderThree - Introdução ao Browser Render Path
DOM, CSSOM e RenderThree - Introdução ao Browser Render PathDOM, CSSOM e RenderThree - Introdução ao Browser Render Path
DOM, CSSOM e RenderThree - Introdução ao Browser Render Path
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?
 
SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Projeto CIA
Projeto CIAProjeto CIA
Projeto CIA
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Psd to html
Psd to htmlPsd to html
Psd to html
 

Mais de Rui Oliveira

Estatutos - CRM Outeiro Grande, atualizado em 2024
Estatutos - CRM Outeiro Grande, atualizado em 2024Estatutos - CRM Outeiro Grande, atualizado em 2024
Estatutos - CRM Outeiro Grande, atualizado em 2024
Rui Oliveira
 
Regulamento Interno - CRM Outeiro Grande
Regulamento Interno  - CRM Outeiro GrandeRegulamento Interno  - CRM Outeiro Grande
Regulamento Interno - CRM Outeiro Grande
Rui Oliveira
 
Estatutos CRMOG - versão antiga
Estatutos CRMOG - versão antigaEstatutos CRMOG - versão antiga
Estatutos CRMOG - versão antiga
Rui Oliveira
 
Resumo - Visão Por Computador
Resumo - Visão Por Computador Resumo - Visão Por Computador
Resumo - Visão Por Computador
Rui Oliveira
 
Relatório Prático - Sistemas Eletrónicos
Relatório Prático - Sistemas EletrónicosRelatório Prático - Sistemas Eletrónicos
Relatório Prático - Sistemas Eletrónicos
Rui Oliveira
 
Apontamentos Arquitetura de Computadores 2
Apontamentos Arquitetura de Computadores 2 Apontamentos Arquitetura de Computadores 2
Apontamentos Arquitetura de Computadores 2
Rui Oliveira
 
Planeamento de uma prova no concurso - Robô Bombeiro
Planeamento de uma prova no concurso - Robô BombeiroPlaneamento de uma prova no concurso - Robô Bombeiro
Planeamento de uma prova no concurso - Robô Bombeiro
Rui Oliveira
 
Guião Felizmente há Luar!
Guião Felizmente há Luar!Guião Felizmente há Luar!
Guião Felizmente há Luar!
Rui Oliveira
 
Documento CAPITULO SETE - tópicos MEMORIAL DO CONVENTO
Documento CAPITULO SETE - tópicos MEMORIAL DO CONVENTODocumento CAPITULO SETE - tópicos MEMORIAL DO CONVENTO
Documento CAPITULO SETE - tópicos MEMORIAL DO CONVENTO
Rui Oliveira
 
Apresentação CAPITULO SETE - MEMORIAL DO CONVENTO
Apresentação CAPITULO SETE - MEMORIAL DO CONVENTOApresentação CAPITULO SETE - MEMORIAL DO CONVENTO
Apresentação CAPITULO SETE - MEMORIAL DO CONVENTO
Rui Oliveira
 
Teoria da Relatividade de NEWTON
Teoria da Relatividade de NEWTONTeoria da Relatividade de NEWTON
Teoria da Relatividade de NEWTON
Rui Oliveira
 
Sofbol em Portugal e no mundo
Sofbol em Portugal e no mundoSofbol em Portugal e no mundo
Sofbol em Portugal e no mundo
Rui Oliveira
 
A natação em portugal
A natação em portugalA natação em portugal
A natação em portugal
Rui Oliveira
 
1.5.coeficiente de viscosidade de um líquido
1.5.coeficiente de viscosidade de um líquido1.5.coeficiente de viscosidade de um líquido
1.5.coeficiente de viscosidade de um líquido
Rui Oliveira
 
Centenário de Nss. Sª de Lourdes
Centenário de Nss. Sª de Lourdes Centenário de Nss. Sª de Lourdes
Centenário de Nss. Sª de Lourdes Rui Oliveira
 
Corfebol em Portugal e no Mundo
Corfebol em Portugal e no MundoCorfebol em Portugal e no Mundo
Corfebol em Portugal e no Mundo
Rui Oliveira
 
1.2.Atrito cinético e estático
1.2.Atrito cinético e estático1.2.Atrito cinético e estático
1.2.Atrito cinético e estático
Rui Oliveira
 
1.1.Máquina de Atwood
1.1.Máquina de Atwood1.1.Máquina de Atwood
1.1.Máquina de Atwood
Rui Oliveira
 
Movimento circular
Movimento circularMovimento circular
Movimento circular
Rui Oliveira
 
Filarmónica XXI 1ªedição
Filarmónica XXI 1ªediçãoFilarmónica XXI 1ªedição
Filarmónica XXI 1ªedição
Rui Oliveira
 

Mais de Rui Oliveira (20)

Estatutos - CRM Outeiro Grande, atualizado em 2024
Estatutos - CRM Outeiro Grande, atualizado em 2024Estatutos - CRM Outeiro Grande, atualizado em 2024
Estatutos - CRM Outeiro Grande, atualizado em 2024
 
Regulamento Interno - CRM Outeiro Grande
Regulamento Interno  - CRM Outeiro GrandeRegulamento Interno  - CRM Outeiro Grande
Regulamento Interno - CRM Outeiro Grande
 
Estatutos CRMOG - versão antiga
Estatutos CRMOG - versão antigaEstatutos CRMOG - versão antiga
Estatutos CRMOG - versão antiga
 
Resumo - Visão Por Computador
Resumo - Visão Por Computador Resumo - Visão Por Computador
Resumo - Visão Por Computador
 
Relatório Prático - Sistemas Eletrónicos
Relatório Prático - Sistemas EletrónicosRelatório Prático - Sistemas Eletrónicos
Relatório Prático - Sistemas Eletrónicos
 
Apontamentos Arquitetura de Computadores 2
Apontamentos Arquitetura de Computadores 2 Apontamentos Arquitetura de Computadores 2
Apontamentos Arquitetura de Computadores 2
 
Planeamento de uma prova no concurso - Robô Bombeiro
Planeamento de uma prova no concurso - Robô BombeiroPlaneamento de uma prova no concurso - Robô Bombeiro
Planeamento de uma prova no concurso - Robô Bombeiro
 
Guião Felizmente há Luar!
Guião Felizmente há Luar!Guião Felizmente há Luar!
Guião Felizmente há Luar!
 
Documento CAPITULO SETE - tópicos MEMORIAL DO CONVENTO
Documento CAPITULO SETE - tópicos MEMORIAL DO CONVENTODocumento CAPITULO SETE - tópicos MEMORIAL DO CONVENTO
Documento CAPITULO SETE - tópicos MEMORIAL DO CONVENTO
 
Apresentação CAPITULO SETE - MEMORIAL DO CONVENTO
Apresentação CAPITULO SETE - MEMORIAL DO CONVENTOApresentação CAPITULO SETE - MEMORIAL DO CONVENTO
Apresentação CAPITULO SETE - MEMORIAL DO CONVENTO
 
Teoria da Relatividade de NEWTON
Teoria da Relatividade de NEWTONTeoria da Relatividade de NEWTON
Teoria da Relatividade de NEWTON
 
Sofbol em Portugal e no mundo
Sofbol em Portugal e no mundoSofbol em Portugal e no mundo
Sofbol em Portugal e no mundo
 
A natação em portugal
A natação em portugalA natação em portugal
A natação em portugal
 
1.5.coeficiente de viscosidade de um líquido
1.5.coeficiente de viscosidade de um líquido1.5.coeficiente de viscosidade de um líquido
1.5.coeficiente de viscosidade de um líquido
 
Centenário de Nss. Sª de Lourdes
Centenário de Nss. Sª de Lourdes Centenário de Nss. Sª de Lourdes
Centenário de Nss. Sª de Lourdes
 
Corfebol em Portugal e no Mundo
Corfebol em Portugal e no MundoCorfebol em Portugal e no Mundo
Corfebol em Portugal e no Mundo
 
1.2.Atrito cinético e estático
1.2.Atrito cinético e estático1.2.Atrito cinético e estático
1.2.Atrito cinético e estático
 
1.1.Máquina de Atwood
1.1.Máquina de Atwood1.1.Máquina de Atwood
1.1.Máquina de Atwood
 
Movimento circular
Movimento circularMovimento circular
Movimento circular
 
Filarmónica XXI 1ªedição
Filarmónica XXI 1ªediçãoFilarmónica XXI 1ªedição
Filarmónica XXI 1ªedição
 

Gestor de Filmes - Relatório Prático

  • 1. Departamento de Eletr´onica, Telecomunica¸c˜oes e Inform´atica Trabalho Pr´atico Final Gestor de Filmes Curso [8240] MI em Engenharia de Computadores e Telem´atica Disciplina [42532] Base de Dados Ano letivo 2015/2016 Alunos [68779] Rui Oliveira [68287] V´ıtor Barros Pr´atica P1-G10 Docente Professor Joaquim Sousa Pinto Aveiro, 10 de Junho de 2016
  • 2. Conte´udo 1 Introdu¸c˜ao 1 2 An´alise de requisitos 1 3 Diagrama Entidade-Rela¸c˜ao 4 4 Modelo Relacional 5 5 T-SQL DDL 6 5.1 Tabelas SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 6 T-SQL DML 8 7 Normaliza¸c˜ao 9 8 Stored Procedures 11 9 Views 15 10 UDF’s 15 11 ´Indices 16 12 Triggers 17 13 Seguran¸ca 18 14 Interface gr´afica 19 14.1 Demo - V´ıdeo . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 15 Reposit´orio 23 16 Conclus˜ao 24 17 Referˆencias 24 18 Anexos 24
  • 3. 1 Introdu¸c˜ao Este trabalho foi realizado no ˆambito da unidade curricular Base de Da- dos do Mestrado Integrado em Engenharia de Computadores e Telem´atica da Universidade de Aveiro. O objetivo deste trabalho pr´atico consiste no de- senvolvimento de uma aplica¸c˜ao com uma interface gr´afica que permita uma intera¸c˜ao do utilizador com uma base de dados SQL Server para manipula¸c˜ao de dados. O trabalho que propos´emos consistiu numa aplica¸c˜ao que permite gerir filmes. Esta aplica¸c˜ao foi desenvolvida utilizando WPF1 na linguagem C# conjuntamente com uma base de dados SQL Server. Atrav´es desta aplica¸c˜ao, o utilizador poder´a adicionar os filmes pretendidos, associar-lhe os atores intervenientes, o diretor, o realizador, o escritor, a companhia de realiza¸c˜ao, a banda sonora, os trailers, os locais e datas de lan¸camento e os pr´emios que recebeu, caso existam. Para al´em do descrito anteriormente, a nossa aplica¸c˜ao permite apenas que utilizadores registados possam aceder/alterar a informa¸c˜ao disponibilizada. A base de dados existente fornece ferramentas que permitem a cria¸c˜ao, altera¸c˜ao e consulta da base de dados de forma segura, eficiente e robusta. Este relat´orio reflete todos os passos e decis˜oes tomadas na cria¸c˜ao da base de dados que sustenta o projeto bem como uma descri¸c˜ao das capacidades da aplica¸c˜ao desenvolvida para o utilizador. Para a cria¸c˜ao deste projeto foi seguido o processo lecionado nas aulas, sendo estas as seguintes fases do processo: an´alise de requisitos, desenho conceptual, desenho do esquema l´ogico, desenho do esquema f´ısico e admi- nistra¸c˜ao. 2 An´alise de requisitos Dada as especifica¸c˜oes principais descritas na introdu¸c˜ao deste relat´orio, teremos as seguintes entidades: • Filme: um determinado filme ´e caracterizado por uma descri¸c˜ao, uma categoria, uma classifica¸c˜ao, um titulo, uma dura¸c˜ao, uma companhia de produ¸c˜ao, as datas de lan¸camento e o(s) pr´emio(s) ganhos. Possui ainda os atores intervenientes, o diretor, o realizador, o escritor e uma banda sonora associada. • Diretor: ´e caracterizado por um nome, uma foto, e uma data de nascimento. 1 Windows Presentation Foundation 1
  • 4. • Ator: ´e caracterizado por um nome, uma foto e uma data de nasci- mento, para al´em disso inclui uma biografia. • Escritor: ´e caracterizado por um nome, uma foto e uma data de nascimento, para al´em disso inclui uma biografia. • Realizador: ´e caracterizado por um nome, uma foto, e uma data de nascimento. • Companhia: ´e caracterizada por um nome. • M´usica: ´e caracterizada por um titulo, um g´enero, e uma banda/in- terprete. • Trailer: ´e caracterizado por um titulo, uma dura¸c˜ao, uma data de lan¸camento e o idioma. • Lan¸camento: ´e caracterizado por um titulo, uma data e o pa´ıs. • Pr´emio: ´e caracterizado por um tipo, o ano e uma breve descri¸c˜ao. Foram tamb´em registadas algumas especifica¸c˜oes para o desenho concep- tual: • Cada filme ter´a que ter (obrigatoriamente) um ou mais escritores asso- ciados. • Cada filme ter´a que ter (obrigatoriamente) um ou mais atores associa- dos. • Cada filme ter´a que ter um realizador associados (obrigatoriamente). • Cada filme ter´a que ter (obrigatoriamente) um ou mais m´usicas asso- ciadas - constituindo a banda sonora do filme. • Cada filme ter´a que ter um diretor associados (obrigatoriamente). • Cada filme ter´a que ter uma companhia associadas (obrigatoriamente). • Cada filme poder´a ter um ou mais trailers associados. • Cada filme poder´a ter um ou mais pr´emios associados. • Cada filme poder´a ter um ou mais lan¸camentos associados. • Realizadores, escritores, atores e diretores s˜ao todos pessoas! 2
  • 5. Para al´em da possibilidade de adi¸c˜ao, esta aplica¸c˜ao tamb´em disponibi- liza a op¸c˜ao de algumas edi¸c˜oes (atores, escritores, realizadores, m´usicas), pesquisar filmes e tudo o que a eles est´a associado, escolhendo a categoria na qual se pretende pesquisar e preenchendo um dos campos antes de fazer efetivamente a pesquisa. As principais tarefas que o utilizador pode encontrar encontram-se des- critas no seguinte diagrama. Adicionar Filme Adicionar Ator Adiconar Diretor Adiconar Escritor Adicionar Realizador Adicionar Musicas (banda sonora) Adiconar Trailer Adiconar Lançamento (do filme) Adiconar Prémios Pesquisar por Trailer Pesquisar por Prémios Pesquisar por Filme Pesquisar por Diretor Pesquisar por Musica Pesquisar por Lançamento Pesquisar por Escritor Pesquisar por Realizador Pesquisar por Ator Editar Realizador Editar Ator Editar Escritor Editar Musica Editar Diretor Figura 1: Casos de utiliza¸c˜ao do sistema 3
  • 6. 3 Diagrama Entidade-Rela¸c˜ao Depois da an´alise de requisitos desenhou-se o diagrama entidade rela¸c˜ao do nosso sistema. Este desenho foi descrito atrav´es de um diagrama enti- dade rela¸c˜ao. No diagrama, foram definidas entidades, atributos, rela¸c˜oes, cardinalidades e dependˆencias. Os retˆangulos representam as tabelas exis- tentes, as elipses os atributos e por fim os losangos representam as rela¸c˜oes existentes. Pessoa Companhia Escritor Realizador Ator ID Foto Data Nascimento Nome Diretor Biografia Biografia Tipo Ano Descrição ID Data País Titulo Nome ID Titulo ID Duração URL Data Idioma Titulo ID Género Interprete / Banda URL Titulo Descrição Classificação Duração ID Prémio ganhou Lançamento tem Trailer tem Músicas escrito por produzido contém dirigido represe ntado criado N 1 1 N N 1 M N N N N M 1 M N N 1 1 Filme Categoria Figura 2: Diagrama ER 4
  • 7. 4 Modelo Relacional Ap´os a constru¸c˜ao do nosso desenho conceptual procedeu-se `a elabora¸c˜ao do modelo relacional. Este modelo foi constru´ıdo tendo por base o diagrama entidade rela¸c˜ao e as regras para a realiza¸c˜ao desta tarefa. Cada entidade e cada rela¸c˜ao ir´a gerar uma ´unica tabela e ap´os realizados os passos para convers˜ao do desenho conceptual no modelo relacional foi criado o modelo relacional. ID Título Descrição ClassificaçãoFilme Músicas Companhia Escritor Diretor Ator Realizador Prémio Lançamento Trailer Músicas do Filme Representado por Escrito por Duração ID Companhia ID Título Género Intérprete/Banda URL ID Nome Ano Tipo Descrição ID Filme ID Título Data País ID Filme ID Título Duração Data URL Idioma ID Filme ID Filme ID Música ID Filme ID Ator Biografia ID Nome Foto Data de Nascimento ID Nome Foto Data de Nascimento BiografiaID Nome Foto Data de Nascimento ID Nome Foto Data de Nascimento ID Diretor ID Realizador ID Filme ID Filme ID Escritor Categoria Figura 3: Modelo Relacional Para al´em das tabelas acima, foi criada um tabela simples - apenas com id, username e password - que permite o utilizador registar-se e autenticar-se na aplica¸c˜ao. O campo password ´e do tipo varbinary(128). 5
  • 8. 5 T-SQL DDL Ap´os a elabora¸c˜ao do modelo relacional procedemos `a cria¸c˜ao dos coman- dos SQL que permitem a cria¸c˜ao das respetivas tabelas. Usou-se a linguagem T-SQL DDL2 onde ´e poss´ıvel especificar todos os atributos, chaves prim´arias e estrangeiras. O exemplo seguinte ilustra a cria¸c˜ao da tabela filmes, ator e rela¸c˜ao entre ator e filmes. Exemplo c´odigo 1 1 -- TABELA FILME 2 create table gestordefilmes.filme( 3 id int NOT NULL Identity , 4 titulo varchar (100) , 5 descricao varchar (8000) , 6 categoria varchar (100) , 7 classificacao int , 8 duracao int , 9 idcompanhia int , 10 iddiretor int , 11 idrealizador int , 12 constraint PKFID primary key (id), 13 constraint FKCID foreign key (idcompanhia) 14 references gestordefilmes.companhia(id), 15 constraint FKDID foreign key (iddiretor) 16 references gestordefilmes.diretor(id), 17 constraint FKRID foreign key (idrealizador) 18 references gestordefilmes.realizador(id)); 19 -- TABELA ATOR 20 create table gestordefilmes.ator( 21 id int not null Identity , 22 nome varchar (50), 23 urlfoto varchar (500) , 24 datanascimento date , 25 biografia varchar (1000) , 26 constraint PKAID primary key (id)); 27 -- TABELA REPRESENTADO POR 28 create table gestordefilmes.representadopor( 29 idfilme int not null , 30 idator int not null , 2 Data Definition Language 6
  • 9. 31 constraint PKRPFIDMID primary key (idfilme , idator), 32 constraint FKRPFID foreign key (idfilme) 33 references gestordefilmes.filme(id), 34 constraint FKAID foreign key (idator) 35 references gestordefilmes.ator(id)); 5.1 Tabelas SQL Ap´os da inser¸c˜ao de todas as tabelas na base de dados (SQL server) obtivemos o seguinte diagrama de rela¸c˜oes. Figura 4: Diagrama relacional de tabelas 7
  • 10. A tabela que permite a autentica¸c˜ao ´e a seguinte: Figura 5: Tabela para autentica¸c˜ao dos utilizadores Todos os identificadores de cada tabela (id’s) s˜ao auto-incrementados. 6 T-SQL DML Outra linguagem associada ao SQL que utiliz´amos foi o T-SQL-DML3 . No caso particular do nosso trabalho, us´amos explicitamente esta lingua- gem na inser¸c˜ao de um pr´emio a um filme, o mesmo pode ser visto no exemplo de c´odigo c# seguinte. Exemplo c´odigo 2 1 string queryInsertSQLDML = INSERT INTO gestordefilmes.premio 2 (idfilme , ano , tipo , descricao) 3 VALUES(@idfilme , @ano , @tipo , @descricao ); 4 5 SqlCommand insertQuery = new SqlCommand(queryInsertSQLDML , cnn); 6 insertQuery.Parameters.AddWithValue(@idfilme , p.filme_id ); 7 insertQuery.Parameters.AddWithValue(@ano , p.ano); 8 insertQuery.Parameters.AddWithValue(@tipo , p.tipo ); 9 insertQuery.Parameters.AddWithValue(@descricao , p.descricao ); Implicitamente o T-SQL DML ´e usado em Stored Procedures e User De- fined Functions como se vai ver mais a frente. 3 Data Manipulation Language 8
  • 11. 7 Normaliza¸c˜ao Ap´os alguns estudos, conclu´ımos que as rela¸c˜oes da nossa base de dados se encontram na forma BCNF, logo tamb´em podemos afirmar que satisfaz as condi¸c˜oes das 1º, 2ª e 3ª formas. Nas seguintes figuras s˜ao apresentadas as normaliza¸c˜oes das rela¸c˜oes da nossa base de dados. Figura 6: Normaliza¸c˜ao de Filme, M´usica, Companhia e Escritor Figura 7: Normaliza¸c˜ao de Diretor, Ator e Realizador 9
  • 12. Figura 8: Normaliza¸c˜ao de Pr´emio, Lan¸camento, Trailer e M´usicas Do Filme Figura 9: Normaliza¸c˜ao de Representado por, Escrito por e Login 10
  • 13. 8 Stored Procedures Dicidiu-se usar stored procedures para criar uma camada de abstra¸c˜ao en- tre o modelo de dados, a sua manipula¸c˜ao e a camada aplicacional. A adop¸c˜ao desta abordagem permite-nos criar de forma segura, com boa performance e que garante a integridade dos dados, m´etodos para criar, modificar e apagar modelo de dados do nosso sistema de base de dados. Outro dos motivos foi garantir um contrato de utiliza¸c˜ao entre o ”de- veloper”da aplica¸c˜ao e a utiliza¸c˜ao do nosso modelo de dados, permitindo assim especificar que parˆametros s˜ao necess´arios para realizar cada opera¸c˜ao e garantindo tamb´em um bom controlo de erro avisando-o com T-SQL Raise Error quando este n˜ao estiver a cumprir o contrato. As stored procedures ao contr´ario de um uso do nosso modelo de dados em DML permite que o conjunto de instru¸c˜oes compiladas na Stored Procedure n˜ao tenham de ser recompiladas cada vez que o procedimento ´e invocado, sendo estas, apenas compiladas na primeira vez que s˜ao executadas e depois disso s˜ao guardadas em cache, sendo que isto permite maior rapidez no acesso ao modelo de dados. Sendo assim, o principal foco em todas as stored procedures que se de- senvolveu foi procurar garantir um bom controlo de erro para a camada aplicacional e que a cria¸c˜ao, altera¸c˜ao ou remo¸c˜ao de dados do nosso modelo de dados fosse realizada de forma consistente. O c´odigo seguinte ´e um bom exemplo da abstra¸c˜ao dada ao utilizador. Exemplo c´odigo 3 1 GO 2 CREATE PROCEDURE gestordefilmes.sp_AddFilme ( 3 @id INT = NULL OUTPUT , 4 @titulo varchar (100) , 5 @descricao varchar (8000) , 6 @categoria varchar (100) , 7 @classificacao int , 8 @duracao int , 9 @idcompanhia int , 10 @iddiretor int , 11 @idrealizador int , 12 @Escritor AS gestordefilmes.listaEscritor READONLY , 13 @Elenco AS gestordefilmes.listaElenco READONLY , 14 @Banda AS gestordefilmes.listaBanda READONLY 15 ) 11
  • 14. 16 AS 17 WITH ENCRYPTION 18 BEGIN 19 INSERT into gestordefilmes.filme VALUES (@titulo , 20 @descricao , @categoria , @classificacao , @duracao , 21 @idcompanhia , @iddiretor , @idrealizador ); 22 23 SET @id = SCOPE_IDENTITY (); 24 insert into gestordefilmes.escritopor select @id , 25 id from @Escritor; 26 insert into gestordefilmes.representadopor select 27 @id , id from @Elenco; 28 insert into gestordefilmes.musicasdofilme select 29 @id , id from @Banda; 30 END 31 GO Qualquer utilizador desta base de dados, sabe que para inserir um filme tem de chamar o Stored Procedure ”gestordefilmes.sp AddFilme”com os parˆametros definidos, para o filme ser inserido. Assim sendo, ´e completamente transpa- rente para o utilizador que, na realidade, a informa¸c˜ao que ele introduziu est´a guardada em 3 tabelas diferentes. Essa transparˆencia e simplicidade do lado do utilizador era um objetivo a alcan¸car na cria¸c˜ao do nosso projeto. O c´odigo seguinte ´e um exemplo da implementa¸c˜ao de um Stored proce- dures que permite editar os dados na base de dados. Exemplo c´odigo 4 1 go 2 create procedure gestordefilmes.sp_EditEscritor( 3 @escritor_id int , 4 @nome varchar (50), 5 @data date , 6 @url varchar (500) , 7 @bio varchar (1000) 8 ) 9 as 10 WITH ENCRYPTION 11 begin 12 update gestordefilmes.escritor 13 set nome = @nome , 14 datanascimento = @data , 12
  • 15. 15 urlfoto = @url , 16 biografia = @bio 17 where gestordefilmes.escritor.id = @escritor_id 18 end 19 go Os Stored procedures foram tamb´em utilizados para podermos efetuar pesquisas sobre as tabelas pretendidas pelo utilizador. Para esta situa¸c˜ao, pretendia-se tornar a abstra¸c˜ao para o utilizador ainda maior, de modo a que este pudesse pesquisar por m´ultiplos atributos sem que nenhum seja obrigat´orio. Por esta l´ogica, a combina¸c˜ao de atributos na pesquisa ´e sempre um “and”. Um exemplo de uma pesquisa implementada recorrendo a um Stored pro- cedures pode ser visto no c´odigo seguinte. Exemplo c´odigo 5 1 go 2 CREATE procedure gestordefilmes.sp_pesquisarPremio ( 3 @IDFilme int = null , 4 @Ano int = null 5 ) 6 AS 7 WITH ENCRYPTION 8 BEGIN 9 declare @tmp table(id int , idfilme int , ano int , 10 tipo varchar (20), descricao varchar (200)); 11 declare @out table(id int , idfilme int , ano int , 12 tipo varchar (20), descricao varchar (200)); 13 14 insert into @out select * from 15 gestordefilmes.udf_GetPremios (); 16 17 if not @IDFilme is null 18 insert into @tmp select * from @out 19 where idfilme=@IDFilme; 20 else 21 insert into @tmp select * from @out; 22 delete from @out 23 24 if not @Ano is null 25 insert into @out select * from @tmp 13
  • 16. 26 where ano=@Ano; 27 else 28 insert into @out select * from @tmp; 29 30 delete from @tmp; 31 select idfilme ,ano ,tipo ,descricao from @out; 32 END 33 go 14
  • 17. 9 Views Opt´amos por n˜ao utilizar views uma vez que n˜ao s˜ao compiladas, op- timizadas e n˜ao suportam uma l´ogica mais complexa para uma consulta. Consequentemente decidimos utilizar somente User Defined Funtions. 10 UDF’s User Defined Funtions (UDF) constituem outra ferramenta utilizada para a cria¸c˜ao da camada de abstra¸c˜ao, proporcionando ao utilizador os dados que ele pede, independentemente da sua localiza¸c˜ao nas tabelas da base de dados. Existe uma grande semelhan¸ca entre views e UDF’s, mas estas ´ultimas tˆem a vantagem de poderem ser parametriz´aveis. Mais uma vez, temos UDFs que apenas tem um ”select * from table”mas por raz˜oes de escalabilidade e consistˆencia, foram utilizadas para todas as tabelas. Exemplo c´odigo 6 1 go 2 CREATE FUNCTION gestordefilmes.udf_GetFilme () RETURNS table 3 AS 4 RETURN 5 ( 6 SELECT titulo , categoria , classificacao , 7 duracao , descricao , idcompanhia , idrealizador 8 FROM gestordefilmes.filme 9 ); 10 go Exemplo c´odigo 7 1 go 2 CREATE FUNCTION gestordefilmes.udf_GetLancamento () RETURNS table 3 AS 4 RETURN 5 ( 6 SELECT pais , data , titulo 7 FROM gestordefilmes.lancamento 8 ); 9 go 15
  • 18. 11 ´Indices Com o aumento do volume de dados, os pedidos de consulta come¸cam a ter tempos de resposta maiores, pois os dados que existem nas tabelas encontram-se desorganizados. Para contrariar este aumento dos tempos de resposta devemos manter as tabelas organizadas de forma a que as consultas sejam efetuadas mais rapidamente. A utiliza¸c˜ao de ´ındices nos campos que mais frequentemente ser˜ao utilizados ´e a maneira indicada, onde um ponteiro ´e criado para a posi¸c˜ao real de cada registo. Exemplo c´odigo 8 1 -- index da tabela filmes , colunas: titulo , categoria , 2 -- classificacao , companhia , diretor , realizador; 3 CREATE INDEX filmeTitulo ON gestordefilmes.filme (titulo ); 4 CREATE INDEX filmeCategoria ON gestordefilmes.filme (categoria ); 5 CREATE INDEX filmeClassificacao ON gestordefilmes.filme 6 ( classificacao ); 7 CREATE INDEX filmeCompanhia ON gestordefilmes.filme 8 ( idcompanhia ); 9 CREATE INDEX filmeDiretor ON gestordefilmes.filme (iddiretor ); 10 CREATE INDEX filmeRealizador ON gestordefilmes.filme 11 (idrealizador ); Exemplo c´odigo 9 1 -- index da tabela realizador , colunas: nome; 2 CREATE INDEX realizadorNome ON gestordefilmes.realizador (nome ); 3 4 -- index da tabela premio , colunas: filme , ano , tipo; 5 CREATE INDEX premioFilme ON gestordefilmes.premio (idfilme ); 6 CREATE INDEX premioAno ON gestordefilmes.premio (ano); 7 CREATE INDEX premioTipo ON gestordefilmes.premio (tipo ); 16
  • 19. 12 Triggers Os triggers, tanto nesta base de dados para gest˜ao e organiza¸c˜ao de filmes como em qualquer outra, s˜ao utilizados para restringir ou impedir o acesso a tabelas por users sem acesso para tal. Eles impedem que, por exemplo, aplica¸c˜oes que s´o possuem permiss˜oes de leitura possam inserir ou apagar dados e inserir tabelas inteiras, por exemplo. Atualmente a nossa base de dados contem triggers a impedir o delete de todas as tabelas. Idealmente, haveria mudan¸cas a implementar nos triggers, como impedir a inser¸c˜ao ou update em qualquer tabela e/ou nos Stored Procedures, que executam essas fun¸c˜oes de desativ´a-los no in´ıcio e ativ´a-los de volta no final. Desta forma todo o acesso `a base de dados seria controlado atrav´es dos Stored Procedures, aumentando assim a seguran¸ca e impedindo poss´ıveis inconsistˆencias provocadas por utilizadores. Os exemplos seguintes ilustram a nossa implementa¸c˜ao de triggers. Exemplo c´odigo 10 1 2 -- trigger delete ator 3 GO 4 CREATE TRIGGER gestordefilmes.t_removerAtor ON 5 gestordefilmes.ator 6 INSTEAD OF DELETE 7 AS 8 PRINT Operacao para eliminar ator nao e permitida !; 9 GO Exemplo c´odigo 11 1 2 3 -- trigger delete filme 4 GO 5 CREATE TRIGGER gestordefilmes.t_removerFilme ON 6 gestordefilmes.filme 7 INSTEAD OF DELETE 8 AS 9 PRINT Operacao para eliminar Filme nao e permitida !; 10 GO 17
  • 20. 13 Seguran¸ca De modo a que fosse poss´ıvel implementar um m´odulo de seguran¸ca, decidimos que este podia ser aplicado num sistema de login. Para tal, e como referido anteriormente, cri´amos uma tabela onde fosse possivel guardar o username e a password. Tal como pode ser visto no exemplo seguinte, foi criado um stored pro- cedure que permite efetuar o registo de um novo utilizador, deste modo per- mitindo um refor¸co da seguran¸ca. Exemplo c´odigo 12 1 -- ADICIONAR NOVO UTILIZADOR 2 go 3 create procedure gestordefilmes.sp_AddNewUser ( 4 @username varchar (50), 5 @pass varchar (128) 6 ) 7 as 8 begin 9 insert into gestordefilmes.login values (@username , 10 EncryptByPassPhrase('poy5t523dsz2s23zaw4 ', @pass )) 11 end 12 go O c´odigo seguinte permite fazer a valida¸c˜ao das credencias inseridas. Exemplo c´odigo 13 1 -- VERIFICAR LOGIN 2 go 3 CREATE FUNCTION gestordefilmes.udf_VerifyLogin (@username varchar (20), @pass varchar (200)) RETURNS table 4 AS 5 RETURN 6 (SELECT DISTINCT idUser 7 FROM gestordefilmes.login 8 where gestordefilmes.login.username=@username 9 and convert(varchar (10), DECRYPTBYPASSPHRASE 10 ('poy5t523dsz2s23zaw4 ', 11 gestordefilmes.login.pass )) = @pass ); 12 go 18
  • 21. 14 Interface gr´afica Nesta sec¸c˜ao iremos apresentar um pouco da interface que o utilizador poder´a encontrar ao aceder `a nossa aplica¸c˜ao. Figura 10: Interface para o processo de login do utilizador Figura 11: Interface para o processo de registo do utilizador Figura 12: Interface inicial com icons ilustrativos de cada tarefa 19
  • 22. Figura 13: Interface para o processo de adi¸c˜ao. Nesta caso, adi¸c˜ao de um filme Figura 14: Interface para o processo de adi¸c˜ao. Nesta caso, adi¸c˜ao de um ator 20
  • 23. Figura 15: Interface para o processo de edi¸c˜ao. Nesta caso, edi¸c˜ao de um ator Figura 16: Interface para o processo de edi¸c˜ao. Nesta caso, edi¸c˜ao de um realizador 21
  • 24. Figura 17: Interface para o processo de pesquisa. Nesta caso, pesquisa de um filme Figura 18: Interface para o processo de pesquisa. Nesta caso, pesquisa de um ator 14.1 Demo - V´ıdeo https://www.youtube.com/watch?v=yJHNKVBkXI0 22
  • 25. 15 Reposit´orio https://github.com/ruipoliveira/gestorfilmesBDIHC Pastas para o trabalho de Base de Dados: • GestorDeFilmesWPF • SQLs 23
  • 26. 16 Conclus˜ao Chegado ao final deste relat´orio, ´e nossa inten¸c˜ao efetuar uma retrospetiva da evolu¸c˜ao do mesmo, tendo em conta os problemas com que nos depar´amos, e principais conclus˜oes retiradas. A nossa aplica¸c˜ao - ’Gestor de Filmes’ - permitiu-nos aplicar os conheci- mentos adquiridos ao longo das aulas te´oricas e pr´aticas da unidade curricular de Base de Dados. Apesar do projeto referido apresentar todas as funcionalidades indis- pens´aveis para uma base de dados do tipo, havia mais funcionalidades que n˜ao foram implementadas por falta de tempo, entre as quais destacamos: cria¸c˜ao de novos triggers com funcionalidades diferentes das existentes; existˆencias de novas formas de filtrar a informa¸c˜ao; Em rela¸c˜ao `a parte de interface faltou-nos a visualiza¸c˜ao das fotos/v´ıdeos (URL) dos atores, escritores, diretores e trailers/m´usicas. Concluindo, foi um trabalho bastante ´util para o nosso desenvolvimento enquanto estudantes da ´area de Engenharia de Computadores e Telem´atica, pois permitiu a pr´atica dos conceitos adquiridos na disciplina de Base de Dados. 17 Referˆencias • http://www.flaticon.com/packs/linear-color-web-interface-elements/ • Slides das aulas te´oricas da disciplina de Base de Dados - edi¸c˜ao 2016 • Gui˜oes pr´aticos da disciplina de Base de Dados - edi¸c˜ao 2016 18 Anexos Em anexo a este relat´orio anexou-se uma pasta com todos os SQL usados para este sistema. 24