Escolar Documentos
Profissional Documentos
Cultura Documentos
Índice
1. Definições...................................................................................................................................................1
1.1 Base de Dados (BD).............................................................................................................................1
1.2. Sistemas de Gestão de Base de Dados (SGBD)..................................................................................1
3. Álgebra relacional....................................................................................................................................17
3.1 Seleção (ou Restrição) - σpredicate( R)........................................................................................18
II
4.3.5 Condição de Procura NULL........................................................................................................35
4.4 ORDER BY...........................................................................................................................................35
4.5 Funções de Agregação.......................................................................................................................36
4.5.1 COUNT........................................................................................................................................36
4.5.2 SUM............................................................................................................................................36
4.5.3 MIN, MAX, AVG..........................................................................................................................37
4.6 Subqueries.........................................................................................................................................37
4.7 EXISTS................................................................................................................................................38
Exercícios
PL1 …………………………….2
PL2 …………………………….4
PL3 …………………………….4
PL4 …………………………….9
PL5 – 2 ……………………….11
PL5 – 3 ……………………….18
PL6 …………………………….24
III
1. Definições
Uma base de dados é uma coleção compartilhada de dados relacionados logicamente, e uma
descrição desses dados, concebidos para satisfazer as necessidades de informação de uma organização.
O Sistema de Gestão de Base de Dados é um software que permite aos utilizadores definir,
criar, manter e controlar o acesso à base de dados.
O ambiente SGBD consiste de hardware (computador), software (SGBD, sistema operativo, e
programas de aplicações), dados, procedimentos e pessoas. As pessoas incluem os administradores da
base de dados, programadores de aplicativos e utilizadores finais.
Vantagens Desvantagens
Controle de redundância de dados Complexidade
Consistência dos dados Tamanho
Mais informações a partir da mesma quantidade de Custos elevados
dados Maior impacto nas falhas
Partilha de dados
Capacidade de resposta melhorada
Maior segurança
Aplicação de normas
Aumento da produtividade
Manutenção melhorada através de independência
de dados
Serviços de backup e recuperação melhoradas
1
2.1 Desenho Conceptual: Modelo Entidade-Relacionamento
PL1: Todas as empresas da área da saúde têm de guardar a informação relativa aos contactos
pessoais dos profissionais que nela trabalham. Os “livros” de contactos podem apresentar estruturas e
formatos muito diversos.
• um-para-muitos (1: N): usado quando uma entidade A pode se relacionar com uma ou
mais entidades B
2
Ao alterar os dados do Profissional é de interesse registar a data em que se alteram os dados.
Assim o relacionamento ‘alterar’ vai ter o atributo ‘data de alteração’.
4. Determinar domínios de atributos, isto é, definir os valores que os atributos podem ter. Por
exemplo, as notas finais de uma cadeira têm de ser entre zero e vinte
Notas:
- Atributo multivalor: atributo que possuem mais do que um valor. É representado por
dois círculos. Ex: uma pessoa pode ter vários números de telemóvel
- Atributo Composto: atributo que é subdividido noutros atributos. Ex: a morada é
subdividida em rua, localidade e código postal
- Atributo Derivado: atributos que dependem de outras bases de dados. É representado
por um círculo a tracejado. Ex: PL3
- A profissão é um atributo fraco pois não é um objeto distinto, depende das pessoas,
ex.: enfermeiro, enfermeira, médico, medico. Por isso, a profissão passa a ser uma
entidade.
- Para cada entidade tem de se escolher uma chave, isto é, tem de se escolher o atributo
que a representa. Geralmente, a chave á o atributo sublinhado.
3
PL2: uma empresa de colheitas de para análises clínicas pretende desenvolver uma pequena base de
dados para registar os equipamentos que os seus funcionários utilizam nas diversas tarefas de colheita e
armazenamento que realizam.
Na definição de cada serviço de colheita é necessário caracterizar os tipos de colheitas serão feitas
(número, designação, data de início e data de fim, nome do cliente e local de realização), indicar quais os
funcionários (número, nome e categoria) que nele vão participar, o equipamento que vai ser utilizado no
trabalho e o número de horas de utilização previsto para cada equipamento nesse trabalho; além disso, é
necessário registar o funcionário que será o responsável pela realização de cada um dos diferentes tipos de
colheita.
PL3: A inscrição e o registo das classificações nas Unidades Curriculares há muito que
representam um problema para os serviços académicos. Os requisitos que os responsáveis acharam
mais importantes e que gostariam de ver na futura base de dados são:
• Na altura da sua inscrição, um aluno tem que indicar o seu nome, nº de contribuinte, nº cartão
de cidadão, endereço, nº de contacto telefónico, o nome dos pais e do encarregado de
educação, a data de nascimento, e o curso que vai frequentar; mais tarde o seu registo de
dados irá conter, também, o nº de unidades curriculares realizadas, o valor em ECTS e a sua
média.
• Os cursos são caracterizados pela sua designação, número de alunos inscritos, ciclo de estudos,
grau que confere e a que conselho pedagógico pertence; além da identificação do seu diretor
que é, obrigatoriamente, um dos professores.
• As unidades curriculares estão integradas no plano curricular de um dado curso; na base de
dados futura deverá figurar também a escolaridade da unidade curricular bem como a
4
informação do seu responsável (um professor) e o tipo e o nº de aulas que cada professor
leciona.
• Os professores das unidades curriculares pertencem a um dado departamento e são
classificados através da sua categoria dentro da instituição.
Objetivos
Permitir um elevado grau de independência de dados
Fornecer motivos para lidar com a semântica de dados, problemas de consistência e
redundância.
Permite a expansão de linguagens de manipulação de dados orientadas para conjuntos
Terminologias
Relação: tabela bidimensional, em que as linhas correspondem aos dados individuais e as
colunas correspondem aos atributos. As relações são usadas para conter informação sobre
os objetos que serão representados na base de dados
Atributo: é uma coluna com nome e que pertence a uma relação
5
Domínio: é o conjunto de valores permitidos para um ou mais atributos. Todos os atributos
numa relação são definidos num domínio
Grau de uma relação: número de atributos que a relação contém
Cardinalidade: número de linhas/tuplos que a relação tem
Super Chave: atributo, ou conjunto de atributos, que identifica unicamente um tuplo dentro
de uma relação
Chave Primária: permite a identificação de cada registo (tuplo) da tabela, garantindo a sua
unicidade. Nunca pode ser nula
Chave Estrangeira: identifica um atributo, ou conjunto de atributos numa tabela, que
corresponde à chave primária de uma outra tabela. Assim, os valores da chave primária de
uma tabela são reproduzidos noutra tabela à qual esta se encontra ligada. As chaves
estrangeiras são a única forma para representar relações entre tabelas, numa base de dados
relacional.
Valor Nulo: representa informação não disponível ou não aplicável
6
Branch (branch No, street, city, postcode)
Staff (staff No, fName, Iname, position, sex, DOB, salary, branch No)
Property for Rent (property No, street, city, postcode, type, rooms, rent, owner No,
Staff No, branch No)
Client (client No, fName, Iname, telNo, prefType, maxRent, eMail)
Private Owner (owner No, fName, Iname, address, telNo, email, password)
Viewing (client No, property No, view Date, comment)
Registration (client No, branch No, staff No, date Joined)
7
2.2.1 SQL Workbench
O MySQL Workbench fornece recursos extensivos para criar e manipular modelos de banco de
dados, incluindo estes:
Criar e manipular um modelo graficamente
Reverse engineer um banco de dados ao vivo para um modelo
Forward engineer modelo para um script ou banco de dados ao vivo
Criar e editar tabelas e inserir dados
Identifying relationship: identificado por uma linha contínua entre tabelas. Um relacionamento
identificador é aquele em que a tabela filho não pode ser identificada de forma exclusiva sem seu pai.
Normalmente, isso ocorre quando é criada uma tabela intermediária para resolver um relacionamento
8
muitos-para-muitos. Nesses casos, a chave primária é, normalmente, uma chave composta pelas chaves
primárias das duas tabelas originais.
Non-identifying relationship: identificado por uma linha quebrada (tracejada) entre tabelas
9
1
DECIMAL (3,1): algarismo de 3 dígitos; 2 dígitos pertencem à parte inteira e 1 pertence à parte decimal.
PL5 - 2: A partir do esquema lógico apresentado desenhe um possível esquema conceptual.
MODELO FÍSICO
3. Álgebra relacional
A álgebra relacional é uma linguagem teórica com operações sobre uma ou mais relações para
definir outra relação, sem alterar a relação original. Assim, tanto os operandos como os resultados são
relações, pelo que a saída de uma operação pode ser a entrada de outra operação. As cinco operações
10
fundamentais da álgebra - Seleção, Projeção, Produto Cartesiano, União e Diferença - executam a
maioria das operações de recuperação de dados. Para além destas também há as operações de Junção,
Interseção e Divisão que podem ser expressas a partir das cinco operações básicas.
11
3.2 Projeção - Π a , …a (R)
1 n
A Projeção funciona numa única relação R e define uma relação que contém um subconjunto
vertical de R, extraindo os valores de atributos especificados e eliminando duplicados. Por exemplo,
produza uma lista dos salários de todos os empregados, mostrando apenas o staffNo, fName, IName e
salary details: Π staffNo , fName, IName , salary ( Staff )
3.3 União (R ∪S )
A união das duas relações R e S definem uma relação que contém todos os
tuplos de R, ou S, ou ambos os R e S, tuplos duplicados são eliminados. R e S devem ser
compatíveis. Por exemplo, lista de todas as cidades onde existe um escritório ou uma
propriedade para alugar: Π city (Branch)∪ Π city ( PopertyForRent) .
12
3.6 Produto Cartesiano (R × S)
O produto cartesiano define a relação que é a concatenação de cada tuplos de R relacionada
com cada tuplo da relação S. Por exemplo, listar os nomes e comentários de todos os clientes que
visualizaram um imóvel para alugar:
Π clientNo , fName , IName (Client) × Π clientNo , propertyNo ,comment (Viewing )
A relação contém informações a mais. Por exemplo, o primeiro tuplo contém diferentes valores
clientNo. Para obter o resultado pretendido, precisamos realizar uma seleção nesta relação para extrair
os tuplos onde Client.clientNo = Viewing.clientNo.
σ Client .clientNo=Viewing .clientNo (Π clientNo ,fName , IName ( Client ) × Π clientNo , propertyNo , comment ( Viewing ) )
13
Existem várias formas da operação junção, cada uma com diferenças subtis, algumas mais úteis
do que outras: Theta join, Natural join, Outer join, Semijoin. Usam-se quando as relações têm um
atributo comum.
( Π clientNo , fName , IName ( Client )) ⋈Client . clientNo=Viewing . clientNo ( Π clientNo , propertyNo , comment ( Viewing ) )
para alugar: ( Π clientNo , fName , IName ( Client ) ) ⋈ ( Π clientNo , propertyNo , comment (Viewing ) )
14
Faz todas as possíveis combinações de R e S (PropertyForRent e Viewing), ou seja, inclui os atributos
de R que não têm correspondência em S.
Usa-se para obter dados apenas da relação S, isto é, obtém-se street e city das propriedades vistas.
3.7.4 Semijoin ( R ⊳ F S)
A operação Semijoin define uma relação que contém os tuplos de R que participam na junção
de R com S.
Por exemplo, listar os detalhes completos de todos os funcionários que trabalham na filial de
Glasgow: Staff ⊳ Staff . branchNo= Branch.branchNo ( σ city ¿' Glasgo w ' (Branch) )
3.8 Divisão (R ÷ S)
A operação Divisão define uma relação sobre o atributo C, que consiste no conjunto de tuplos
de R que correspondem a combinação de cada tuplo em S. Retorna uma relação contendo elementos da
primeira relação que se relacionam com todos os elementos da segunda relação. Os atributos
resultantes são os atributos da relação R que não existem na relação S.
Por exemplo, identificar todos os clientes que visualizaram todos os imóveis com três quartos:
Π clientNo , propertyNo ( Viewing ) ÷ Π propertyNo (σ rooms=3 ( PropertyForRent ) )
15
3.10 Operações de Agrupamento (GA I AL ( R ) ¿
As operações de agrupamento agrupam os tuplos da relação R agrupando os atributos GA, em
seguida, aplica-se a lista das funções de agregação AL para definir uma nova relação. AL contém um ou
mais (<aggregate_function>, <atributo>) pares. A relação resultante contém os atributos de
agrupamento, GA, e os resultados de cada uma das funções de agregação.
16
PL5 - 3: Utilizando a Álgebra Relacional, desenvolva as expressões necessárias, e respetivas
árvores de resolução, que possam responder às seguintes questões:
17
Π nome , morada ¿
e) Qual o nome e idade dos médicos com mais de 40 anos de Clínica Geral.
Π nome , dta nascimento
¿¿
⋉ Medico . id Especialidade
=Especialidade .id σ designacao=' clinica geral ' ( Especialidade) ¿
Π nome ¿
σ designacao=Oftalmologia (Especialidade) ⋉ Medico .id =Consultas .id medico
¿
⋉ Paciente . cod postal
=Cod postal.. codigo σ localidade=' Braga ' ( cod postal )¿ ¿
g) Qual o nome e anos de serviço dos médicos com mais de 50 anos que deram consultas de
tarde a pacientes com menos de 20 anos.
Π nome , dta ¿ ¿ ¿
h) Qual o nome e idade dos pacientes com mais de 10 anos que nunca foram consultados a
Oftalmologia.
18
Π nome , dta
nascimento
¿¿
σ designacao=' Oftalmologia ' ( Especialidade )¿ ¿
Embora SQL seja de formato livre, uma instrução SQL ou conjunto de instruções é mais legível
se se usar indentação e lineação. Por exemplo:
Cada cláusula de uma instrução deve começar numa nova linha
O início de cada cláusula deve ser alinhado com o início de outras cláusulas
Se uma cláusula tem várias partes, elas devem aparecer numa linha separada e estar
indentada para mostrar o relacionamento
Literais: são constantes usadas nas instruções SQL. Os literais são diferenciados entre os que
são colocados entre plicas e aqueles que não são. Todos os valores de dados não-numéricos devem ser
colocados entre plicas; todos os dados numéricos não devem ser colocados entre plicas.
19
CREATE TABLE enrolled( CREATE TABLE student (
snum INT(9), snum INT(9) PRIMARY KEY,
cname VARCHAR (40), sname VARCHAR(30),
PRIMARY KEY (snum,cname), major VARCHAR(25),
FOREIGN KEY(snum) REFFER- standing VARCHAR(2),
ENCES student age INT(3));
DESCRIBE student
#Indica as colunas e respetivos tipos de dados da tabela students
4.2 INSERT
INSERT INTO empregado
(primeiro, ultimo, idade, morada, localidade, estado)
VALUES ('Luis', 'Duque', 45, `Rua dos Bragas, 20', `Braga', `Minho');
4.3 UPDATE
UPDATE empregado
SET idade = idade+1
WHERE primeiro_nome='Maria' AND ultimo_nome=`Pereira';
4.3 SELECT
O objetivo da instrução SELECT é recuperar e exibir dados de uma ou mais tabelas da base de
dados. É capaz de executar o equivalente às operações Seleção, Projeção e Junção da álgebra relacional
numa única instrução.
Obrigatórias
Opcionais
20
FROM: especifica a tabela ou tabelas que vão ser usadas. TableName é o nome de
uma tabela existente ou view para a qual tens acesso; alias é a abreviação opcional
para TableName
WHERE: filtra as linhas sujeitas a alguma condição
GROUP BY: forma grupos de linhas com o mesmo valor de coluna
HAVING: filtra os grupos sujeitos a alguma condição
ORDER BY: especifica a ordem da saída
4.3.1 WHERE
O SELECT retorna todas as linhas da tabela. No entanto, ás vezes é necessário restringir as
linhas retornadas. Para isso usa-se a palavra WHERE seguida da condição de procura que especifica as
linhas que devem ser retornadas. As cinco condições básicas de procura são:
Comparação: compara o valor de uma expressão com o valor de outra expressão
21
Definir associação (IN): testa se o valor de uma expressão é igual a um de um conjunto
de valores
22
Teste nulo: testa se uma coluna tem um valor nulo (desconhecido)
PL6: com base no esquema físico gerado na PL5, pretende-se que povoe a base de dados criada, utilize
para isso o ficheiro PovoaFE06. Utilizando SQL, desenvolva os comandos, para responder às questões:
a) Quais são os nomes dos médicos com mais de 10 anos de serviço
SELECT nome from medicos
WHERE idade (Dta_ini_servico) > 10;
e) Qual o nome e idade dos médicos com mais de 40 anos da especialidade de Clínica Geral
SELECT nome, idade (Dta_nascimento) from medicos, especialidades
WHERE idade (Dta_nascimento) > 40 AND id_especialidade =
especialidades.id AND especialidades.designacao = 'Clínica Geral');
23
f) Qual o nome médicos de Oftalmologia que consultaram pacientes de Braga
SELECT DISTINCT nome from consultas, medicos, especialidades
WHERE consultas.id_medico = medicos.id AND medicos.id_especialidade =
especialidades.id AND especialidades.designacao = 'Oftalmologia' AND
consultas.id_paciente IN
(SELECT id_paciente from pacientes WHERE cod_postal IN
(SELECT codigo from cod_postal WHERE localidade = 'BRAGA'));
g) Qual o nome e anos de serviço dos médicos com mais de 50 anos que deram consultas de tarde a
pacientes com menos de 20 anos
SELECT DISTINCT nome, idade (Dta_ini_servico) from medicos, consultas
WHERE idade (Dta_nascimento) > 50 AND date_format (Data_Hora, '%H')>
'12' AND consultas.id_medico = medicos.id AND consultas.id_paciente IN
(SELECT id_paciente from pacientes WHERE idade (Dta_nascimento) < 20);
h) Qual o nome dos pacientes com mais de 10 anos que nunca tiveram consulta a Oftalmologia.
SELECT nome from pacientes
WHERE idade (Dta_nascimento) > 10 AND id_paciente NOT IN
(SELECT id_paciente from consultas, medicos, especialidades
WHERE consultas.id_medico = medicos.id AND
medicos.id_especialidade = especialidades.id AND
especialidades.designacao = 'Oftalmologia');
OU
SELECT nome from pacientes
WHERE idade (dta_nascimento) > 10 AND
(SELECT COUNT (*) from consultas, medicos, especialidades
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico = medicos.id AND medicos.id_especialidade
= especialidades.id AND designacao = ‘Oftalmologia’) = 0;
j) Qual é o nome dos médicos com mais de 30 anos ou menos de 5 anos de serviço.
SELECT nome from medicos
WHERE idade (Dta_nascimento) > 30 OR idade (Dta_ini_servico) < 5;
k) Qual o nome e idade dos médicos de Clínica Geral que não consultaram em janeiro de 2016.
SELECT nome, idade (Dta_nascimento) from medicos, especialidades
WHERE medicos.id NOT IN
(SELECT medicos.id from consultas
WHERE medicos.id = consultas.id_medico
24
AND date_format (Data_Hora, '%M, %Y') = 'January, 2016')
AND medicos.id_especialidade = especialidades.id
AND designacao = 'Clínica Geral';
l) Qual o nome e idade dos pacientes que já foram consultados por todos os médicos.
SELECT nome, idade (Dta_nascimento) from pacientes
WHERE NOT EXISTS
(SELECT * from medicos WHERE NOT EXISTS
(SELECT * from consultas
WHERE pacientes.id_paciente = consultas.id_paciente
AND consultas.id_medico = medicos.id));
OU
SELECT nome, idade (dta_nascimento) from pacientes
WHERE (SELECT COUNT(DISTINCT id_medico) from consultas
WHERE consultas.id_pacientes = pacientes.id_paciente) =
(SELECT COUNT(*) from medicos);
m) Qual o nome das especialidades que tiveram consultas no mês de janeiro e março de 2016.
SELECT designacao from especialidades, medicos
WHERE medicos.id IN
(SELECT DISTINCT medicos.id from consultas
WHERE medicos.id = consultas.id_medico
AND (date_format (Data_Hora, '%M, %Y') = 'January, 2016'
OR date_format (Data_Hora, '%M, %Y') = 'February, 2016'))
AND medicos.id_especialidade = especialidades.id;
n) Qual o nome dos médicos que nunca consultaram pacientes residentes em Braga.
SELECT nome from medicos
WHERE medicos.id NOT IN
(SELECT medicos.id from consultas, pacientes
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico = medicos.id
AND pacientes.cod_postal IN
(SELECT codigo from cod_postal WHERE localidade = 'BRAGA'));
o) Qual o nome e idade dos pacientes que só foram consultados a Clínica Geral.
SELECT nome, idade (Dta_nascimento) from pacientes
WHERE EXISTS (SELECT * from consultas
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico IN
(SELECT id from medicos
WHERE id_especialidade = (SELECT id from especialidades
WHERE designacao = 'Clínica Geral')))
AND NOT EXISTS (SELECT * from consultas
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico IN
(SELECT id from medicos
25
WHERE id_especialidade IN (SELECT id from especialidades
WHERE designacao <> 'Clínica Geral')));
OU
SELECT nome, idade (dta_nascimento) from pacientes
WHERE (SELECT COUNT(*) from consultas
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico IN
(SELECT id from medicos WHERE id_especialidade = (SELECT id
from especialidades WHERE designacao = 'Clínica Geral')))>0
AND (SELECT COUNT(*) from consultas
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico IN
(SELECT id from medicos WHERE id_especialidade IN
(SELECT id from especialidades
WHERE designacao <> 'Clínica Geral'))) = 0;
4.3.2 ORDER BY
Em geral, as linhas de uma tabela de resultados de SQL não estão dispostas em nenhuma
ordem específica. No entanto, podemos garantir que os resultados sejam ordenados usando a cláusula
ORDER BY na instrução SELECT. A cláusula ORDER BY sempre deve ser a última cláusula da instrução
SELECT.
A cláusula ORDER BY permite que as linhas sejam ordenadas em ordem ascendente (ASC) ou
descendente (DESC) em qualquer coluna ou combinação de colunas, independentemente de essa coluna
aparecer no resultado.
4.3.3 GROUP BY
Faz o agrupamento dos resultados
209
4.7 HAVING
26
4.7 Funções de Agregação
A norma ISO define cinco funções agregadas:
COUNT - retorna o número de valores da coluna especificada
COUNT (*): conta o número de valores da coluna, incluindo nulos
COUNT (nome): conta o número de valores não-nulos da coluna nome
COUNT (DISTINCT nome): conta o número de valores não-nulos diferentes da
coluna nome
SUM - retorna a soma dos valores da coluna especificada
AVG - retorna a média dos valores da coluna especificada
MIN - retorna o menor valor da coluna especificada
MAX - retorna o maior valor da coluna especificada
4.8 EXISTS
EXISTS e NOT EXISTS são projetadas para uso somente com subqueries. Eles produzem um
resultado simples true / false. EXISTS é true se e somente se existir pelo menos uma linha na tabela de
resultados retornada pela subquery; é false se a subquery retorna uma tabela de resultado vazia. NOT
EXISTS é o oposto de EXISTS.
27
28