Banco de dados
a) Um médico não possa ter consultas marcadas no mesmo dia e no mesmo horário;
CREATE ASSERTION controle_consulta CHECK (
NOT EXISTS (
SELECT * FROM AgendaConsulta M WHERE M.data IN (
SELECT * FROM AgendaConsulta VM WHERE M.hora = VM.hora
)
))
b)O grau de formação do médico seja “Graduação”, “Especialização”, “Mestrado” ou
“Doutorado”;
Usando Asserção
CREATE ASSERTION grau_formacao CHECK (
NOT EXISTS (
SELECT * FROM Medico M WHERE M.maior_formacao
NOT IN
(“ Graduacao ”, “ Especializacao ”, “ Mestrado ”, “ Doutorado ”)
))
Usando check – Melhor abordagem, por não necessitar de verificações em várias tabelas, ou seja, por ser um tipo de restrição mais simples.
Ao criar a tabela médico definir : maior_formacao varchar (45),
CHECK maior_formacao IN (“Graduacao ”, “ Especializacao ”, “ Mestrado ”, “
Doutorado ”),
c)Um médico só trabalhe em clínicas de sua cidade;
CREATE ASSERTION cidade_medico_clinica CHECK(
NOT EXISTS (
SELECT * FROM Medico M INNER JOIN ClinicaMedico CM ON
M.CodMed = CM.CodMed INNER JOIN Clinica C ON CM.CodCli = C.CodCli
WHERE M.CidadeMed C.CidadeCli
))
d) Uma subárea de especialização só exista se estiver ligada à sua respectiva área genérica;
CREATE ASSERTION verifica_subarea_especializacao CHECK(
NOT EXISTS (
SELECT * FROM Especializacao E WHERE E.CodEspGen IS NULL
))
2- Considerando o esquema de clínica médica, defina visões que mostrem:
a)Os nomes dos médicos que sejam Doutores em Ginecologia; Em seguida, verifique se o médico “Sérgio” está entre eles;
CREATE VIEW doutores_ginecologia AS
(SELECT M.NomeMed FROM Medico M INNER JOIN Especializacao E ON
M.CodEspe = E.CodEspeci WHERE M.maior_formacao = 'Doutorado' AND
E.Nome='Ginecologia'
)
Verificando existência do médico com o nome Sérgio
SELECT NomeMed FROM doutores_ginecologia WHERE NomeMed='Sergio'
b)Os nomes das áreas de