Gabarito da Prova 1 - 17/04/2006
Pedro Losco Takecian Monitor
Jo˜ ao Eduardo Ferreira Professor 24 de abril de 2006
Quest˜ ao 1: Ver notas de aula Quest˜ ao 2a:
m n
rel_usu_perf
1
1
1 Usuário
endereço
instituição cpf nome
data_nascimento
login
senha
área_pesquisa
Perfil
descrição cod_perfil
Serviço
descrição
tipo cod_serviço
m n
rel_perf_serv
1 n
Figura 1: Projeto conceitual
Obs: O auto-relacionamento entre Usu´ arios (tutor e tutelado) poderia ser substitu´ıdo por uma especializa¸c˜ ao, na qual a entidade “Usu´ ario”teria duas entidades filhas: “Tutor”e “Tutelado”.
Quest˜ ao 2b:
USU ´ARIOS
nome cpf endere¸co institui¸c˜ao data nascimento login senha
AREAS DE PESQUISA´
cpf ´area pesquisa
PERFIS
cod perfil descri¸c˜ao
SERVIC¸ OS
cod servi¸co descri¸c˜ao tipo
1
REL USU ´ARIO PERFIL
cpf tutor cod perfil
REL PERFIL SERVIC¸ O
cod perfil cod servi¸co
REL TUTOR TUTELADO PERFIL SERVIC¸ OS
cpf tutor cpf tutelado cod perfil cod servi¸co
Quest˜ ao 2c: Ver notas de aula Quest˜ ao 3a:
CONS ESPEC←ESPECIALIDADE∗CONSULTA
CONS ORTO ENDO←σESPECIALIDADE=‘ORTODONTIA’ OR ESPECIALIDADE = ‘ENDODONTIA’(CONS SPEC) RESULT←ΠID PACIENTE(CONS ORTO ENDO)
{c.id paciente|consulta(c) AND (∃e) (especialidade(e) AND c.id dentista = e.id dentista AND (especialidade = ‘ortodontia’ OR especialidade = ‘endodontia’))}
{q|(∃i) (∃r) (∃h) (consulta(qrst) AND especialidade(hi) AND r = h AND (i = ‘ortodontia’ OR i = ‘endodontia’)}
SELECT DISTINCT id_paciente FROM consulta c, especialidade e
WHERE c.id_dentista = e.id_dentista AND (especialidade = ‘ortodontia’ OR
especialidade = ‘endodontia’)
Obs: Note que, se no enunciado da quest˜ ao, entre as especialidades fosse E no lugar de OU (caso da quest˜ ao 3b), a solu¸c˜ ao correta n˜ ao seria simplesmente trocar o OR por AND na quest˜ ao acima. Observe a solu¸c˜ ao correta abaixo.
Quest˜ ao 3b:
DENTISTA ORTO←ΠID DENTISTA(σESPECIALIDADE=‘ORTODONTIA’(ESPECIALIDADE)) DENTISTA ENDO←ΠID DENTISTA(σESPECIALIDADE=‘ENDODONTIA’(ESPECIALIDADE)) DENTISTA ORTO ENDO←DENTISTA ORTO∩DENTISTA ENDO
RESULT←ΠID PACIENTE(CONSULTA∗DENTISTA ORTO ENDO)
{c.id paciente|consulta(c) AND (∃e) (especialidade(e) AND e.id dentista = c.id dentista AND e.especialidade = ‘ortodontia’) AND (∃s) (especialidade(s) AND s.id dentista = c.id dentista AND s.especialidade = ‘endodontia’)}
{q|(∃r) (∃h) (∃i) (∃u) (∃v) (consulta(qrst) AND especialidade(hi) AND especialidade(uv) AND r = h AND r = u AND i = ‘ortodontia’ AND v = ‘endodontia’)}
SELECT DISTINCT id_paciente FROM CONSULTA
WHERE id_dentista IN ((SELECT id_dentista FROM especialidade e
WHERE especialidade = ‘ortodontia’) INTERSECT
(SELECT id_dentista FROM especialidade e
WHERE especialidade = ‘endodontia’))
2
Quest˜ ao 3c:
CONS PROC←CONSULTA∗PROCEDIMENTO RESULT←ΠCODIGO PROCEDIMENTO(CONS PROC)
{p.codigo procedimento|procedimento(p) AND (∃c) (consulta(c) AND c.id procedimento = p.id procedimento)}
{v|(∃t) (∃u) (procedimento(uvw) AND consulta(qrst) AND t = u)}
SELECT DISTINCT codigo_procedimento FROM consulta c, procedimento p
WHERE c.id_procedimento = p.id_procedimento
Quest˜ ao 3d:
CONS ESPEC←ESPECIALIDADE∗CONSULTA
RESULT(ESPECIALIDADE, CONTAGEM)←ESPECIALIDADE=COUNT ID PROCEDIMENTO(CONS ESPEC)
N˜ ao ´e poss´ıvel fazer em c´ alculo de tuplas e c´ alculo de dom´ınio.
SELECT especialidade, count(id_procedimento) FROM consulta c, especialidade e
where c.id_dentista = e.id_dentista AND id_procedimento IS NOT NULL group by (especialidade)
Obs: neste item, cada procedimento realizado por dentistas com mais de uma especialidade, deve ser contabilizado em todas as especialidades relacionadas.
Quest˜ ao 3e:
TODOS PROCS←ΠID PROCEDIMENTO(PROCEDIMENTO)
PROCS REALIZADOS←ΠID DENTISTA, ID PROCEDIMENTO(CONSULTA) DENTISTAS TODOSPROCS←PROCS REALIZADOS÷TODOS PROCS) RESULT←ΠNOME(DENTISTAS∗DENTISTAS TODOSPROCS)
{d.nome|dentista(d) AND (∀p) ((NOT (procedimento(p)) OR ((∃c) (consulta(c) AND c.id dentista = d.id dentista AND p.id procedimento = c.id procedimento)))}
{k|(∃j) (dentista(jk) AND ((∀u)((NOT(procedimento(uvw))) OR ((∃r) (∃t) (consulta(qrst) AND r = j AND u = t))))}