Professional Documents
Culture Documents
O MODELO RELACIONAL
O Modelo Relacional representa a base de dados como uma coleo de relaes. Uma
relao concebida como uma tabela de valores, cada linha da tabela representa uma
coleo de valores de dados relacionados. Estes valores podem ser interpretados como fatos
que descrevem uma entidade ou um relacionamento do mundo real. Os nomes de tabelas e
nomes de colunas servem tambm para auxiliar na interpretao do significado dos valores
em cada linha de cada tabela.
Na terminologia do Modelo Relacional, uma linha chamada TUPLA, o cabealho de uma
coluna chamado ATRIBUTO e a tabela chamada RELAO. Os tipos de dados que
descrevem os tipos de valores que podem aparecer em cada coluna so chamados de
DOMNIO.
Domnio
Um domnio D um conjunto de valores atmicos, isto , cada valor do domnio
indivisvel segundo o contexto sobre o qual o modelo concebido. Um mtodo comum de
especificar um domnio consiste em especificar o tipo de dado segundo o qual os valores
dos dados que formam o domnio so estabelecidos.
Exemplos
Alunos_Matrculas: Conjunto de 5 dgitos vlidos como matrcula
Alunos_Datas_Nascimento: Conjunto de datas vlidas.
Alm de nome, tipo de dado e formato, informaes adicionais podem ser fornecidas para
facilitar a interpretao dos valores do domnio.
Exemplos
Alunos_Datas_Nascimento: Conjunto de datas compreendidas entre 01/01/1950 e
31/12/1982.
Alunos_Sexo: Deve ser M ou F.
Atributos
Tuplas
ALUNO
Matrcula
Nome
DataNascimento
Sexo
Nomes de Relaes
Instncias de Relaes
Tuplas
R ( A1 , A2 , ... , An )
t = < v1 , v2 , ... , vn >
Onde vi o valor correspondente ao atributo Ai.
Q,R,S
q,r,s
t,u,v
Nomes dos atributos podem ser qualificados com o nome da relao a que pertencem, por exemplo:
ALUNO.Matrcula, ALUNO.Nome, etc.
de tamanho varivel, data, etc. Os domnio podem ainda especificar um conjunto de valores
vlidos explicitamente identificados.
Restries de Chave ( Chave Primria = Primary Key )
Uma relao definida como um conjunto de tuplas. Por definio, todos os elementos do conjunto so
distintos, portanto, todas as tuplas em uma relao devem tambm ser distintas. Isto significa que no pode
haver duas tuplas com a mesma combinao de valores para todos os atributos.
Importante
Em um banco de dados de muitas relaes, existem geralmente muitas restries de
integridade referencial. Para especificar estas restries, deve-se primeiro ter uma clara
compreenso do significado do papel de cada atributo das vrias relaes do esquema do
banco de dados. As restries de integridade referencial surgem dos relacionamentos entre
as entidades.
Exemplo:
PROFESSOR
Nome
DataNascimento
Sexo
CodigoDepartamento
CPF
DEPARTAMENTO
Nome
Codigo
CURSO
Nome
CodigoDepartamento
Codigo
Exemplos de Relao
Nome da relao
DEPARTAMENTO
Codigo
01
02
03
atributos
Nome
Financeiro
Engenharia
Comercial
tupla
Figura 1
CARGO
Codigo
01
02
03
04
05
06
07
Nome
Advogado
Analista de Sistemas
Contador
Engenheiro
Programador
Medico
Auxiliar de Escritrio
Salario
3000,00
4000,00
1000,00
4000,00
1500,00
4000,00
400,00
Figura 2
EMPREGADO
Codigo
001
002
003
004
005
006
007
008
009
Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado
DataNascimento
10/10/70
02/05/76
30/06/49
20/07/80
18/08/72
25/03/60
27/12/55
02/03/51
14/11/55
Figura 3
CodDep CodCargo
01
03
02
01
01
02
03
05
02
02
01
01
03
03
02
01
01
02
DEPARTAMENTO
1
N
1
EMPREGADO
CARGO
LGEBRA RELACIONAL
A lgebra relacional consiste de um conjunto de operaes que tm como entrada um ou
mais relaes e produzem como sada uma nova relao
Operaes Fundamentais
As operaes fundamentais da lgebra relacional so: Insert, Delete, Modify, Select,
Project, Union, Set difference, Cartesian Product e Rename.
Outras Operaes
Alm das operaes fundamentais a lgebra relacional define outras operaes, tais como:
Namely, Set intersection, Natural Join, Division e Assinment.
Operaes primrias
So as operaes que operam com uma nica relao.
Operaes binrias
So as operaes que operam com duas relaes.
A Operao INSERT
Insere uma nova tupla(linha) em uma relao. A operao insert pode violar todas as
restries de integridade de uma relao.
Estrutura geral do comando
Insert (v1,v2,v3,...vn) into Relao
Relao objeto do comando Insert
Exemplo
Insert (20,Departamento de Marketing) into DEPARTAMENTO
Resultado
Se ns considerarmos a relao DEPARTAMENTO como aquela da figura 1, ento
o resultado dessa operao, um relao cujo contedo o mostrado abaixo:
DEPARTAMENTO
Codigo
01
02
03
20
Nome
Financeiro
Engenharia
Comercial
Marketing
10
A Operao DELETE
Exclui fisicamente uma tupla(linha) de uma relao. Esta operao pode violar a restrio
de integridade referencial de uma relao.
Estrutura geral do comando
Delete from Relao with condio
Condio de excluso da tupla
Exemplo
Delete from DEPARTAMENTO with Cdigo = 20
Resultado
Se ns considerarmos a relao DEPARTAMENTO como aquela da figura
anterior, ento o resultado dessa operao, um relao cujo contedo o
mostrado abaixo:
DEPARTAMENTO
Codigo
01
02
03
Nome
Financeiro
Engenharia
Comercial
11
A Operao MODIFY
Altera o contedo dos campos de uma tupla(linha) de uma relao. Esta operao pode
violar todas as restries de integridade da relao.
Estrutura geral do comando
Modify Relao a1 = v1, a2=v2,...na=v2 with condio
Condio de excluso da tupla
v1, v2,..vn so os novos valores dos campos da tupla
Exemplo
Modify DEPARTAMENTO Nome = Recursos Humanos with Cdigo = 20
Resultado
Se ns considerarmos a relao DEPARTAMENTO como aquela da figura 4, ento
o resultado dessa operao, um relao cujo contedo o mostrado abaixo:
DEPARTAMENTO
Codigo
01
02
03
20
Nome
Financeiro
Engenharia
Comercial
Recursos Humanos
12
A Operao SELECT
A operao select seleciona tuplas(linhas) de uma relao que satisfaam a uma
determinada condio (predicado).
Estrutura geral do comando
predicado (Relao)
Relao objeto da operao
Condio de seleo das linhas
Operador representativo da operao select
Exemplos
a) Obter uma relao com os empregados cujo CodCargo = 3 (Departamento
Comercial).
Codigo
001
007
Nome
Maria Araujo
Marcia dos Anos
DataNascimento
10/10/70
27/12/55
CodDep CodCargo
01
03
03
03
Nome
Maria Araujo
Marcio Francisco
Rezende Rocha
Ferreira Fado
DataNascimento
10/10/70
30/06/49
25/03/60
14/11/55
CodDep CodCargo
01
03
01
02
01
01
01
02
14
A Operao PROJECT
A operao project obtm uma relao cujos atributos so um subconjunto dos atributos de
uma outra relao.
Estrutura geral do comando
predicado (Relao)
Relao objeto da operao
Atributos da relao a serem obtidos
Operador representativo da operao project
Exemplos
a) Listar o cdigo e o nome de todos os empregados constantes da relao
EMPREGADO. Tuplas (linhas) duplicadas obtidas, so ignoradas, e no fazem
parte da relao resultante.
Codigo
001
002
003
004
005
006
007
008
009
Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado
15
Salario
3000,00
4000,00
1000,00
4000,00
1500,00
4000,00
400,00
16
17
Exemplos
a) Obter a relao Empregados Especiais, a partir da relao Empregado, da
figura 3. A nova relao deve conter, apenas, o nome dos empregados.
Empregados Especiais Nome (EMPREGADO)
A relao Empregados Especiais teria o contedo, abaixo:
Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado
Figura 12: Relao Empregados Especiais
18
Uma outra alternativa para obter a lista, seria usar a operao de assignment,
assim:
TEMP CodDep = 01 (EMPREGADO) Obtm a relao TEMP com os
empregados com CodDep = 01
(departamento Financeiro)
Nome (TEMP) Obtm a lista com o nome dos empregados, conforme
mostrado na figura 10.
19
predicado (Relao2)
Exemplos
b) Obter uma relao que contenha o codigo e nome do departamento e, os dados
dos empregados a ele associados. As duas relaes: DEPARTAMENTO e
EMPREGADO
esto
associadas
atravs
dos
atributos:
Cdigo
de
20
Cd
Dep
01
01
01
01
02
02
02
03
03
Cd
Cargo
03
02
01
02
01
02
01
05
03
21
FROM
Codigo,
Nome
Empregado
1.3. Resultado
Codigo
001
002
003
004
005
006
007
008
009
Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado
1.4. Observaes
Observe que esto listados, apenas, os atributos especificados no comando
SELECT, apesar da tabela conter outros atributos
22
SELECT
Codigo,
Nome,
DataNascimento
FROM
Empregado
WHERE
Condio para
recuperao dos dados
2.3. Resultado
Codigo
001
005
Nome
Maria Araujo
Francisco Carlos
DataNascimento
10/10/70
18/08/72
2.4. Observaes
23
FROM
Cargo
3.3. Resultado
Codigo
01
02
03
04
05
Nome
Advogado
Analista de Sistemas
Contador
Engenheiro
Programador
Salario
3000,00
4000,00
1000,00
4000,00
1500,00
24
FROM
Empregado.Codigo,
Empregado.Nome,
Cargo.Nome
Empregado,
Cargo
WHERE
Cargo.Codigo = Empregado.CodCargo
4.3. Resultado
Codigo
001
002
003
004
005
006
007
008
009
Nome
CodCargo
Maria Araujo
Contador
Carla Figueiredo
Advogado
Marcio Francisco Analista de Sistemas
Maria Bonita
Programador
Francisco Carlos Analista de sistemas
Rezende Rocha
Advogado
Marcia dos Anos
Contador
Jos Ferreira
Advogado
Ferreira Fado
Analista de Sistema
25
Empregado.Codigo,
Empregado.Nome,
Cargo.Nome
FROM
Empregado,
Cargo
WHERE
Cargo.Codigo = Empregado.CodCargo
AND
(Empregado.CodDep = 01
AND
Empregado.CodDep = 03)
5.3. Resultado
Codigo
001
003
004
006
007
009
Nome
CodCargo
Maria Araujo
Contador
Marcio Francisco Analista de Sistemas
Maria Bonita
Programador
Rezende Rocha
Advogado
Marcia dos Anos
Contador
Ferreira Fado
Analista de Sistema
5.4. Observaes
26
SELECT
Codigo,
Nome,
DataNascimento
FROM
Empregado
WHERE
Condio para
recuperao dos dados
Ordenando por nome
ORDER BY Nome
6.3. Resultado
Codigo
005
001
Nome
Francisco Carlos
Maria Araujo
DataNascimento
18/08/72
10/10/70
6.4. Observaes
27
7.
SELECT
FROM
Codigo,
Nome,
DataNascimento AS Data de Nascimento
Mudando o ttulo da
coluna
Empregado
7.2. Resultado
Codigo
001
002
003
004
005
006
007
008
009
Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado
Data de Nascimento
10/10/70
02/05/76
30/06/49
20/07/80
18/08/72
25/03/60
27/12/55
02/03/51
14/11/55
28
Empregado.Codigo,
Empregado.Nome,
Mudando o ttulo da coluna
correspondente ao nome do
departamento e do cargo
Departamento.Nome AS Departamento,
Cargo.Nome AS Cargo,
Cargo.Salario
FROM
Empregado,
Departamento,
Cargo
WHERE
Departamento.Codigo = Empregado.CodDep
Associa o Empregado ao
seu Departamento
AND
Empregado.CodCargo = Cargo.Codigo
Associa o Empregado ao
seu Cargo
Ordenando por salario
de modo decrescente
8.2. Resultado
Codigo
003
005
009
002
006
008
004
001
007
Nome
Marcio Francisco
Francisco Carlos
Ferreira Fado
Carla Figueiredo
Rezende Rocha
Jos Ferreira
Maria Bonita
Maria Araujo
Marcia dos Anos
Departamento
Financeiro
Engenharia
Financeiro
Engenharia
Financeiro
Engenharia
Comercial
Financeiro
Comercial
Cargo
Analista de Sistemas
Analista de Sistemas
Analista de Sistemas
Advogado
Advogado
Advogado
Programador
Contador
Contador
Salario
4000,00
4000,00
4000,00
3000,00
3000,00
3000,00
1500,00
1000,00
1000,00
29
9.1. Soluo
Mudando o ttulo da coluna
SELECT
Empregado.CodCargo AS Cargo,
COUNT(Empregado.Codigo) AS Quantidade
FROM
Contando os empregados
e mudando o ttulo da
coluna
Empregado
Agrupando a quantidade de
empregados por cargo
GROUP BY Empregado.CodCargo
9.2. Resultado
Cargo
01
02
03
05
Quantidade
03
03
02
01
9.3. Observaes
30
10.1. Soluo
SELECT
Empregado.CodCargo AS Cargo,
SUM(Cargo.Salario) AS Salario
FROM
Cargo, Empregado
WHERE
Cargo.Codigo = Empregado.CodCargo
Associando o cargo ao
empregado
Agrupando a soma dos salrios dos
empregados por cargo
GROUP BY Empregado.CodCargo
10.2. Resultado
Cargo
01
02
03
05
Salrio
9.000,00
12.000,00
2.000,00
1.500,00
Repare os ttulos das colunas. Recorra ao contedo das tabelas Empregado e Cargos
para conferir o resultado da lista obtida.
Observe que s foram listados os cargos para os quais tem algum empregado
vinculado.
31
Departamento.Codigo,
Departamento.Nome,
Obtendo o menor salrio e
mudando o ttulo da
coluna
FROM
WHERE
Cargo.Codigo = Empregado.CodCargo
AND
Empregado.CodDep= Departamento.Codigo
Associando o
empregado ao cargo ao
departamento
GROUP BY Departamento.Codigo
Departamento.Nome
11.2. Resultado
Codigo
01
02
03
Nome
Financeiro
Engenharia
Comercial
Menor Salrio
1.000,00
3.000,00
1.000,00
11.3. Observaes
Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento,
Empregado e Cargos para conferir o resultado da lista obtida.
Observe que s foram listados os departamentos para os quais tem algum
empregado vinculado.
Repare que as clusulas FROM e WHERE fazem referncia tabela
Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece
32
33
SELECT
Departamento.Codigo,
Departamento.Nome,
Obtendo o maior salrio e
mudando o ttulo da
coluna
FROM
WHERE
Cargo.Codigo = Empregado.CodCargo
AND
Empregado.CodDep= Departamento.Codigo
Associando o o
empregado cargo e ao
departamento
GROUP BY Departamento.Codigo,
Departamento.Nome
12.2. Resultado
Codigo
01
02
03
Nome
Financeiro
Engenharia
Comercial
Maior Salrio
4.000,00
4.000,00
1.500,00
12.3. Observaes
Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento,
Empregado e Cargos para conferir o resultado da lista obtida.
34
35
13.
A clusula AVG calcula a mdia aritmtica dos valores de uma determinada coluna.
Linhas cuja coluna tenha valor nulo no entra no clculo da mdia.
13.1. Exmplo
Listar o mdia dos salrios de cada departamento. A lista deve conter o cdigo, o
nome e a mdia dos salrios do departamento. A coluna correspondente mdia
dos salrios deve ter o ttulo: Media dos Salrios.
13.2. Soluo
SELECT
Departamento.Codigo,
Departamento.Nome,
Obtendo mdia dos
salrios e mudando o
ttulo da coluna
FROM
WHERE
Cargo.Codigo = Empregado.CodCargo
AND
Empregado.CodDep= Departamento.Codigo
Associando o
empregado ao cargo e ao
departamento
GROUP BY Departamento.Codigo,
Departamento.Nome
13.3. Resultado
Codigo
01
02
03
Nome
Media dos
Salarios
3.000,00
3.333,33
1.250,00
Financeiro
Engenharia
Comercial
36
13.4. Observaes
Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento,
Empregado e Cargo para conferir o resultado da lista obtida.
Observe que s foram listados os departamentos para os quais tem algum
empregado vinculado.
Repare que as clusulas FROM e WHERE fazem referncia tabela
Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece
porque est no caminho dos relacionamentos que conduzem a tabela
Departamento (que contm dados a serem listados) e a tabela Cargo (que
contm dados a serem listados). Na realidade o menor salrio diz respeito aos
empregados vinculados aos departamentos.
37
Departamento.Codigo,
Departamento.Nome,
Obtendo a mdia dos
salrios e mudando o
ttulo da coluna
FROM
WHERE
Cargo.Codigo = Empregado.CodCargo
AND
Empregado.CodDep= Departamento.Codigo
GROUP BY Departamento.Codigo,
Departamento.Nome
HAVIING
Associando o o
empregado cargo e ao
departamento
14.3. Resultado
Codigo
03
Nome
Comercial
Menor Salrio
1.500,00
38
14.4. Observaes
Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento,
Empregado e Cargos para conferir o resultado da lista obtida.
Observe que s foram listados os departamentos para os quais tem algum
empregado vinculado.
Repare que as clusulas FROM e WHERE fazem referncia tabela
Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece
porque porque est no caminho dos relacionamentos que conduzem a tabela
Departamento (que contm dados a serem listados) e a tabela Cargo (que
contm dados a serem listados). Na realidade o menor salrio diz respeito aos
empregados vinculados aos departamentos.
39