Bases de Dados

Propaganda
Marta Torneiro (ci08021)
Mónica Silva (ci08050)
Patrícia Latourrette(ci05031)
Bases de Dados
Relatório do Trabalho Prático
Docente: Professor Gabriel de Sousa Torcato David
Licenciatura em Ciência da Informação
Maio 2011
1 Sumário Sumário ......................................................................................................................................... 2 Introdução .................................................................................................................................... 3 Descrição do problema ................................................................................................................. 4 Modelo de Classes ........................................................................................................................ 5 Esquema Relacional ...................................................................................................................... 7 Instância Exemplo e Perguntas à Base de Dados .......................................................................... 8 Apresentação de tabelas e formulários exemplificativos da Base de Dados .............................. 21 Conclusão .................................................................................................................................... 26 2 Introdução O presente relatório foi elaborado no âmbito do trabalho prático da
disciplina de Bases de Dados, leccionada no 2º semestre do 3º ano da
Licenciatura em Ciência da Informação.
Este trabalho tem como objectivo constituir uma oportunidade de
experimentação das matérias expostas nas aulas da disciplina, mais
concretamente o modelo relacional, a linguagem SQL e as técnicas de
apresentação de dados.
Neste relatório, são explicitadas todas as fases de desenvolvimento do
trabalho prático: a descrição sucinta do problema e o tema escolhido; o modelo
de classes, com indicação das classes, atributos e domínios, assim como as
suas associações; o esquema relacional; a invenção de uma instância exemplo
e a sua implementação numa base de dados relacional; a elaboração de um
mínimo de 5 perguntas à base de dados em álgebra relacional e em SQL e
respectivos resultados.
Por fim, preparou-se a interface propriamente dita, de forma a ser
perceptível a construção e utilização da mesma.
3 Descrição do problema O trabalho por nós apresentado consiste na construção de uma possível
base de dados para um Salão de Beleza, tendo em conta os clientes, cuja ficha
já existe na nossa Base de Dados, os funcionários, a agenda e as marcações.
O Salão de Beleza por nós criado encontra-se aberto das 9h da manhã
até às 20h da noite, encerrando aos Domingos e cuja organização está
dependente de uma Agenda, onde são registadas todas as Marcações. As
marcações dependem directamente da disponibilidade dos funcionários
(disponibilidade esta apresentada na Agenda do Salão), em termos de hora e
dia e, consequentemente, dos serviços disponíveis no espaço.
Os serviços disponíveis no Salão de Beleza enquadram-se nas funções
dos Funcionários do presente Salão. Assim sendo, os serviços que podem ser
requisitados pelos nossos clientes, fazem parte das funções, pelos nossos
funcionários desempenhadas, e incluem: Cabeleireiro, Massagem, Estética e
Tatuagem.
4 Modelo de Classes O modelo de classes pelo nosso grupo elaborado, teve por base uma
discussão acerca de todos os requisitos e intervenientes essenciais para o
funcionamento do Salão de Beleza.
Assim sendo, optamos por construir 4 tabelas, que passamos a
apresentar em seguida:
•
AGENDA
o Nagenda
o Dia
o Hora_inicio
o No_clientes
o Codf
•
MARCAÇÃO
o Nagenda
o Codc
o Servico
o Hora
•
FUNCIONÁRIO
o Codf
o Nome
o NIF
o Morada
o Cod_postal
o Contacto
o E-mail
o Data_nasce
o Funcao
o Sexo
5 •
CLIENTE
o Codc
o Nome
o Contacto
o Morada
o Email
o Data_nasce
o Cod_postal
o Profissao
o NIF
o Sexo
Apresentamos, seguidamente, o esquema do Modelo de Classes com as
respectivas Chaves assinaladas e Relações estabelecidas:
6 Esquema Relacional Neste ponto, apresentamos o esquema relacional do trabalho
por nós desenvolvido, tendo por base o Modelo de Classes
previamente apresentado.
Assim sendo, o Esquema relacional obtido foi o seguinte:
Funcionário (codf, nome, NIF, morada, cod_postal, contacto, data_nasce,
funcao, sexo)
Cliente(codc, nome, NIF, morada, cod_postal, contacto, data_nasce, profissao,
sexo)
Agenda(nagenda, dia, hora_inicio, no_clientes, codf → Funcionario)
Marcacao(nagenda → Agenda, hora, preco_base, servico, codc → Cliente)
7 Instância Exemplo e Perguntas à Base de Dados Na elaboração do nosso trabalho, tivemos por base o programa
Microsoft Access 2007, com o objectivo de criar uma base de dados bem
estruturada.
Na base de dados do nosso Salão de Beleza, são visualizadas 4
tabelas e as respectivas relações, as questões à Base de Dados por nós
criadas quer em linguagem SQL, quer em Álgebra Relacional.
Assim, serão devidamente apresentados os resultados obtidos, bem
como os formulários respectivos a cada uma das questões, previamente
seleccionadas.
8 1.
Qual o número de marcações e dinheiro total gasto, por cada
cliente do Salão de Beleza? (ordenados de forma ascendente pelo número de
marcações)
Linguagem SQL:
SELECT cliente.codc, nome, COUNT(marcacao.codc) AS nummarcacoes, SUM(marcacao.preco_base) AS total FROM cliente LEFT JOIN marcacao ON marcacao.codc=cliente.codc GROUP BY cliente.codc, nome ORDER BY 3; Álgebra Relacional:
τ 3 (πcodc, nome, nummarcacoes=CNT(*), total=SUM(preco_base) (C ⋈ M)) Resultado obtido, esquematicamente:
Formulário obtido:
9 2. Quais os dados de todos os clientes do sexo Feminino?
Linguagem SQL:
SELECT * FROM cliente WHERE sexo='F'; Álgebra Relacional:
σ Sexo = ‘F’ (C) Resultado obtido, esquematicamente:
Formulário obtido:
10 3. Quais os dados de todos os clientes do sexo Masculino?
Linguagem SQL:
SELECT * FROM cliente WHERE sexo='M'; Álgebra Relacional:
σ Sexo = ‘M’ (C) Resultado obtido, esquematicamente:
Formulário obtido:
11 4. Indicar o dia, a hora, o código do Funcionário e o serviço em que a hora
da marcação coincide com o início do período de marcações da agenda.
Linguagem SQL:
SELECT Agenda.dia, Marcacao.hora, Agenda.codf, Marcacao.servico FROM Marcacao, Agenda WHERE Marcacao.nagenda=Agenda.nagenda AND Marcacao.hora=Agenda.hora_inicio; Álgebra Relacional:
πdia, hora, codf, servico(M ⋈ M.nagenda=A.nagenda ⋀ M.hora=A.hora_inicio A) Resultado obtido, esquematicamente:
Formulário obtido:
12 5. Quais as moradas (rua e código-postal) existentes na Base de Dados?
Linguagem SQL:
SELECT morada, cod_postal FROM Cliente UNION SELECT morada, cod_postal FROM Funcionario; Álgebra Relacional:
πmorada, cod_postal (C) ⋈ πmorada, cod_postal (F) Resultado obtido, esquematicamente:
Formulário obtido:
13 6. Quais os nomes e respectivas funções de todos os funcionários do
Salão de Beleza? (Ordenados Alfabeticamente por nome)
Linguagem SQL:
SELECT nome, funcao FROM Funcionario ORDER BY nome; Álgebra Relacional:
τ nome (π nome, funcao (F))
Resultado obtido, esquematicamente:
Formulário obtido:
14 7. Quais os nomes dos Funcionários do Salão de Beleza, cujos nomes se
encontram entre “David Guetta” e “Katy Perry”? (Ordenados
alfabeticamente por nome)
Linguagem SQL:
SELECT * FROM funcionario WHERE nome Between 'David Guetta' And 'Katy Perry'; Álgebra Relacional:
σ ‘David Guetta’ < nome > ‘Katy Perry’ Resultado obtido, esquematicamente:
Formulário obtido:
15 8. Qual o número de marcações para cada Funcionário e o total de
dinheiro recebido? (Ordenado de forma descendente por número de
marcações)
Linguagem SQL:
SELECT Funcionario.codf, nome, COUNT(Marcacao.codc) AS nummarcacoes, SUM(Marcacao.preco_base) AS total FROM (Funcionario INNER JOIN Agenda ON Agenda.codf=Funcionario.codf) INNER JOIN Marcacao ON Marcacao.nagenda=Agenda.nagenda GROUP BY Funcionario.codf, nome UNION SELECT Funcionario.codf, nome, 0 AS nummarcacoes, 0 AS total FROM Funcionario WHERE Funcionario.codf NOT IN ( SELECT Agenda.codf FROM Agenda ) ORDER BY nummarcacoes DESC; Álgebra Relacional:
τ nummarcacoes desc (π codf, nome, nummarcacoes=CNT(*), total=SUM(preco_base) (F ⋈ A ⋈ M)) Resultado obtido, esquematicamente:
16 Formulário obtido:
17 9. Quais os serviços e preços correspondentes prestados pelos
funcionários do Salão de Beleza? (Ordenados de forma ascendente)
Linguagem SQL:
SELECT DISTINCT servico, preco_base AS preco FROM funcionario, agenda, marcacao WHERE funcionario.codf=agenda.codf AND agenda.nagenda=marcacao.nagenda ORDER BY preco_base; Álgebra Relacional:
δ (π servico, preco (F F.codf=A.codf ⋀ A.nagenda=M.nagenda ⋈A ⋈ M)) Resultado obtido, esquematicamente:
Formulário obtido:
18 10. Qual o serviço mais caro e o preço respectivo?
Linguagem SQL:
SELECT servico, AVG(preco_base) AS preco FROM funcionario, agenda, marcacao WHERE funcionario.codf=agenda.codf AND agenda.nagenda=marcacao.nagenda GROUP BY servico HAVING AVG(preco_base)=(SELECT MAX(preco) FROM Preços_ordem_ascendente); Álgebra Relacional:
P = π servico, preco=AVG(preco_base) (F ⋈ A ⋈ M) PMAX = π max_preco=MAX(preco)(P) π servico, max_preco (P ⋈ preco=max_preco PMAX) Resultado obtido, esquematicamente:
Formulário obtido:
19 11. Quais os nomes e contactos existentes na Base de Dados? (Ordenados
alfabeticamente por nome)
Linguagem SQL:
SELECT nome, contacto FROM cliente UNION SELECT nome, contacto FROM funcionario ORDER BY nome; Álgebra Relacional:
τ nome (π nome, contacto (C)) U (π nome, contacto (F)) Resultado obtido, esquematicamente:
Formulário obtido:
20 Apresentação de tabelas e formulários exemplificativos da Base de Dados Neste ponto, temos o intuito de apresentar as 4 tabelas, bem como exemplos de formulários relativos a cada componente da Base de Dados do nosso Salão de Beleza. •
Tabela “Agenda” •
Tabela “Marcação” 21 •
Tabela “Funcionários” •
Tabela “Clientes” 22 •
Exemplo de Formulário “Agenda” •
Exemplo de Formulário “Marcação” 23 •
Exemplo de Formulário “Clientes” •
Exemplo e Formulário “Funcionários” 24 •
Exemplo de Formulário “Menú” •
Exemplo de Formulário “Queries” 25 Conclusão Após a realização deste trabalho pudemos aprofundar os
componentes teóricos e práticos da unidade curricular de Base de Dados. As
principais dificuldades centraram-se na elaboração das queries.
No que diz respeito à componente visual (aspecto) da Base de Dados,
tentamos desenvolver algo simples e com um ar “fresco” e, principalmente,
funcional, sem descuidar o fim para o qual esta se destina.
Desenvolvemos alguns botões dinâmicos, simples e que permitem um
fácil acesso, aquando da navegação na nossa Base de Dados.
Assim sendo ficamos mais familiarizados com o uso de SGBD
comerciais, mais concretamente o MS Access e aplicamos os nossos
conhecimentos no que refere à linguagem SQL e Álgebra Relacional.
26 
Download