Você está na página 1de 234

Fundamentos de Bancos de Dados

José  Maria  Monteiro


Universidade  Federal  do  Ceará  – UFC
monteiro@dc.ufc.br

♥ José  Maria  Monteiro Banco  de  Dados   1


Sumário

☞ 1.
2.
Introdução  aos  Sistemas  de  Banco  de  Dados
O  Modelo  Relacional
3. Modelo  de  Entidades  e  Relacionamentos   (MER)
4. Projeto  de  Bancos  de  Dados  Relacionais
5. A  Linguagem   SQL
6. Acesso  a  Bancos  de  Dados
7. Restrições  de  Integridade
8. Técnicas  Avançadas  de  Projeto  de  BD’s  
Relacionais  (Normalização)

♥ José  Maria  Monteiro Banco  de  Dados 2


Sistemas de Informação e Banco de Dados

-­ Bibliografia  Recomendada  -­


1. Silberschatz,  A.,  Korth,  H.,  Sudarshan,  S.  “Sistema  de  
Banco  de  Dados”.  6ª  Edição,  Editora  Campus,  2012.
2. Elsmari,  R.,  Navathe,  Shamkant  B.  “Sistemas  de  Banco  de  
Dados”.  6a.  Edição,  Addison-­Wesley,  2011.
3. Ramakrishnan,  R.  “Sistemas  de  Gerenciamento   de  Bancos  
de  Dados”,  3ª  Edition,  McGraw-­Hill,  2008.
4. Garcia-­Molina,  H.,  Ullman,  Jeffrey  D.,  Widom,  Jennifer.  
“Implementação   de  Sistemas  de  Bancos  de  Dados”.  1a.  
Edição,  Editora  Campus,  2001.
5. O’Neil,  Patrick.,  O’Neil,  Elizabeth.  “Database:  Principles,  
Programming   and  Performance”.  Second  Edition,  IE-­
ELSEVIER  ,  2001.
♥ José  Maria  Monteiro Banco  de  Dados 3
Sistemas de Informação e Banco de Dados
-­ Bibliografia   Recomendada-­

Computer Science Department College Of Computing Computer Science Department


Yale University Georgia Institute Of Technology
Wisconsin University

Department of Computer Science


Computer Science Department
University of Massachusetts at Boston
Stanford University

♥ José  Maria  Monteiro Banco  de  Dados 4


Fundamentos de Bancos de Dados

-­ Guia  Bibliográfico  por  Tópicos  -­


Tópico Livro Capítulo/Seção
1.  Tecnologia  de   Silberschatz,  A.,  Korth,  H.,  Sudarshan,  S.   1
Banco  de  Dados “Sistemas  de  Banco  de  Dados”,  3ª  Edição,  
Makron  Books
Garcia-­Molina,  H.,  Ullman,  Jeffrey  D.,  Widom,   1
Jennifer.  “Implementação  de  Sistemas  de  
Bancos  de  Dados”.  Editora  Campus,  2001

O’Neil,  Patrick,  O’Neil,  Elizabeth.  “Database:   1


Principles,  Programming  and  Performance”.  
Second  Edition,  Morgan  Kaufmann

Elsmari,  R.,  Navathe,  Shamkant  B.   1,  2


“Fundamentals  of  Database  Systems”.  Third  
Edition,  Addison-­Wesley

♥ José  Maria  Monteiro Banco  de  Dados 5


Fundamentos de Bancos de Dados

-­ Guia  Bibliográfico  por  Tópicos  -­


Tópico Livro Capítulo/Seção
2.  Modelo   Silberschatz,  A.,  Korth,  H.,  Sudarshan,  S.   3
Relacional  (MR) “Sistemas  de  Banco  de  Dados”,  3ª  Edição,  
Makron  Books
Garcia-­Molina,  H.,  Ullman,  Jeffrey  D.,  Widom,   1.4,  6.1
Jennifer.  “Implementação  de  Sistemas  de  
Bancos  de  Dados”.  Editora  Campus,  2001

O’Neil,  Patrick,  O’Neil,  Elizabeth.  “Database:   2


Principles,  Programming  and  Performance”.  
Second  Edition,  Morgan  Kaufmann

Elsmari,  R.,  Navathe,  Shamkant  B.   7,  9.3


“Fundamentals  of  Database  Systems”.  Third  
Edition,  Addison-­Wesley

♥ José  Maria  Monteiro Banco  de  Dados 6


Fundamentos de Bancos de Dados

-­ Guia  Bibliográfico  por  Tópicos  -­


Tópico Livro Capítulo/Seção
3.  Modelo  Entidade-­ Silberschatz,  A.,  Korth,  H.,  Sudarshan,  S.   2
Relacionamento   “Sistemas  de  Banco  de  Dados”,  3ª  Edição,  
(MER) Makron  Books

Garcia-­Molina,  H.,  Ullman,  Jeffrey  D.,  Widom,   Nenhum  capítulo  


Jennifer.  “Implementação  de  Sistemas  de   específico  para  o  
Bancos  de  Dados”.  Editora  Campus,  2001 tópico

O’Neil,  Patrick,  O’Neil,  Elizabeth.  “Database:   6.1,  6.2,  6.3,  6.4


Principles,  Programming  and  Performance”.  
Second  Edition,  Morgan  Kaufmann

Elsmari,  R.,  Navathe,  Shamkant  B.   3,  4


“Fundamentals  of  Database  Systems”.  Third  
Edition,  Addison-­Wesley

♥ José  Maria  Monteiro Banco  de  Dados 7


Fundamentos de Bancos de Dados

-­ Guia  Bibliográfico  por  Tópicos  -­


Tópico Livro Capítulo/Seção
4.  Projeto  de  Banco   Silberschatz,  A.,  Korth,  H.,  Sudarshan,  S.   2.8
de  Dados   “Sistemas  de  Banco  de  Dados”,  3ª  Edição,  
Relacionais Makron  Books
Garcia-­Molina,  H.,  Ullman,  Jeffrey  D.,  Widom,   Nenhum  capítulo  
Jennifer.  “Implementação  de  Sistemas  de   específico  para  o  
Bancos  de  Dados”.  Editora  Campus,  2001 tópico

O’Neil,  Patrick,  O’Neil,  Elizabeth.  “Database:   Nenhum  capítulo  


Principles,  Programming  and  Performance”.   específico  para  o  
Second  Edition,  Morgan  Kaufmann tópico

Elsmari,  R.,  Navathe,  Shamkant  B.   9


“Fundamentals  of  Database  Systems”.  Third  
Edition,  Addison-­Wesley

♥ José  Maria  Monteiro Banco  de  Dados 8


Fundamentos de Bancos de Dados

-­ Guia  Bibliográfico  por  Tópicos  -­


Tópico Livro Capítulo/Seção
5.  SQL Silberschatz,  A.,  Korth,  H.,  Sudarshan,  S.   4
“Sistemas  de  Banco  de  Dados”,  3ª  Edição,  
Makron  Books
Garcia-­Molina,  H.,  Ullman,  Jeffrey  D.,  Widom,   1.4
Jennifer.  “Implementação  de  Sistemas  de  
Bancos  de  Dados”.  Editora  Campus,  2001

O’Neil,  Patrick,  O’Neil,  Elizabeth.  “Database:   3


Principles,  Programming  and  Performance”.  
Second  Edition,  Morgan  Kaufmann

Elsmari,  R.,  Navathe,  Shamkant  B.   8,  18.1


“Fundamentals  of  Database  Systems”.  Third  
Edition,  Addison-­Wesley

♥ José  Maria  Monteiro Banco  de  Dados 9


Fundamentos de Bancos de Dados

-­ Guia  Bibliográfico  por  Tópicos  -­


Tópico Livro Capítulo/Seção
6.  Acesso  à  Banco   Silberschatz,  A.,  Korth,  H.,  Sudarshan,  S.   4.12
de  Dados “Sistemas  de  Banco  de  Dados”,  3ª  Edição,  
Makron  Books
Garcia-­Molina,  H.,  Ullman,  Jeffrey  D.,  Widom,   Nenhum  capítulo  
Jennifer.  “Implementação  de  Sistemas  de   específico  para  o  
Bancos  de  Dados”.  Editora  Campus,  2001 tópico

O’Neil,  Patrick,  O’Neil,  Elizabeth.  “Database:   5


Principles,  Programming  and  Performance”.  
Second  Edition,  Morgan  Kaufmann

Elsmari,  R.,  Navathe,  Shamkant  B.   Nenhum  capítulo  


“Fundamentals  of  Database  Systems”.  Third   específico  para  o  
Edition,  Addison-­Wesley tópico

♥ José  Maria  Monteiro Banco  de  Dados 10


Fundamentos de Bancos de Dados

-­ Guia  Bibliográfico  por  Tópicos  -­


Tópico Livro Capítulo/Seção
7.  Restrições  de   Silberschatz,  A.,  Korth,  H.,  Sudarshan,  S.   6
Integridade “Sistemas  de  Banco  de  Dados”,  3ª  Edição,  
Makron  Books
Garcia-­Molina,  H.,  Ullman,  Jeffrey  D.,  Widom,   Nenhum  capítulo  
Jennifer.  “Implementação  de  Sistemas  de   específico  para  o  
Bancos  de  Dados”.  Editora  Campus,  2001 tópico

O’Neil,  Patrick,  O’Neil,  Elizabeth.  “Database:   7


Principles,  Programming  and  Performance”.  
Second  Edition,  Morgan  Kaufmann

Elsmari,  R.,  Navathe,  Shamkant  B.   7.2,  7.3  


“Fundamentals  of  Database  Systems”.  Third  
Edition,  Addison-­Wesley

♥ José  Maria  Monteiro Banco  de  Dados 11


Introdução aos Sistemas de Bancos de Dados
- Histórico -

• Processamento  de  arquivo  (anos  60  e  70)


• Paradigma  de  processamento  de  dados
• Cada  aplicação
• Definir  e  manter  seus  próprios  dados
Programa  1 Programa  2 Programa  3

Descrição   Descrição   Descrição  


de  dados de  dados de  dados

Arquivo  A

Arquivo  B

Arquivo  C

♥ José  Maria  Monteiro Banco  de  Dados 12


Introdução aos Sistemas de Bancos de Dados
- Histórico -

• Dados  em  Arquivos


☹ Redundância   e  inconsistência
☹ Dificuldade  de  acesso  aos  dados
☹ Isolamento  dos  dados
☹ Problemas  de  integridade
☹ Problemas  de  atomicidade
☹ Anomalias  de  acesso  concorrente
☹ Problemas  de  segurança

♥ José  Maria  Monteiro Banco  de  Dados 13


Introdução aos Sistemas de Bancos de Dados
• Tecnologia  de  banco  de  dados
• Definição  e  gerenciamento  centralizado  de  dados
• Independência  de  dados
• Alteração  na  organização  lógica  ou  física  dos  dados  não  
implicar  na  alteração  de  programas
• Eliminar  redundância  de  dados
• Eliminar  inconsistência  de  dados
• Facilitar  acesso  a  dados  através  de  uma  linguagem  de  
consulta
• Evitar  inconsistências  produzidas  pelo  acesso  
concorrente
• Recuperar  estado  consistente  do  dados  após  situação  
de  falha

♥ José  Maria  Monteiro Banco  de  Dados 14


Introdução aos Sistemas de Bancos de Dados
• Tecnologia  de  banco  de  dados
Programa  1 Programa  2 Programa  3

Descrição
de  Dados

Banco  
de    Dados
Sistema  de  Banco  de  Dados
•Conjunto  de  dados  inter-­relacionados  (banco  de  dados)
•Componente  de  software  (SGBD)
•Acesso  e  modificação  dos  dados
Tornar  transparente  como  os  dados  são  
• Garantir  uma  visão  abstrata  dos  dados
armazenados  e  gerenciados
♥ José  Maria  Monteiro Banco  de  Dados 15
Introdução aos Sistemas de Bancos de Dados
- Abstração de Dados -

Sistemas
Usuário tem uma
de
visão abstrata dos
Bancos
dados
de Dados

• Nível  físico:  descreve  como  os  dados  são  armazenados


• Nível  lógico:  descreve  quais  dados  são  armazenados  e  os  
relacionamentos  entre  eles
• Nível  de  visualização:  descreve  partes  de  interesse  do  
usuário/aplicação
♥ José  Maria  Monteiro Banco  de  Dados 16
Introdução aos Sistemas de Bancos de Dados
- Arquitetura em Três Camadas -

Esquema   Esquema   Esquema  


Externo  1 Externo  2 Externo  n
Camada
Externa

Esquema  Conceitual DBMS


Camada
Conceitual

Camada
Esquema  Interno
Interna  (Física) (Banco  de  Dados  armazenado)
♥ José  Maria  Monteiro Banco  de  Dados 17
Introdução aos Sistemas de Bancos de Dados
- Arquitetura em Três Camadas -
• Esquema  Interno  -­ Camada  Interna
• Descreve  como  os  dados  estão  fisicamente  armazenados
• Exemplo
• Organização  de  arquivo
• seqüencial-­indexado,  hashing,  seqüencial,  heap
• Alocação  em  disco
• Contígua,  lista  encadeada,  lista  encadeada  utilizando  índice
• Tipo  de  registro
• Fixo,  variável
• Esquema  Conceitual  -­ Camada  Conceitual
• Descreve  quais  dados  estão  armazenados  no  banco  de  dados
• Descreve  os  relacionamentos  entre  os  dados  armazenados
• Esquema    Externo  -­ Camada  Externa
• Descreve  parte  do  banco  de  dados
• Simplificar  a  visão  do  usuário
• “Ver”  só  o  que  interessa
• Segurança
♥ José  Maria  Monteiro Banco  de  Dados 18
Introdução aos Sistemas de Bancos de Dados
- Ocorrências e Esquemas -

• Ocorrências (instâncias)
• Coleção  de  informações  armazenadas  na  base
• Altamente  mutáveis

• Esquemas
• Projeto  ou  estrutura  da  base  -­ definição
• Um  esquema  para  cada  nível  de  abstração
• Esquema  físico  -­ nível  interno
• Esquema  lógico  -­ nível  conceitual
• Sub-­esquemas  ou  esquemas  de  visualização  -­ nível  
externo

♥ José  Maria  Monteiro Banco  de  Dados 19


Introdução aos Sistemas de Bancos de Dados
- Independência dos Dados -

Habilidade de modificar
Habilidade de modificar
o esquema lógico sem
o esquema físico sem
causar redefinição dos
causar redefinição dos
programas de aplicação
programas de aplicação
Modificações são
Modificações são
necessárias quando a
necessárias para
estrutura lógica da
melhorar desempenho
base é alterada

♥ José  Maria  Monteiro Banco  de  Dados 20


Introdução aos Sistemas de Bancos de Dados
- Definição-

• Sistema  de  Bancos  de  Dados  (SBD  ou  DBS)


• Banco  de  Dados  (BD  ou  DB)
• Conjunto  de  dados  relacionados
• Sistema  Gerenciador  de  Bancos  de  Dados (SGBD  ou  DBMS)
• Componente  de  software  
• Acesso
• Controle  de  Concorrência
• Recuperação
• Armazenamento

♥ José  Maria  Monteiro Banco  de  Dados 21


Introdução aos Sistemas de Bancos de Dados
- Linguagem de Banco de Dados -
• Finalidade
• garantir  a  especificação  do  esquema  de  um  banco  de  dados
• permitir  consultas  e  atualizações  sobre  o  banco  de  dados
• Componentes  
• DDL  -­ Data  Description  Language
• Utilizada  para  especificar  o  esquema  de  um  BD
• Expressões  da  DDL  
• Interpretadas  (compilados)  gerando  a  especificação  de  um  
conjunto  de  tabelas
• A  especificação  das  tabelas  é  armazenada  no  catálogo  do  
banco  de  dados
• Exemplo  (SQL)
create  table  Empregado
(matr  integer  not  null,
nome  varchar(35),
salário  real,
primary  key(matr))  

♥ José  Maria  Monteiro Banco  de  Dados 22


Introdução aos Sistemas de Bancos de Dados
- Linguagem de Banco de Dados -
• Componentes  (cont.)
• DML  -­ Data  Manipulation  Language
DML
• Utilizada  para  permitir  
Procedural  
• Consultas  sobre   u m  BD (Procedural  ou  Procedimental)
-­ requer  a  especificação  de  quais    dados  
• Exemplo  (devem  ser  
SQL) acessados  e  como  devem  ser  
select  nomeacessados
Nonprocedural  (Não  Procedural  ou  Não  Procedimental)
from  Empregado
-­ requer  somente  a  especificação  de  quais  
where  salario  >  7000
dados    devem  ser  acessados
• Inserções  em  uma  tabela  
• Exemplo   (SQL)
PS:  As  linguagens  utilizadas  na  prática  incluem  elementos  das  
abordagens   procedural  e  não  procedural
insert  into  Empregado   values(123,  “Bárbara”,  5000.00)
(Ex:  
• Remoções   SQL,  segundo   Silberschatz)
em  uma  tabela
• Exemplo  (SQL)
delete  from  Empregado
where  matr=14
• Atualizar  valores  de  atributos  de  uma  tabela
• Exemplo  (SQL)
update  Empregado  set  salário=salário∗1.15
where  salário<1500.00

♥ José  Maria  Monteiro Banco  de  Dados 23


Introdução aos Sistemas de Bancos de Dados
- Definição-
• SGBD
• Processador   de  Consultas   +  Sistema  de  Armazenamento
• Processador   de  Consultas
• Compilador   DML
• Analisa   sintaticamente  e  semanticamente  comandos  DML  
expressos  em  uma  linguagem  de  consulta  (ex.  SQL)
• Traduz  estes  comandos  para  uma  das  formas  de  representação  
interna  de  consultas  (ex.  álgebra  relacional)
• Pré-­Compilador   DML
• Traduz  comandos  DML  em  chamadas  a  procedimentos  (rotinas)  na  
linguagem   hospedeira
• Interpretador   DDL
• Interpreta  comandos  DDL  e  os  armazena  no  catálogo  
• Tabelas   contendo  meta-­dados
• Descrição   do  banco  de  dados ➱ Esquema  
• Mecanismo   de  Consultas
• Responsável   pela  otimização   e  geração  de  planos   de  execução  de  
consultas

♥ José  Maria  Monteiro Banco  de  Dados 24


Introdução aos Sistemas de Bancos de Dados
- Definição-
• SGBD
• Sistema  de  Armazenamento
• Gerenciador  de  Transações
• Controle  de  concorrência  
• Recuperação  do  banco  de  dados  após  falhas
• Gerenciador  de  Buffer
• Responsável  para  recuperar  objetos  em  disco  e  carregá-­los  na  
memória  principal  em  forma  de  páginas
• SGBD  possui  uma  área  de  buffer  em  memória  principal
• Mapeamento:      Bloco
• (disco)                                    (buffer  do  SGBD)
Página
• Definição  da  política  de  alocação  do  buffer
• MRU,  LRU,  FIFO,  etc

• Gerenciador  de  Arquivo (File  System)


• Responsável  pelo  armazenamento  físico  em  disco
• Gerencia  a  alocação  de  espaço  em  disco  
♥ José  Maria  Monteiro Banco  de  Dados 25
Introdução aos Sistemas de Bancos de Dados
- Definição-
• BD
• Arquivos  de  dados  +  Índices  +  Catálogo
• Arquivos  de  dados
• Armazena  os  dados
• Índices
• Estruturas  de  índices  para  os  arquivos  de  dados
• Catálogo
• Armazena  esquema  do  banco  de  dados  (meta-­dados)
• Nomes  das  tabelas
• Atributos  de  cada  tabela
• Definição  de  índice  para  uma  tabela,  etc…
• Armazena  informações  estatísticas
• Exemplo
• Cardinalidade  de  uma  tabela
• Utilizadas  na  otimização  de  consultas

♥ José  Maria  Monteiro Banco  de  Dados 26


Introdução aos Sistemas de Bancos de Dados
- Arquitetura de SGBD’s-
Programadores Usuário experiente DBA

Programa Aplicativo Consulta Esquema

Pre-­compilador   Compilador   Interpretador  


DML DML DDL
Processador
de  Consultas
Mecanismo  
de  Consultas

Gerenciador   Gerenciador  
de  Buffer de  Transações
Sistema  de  
Armazenamento
Gerenciador  
de  Arquivo
DBMS

Código  Objeto
índices Arquivos
Catálogo
DB
aplicativos de  dados
DBS
♥ José  Maria  Monteiro Banco  de  Dados 27
Introdução aos Sistemas de Bancos de Dados
- O Administrador de Bancos de Dados (DBA) -

• Definição  do  esquema  conceitual


• Definição  dos  métodos  de  acesso  e  estruturas  
de  armazenamento
• Manutenção  do  esquema  e  da  organização  
física  dos  dados
• Definição  da  política  de  acesso  aos  dados
• Especificação  de  restrições  de  integridade

♥ José  Maria  Monteiro Banco  de  Dados 28


Introdução aos Sistemas de Bancos de Dados
- Usuários de Bancos de Dados -

• Programadores   de  aplicação

• Usuários  sofisticados

• Usuários  especializados  em  aplicações  não-­


convencionais

• Usuários  de  programas  de  aplicação

♥ José  Maria  Monteiro Banco  de  Dados 29


Introdução aos Sistemas de Bancos de Dados
- Modelo de Dados-

Conjunto de ferramentas conceituais para descrever dados,


seus relacionamentos, sua semântica e restrições de consistência

• Modelos  lógicos  baseados  em  objetos


• Modelo  entidade-­relacionamento
• Modelo  orientado  a  objeto
• Modelos  lógicos  baseados  em  registros
• Modelo  relacional
• Modelo  Codasyl  (rede)
• Modelo  hierárquico
• Modelos  físicos  de  dados

♥ José  Maria  Monteiro Banco  de  Dados 30


Introdução aos Sistemas de Bancos de Dados
- Modelo de Dados-
• Um  modelo  de  dados  é  definido  por  três  componentes
• Uma  coleção  de  tipos  de  estrutura  de  dados
• blocos  de  construção  do  banco  de  dados
• Uma  coleção  de  operadores
• Podem  ser  aplicados  a  qualquer  instância  dos  tipos  de  
dados  definidos  em  1
• Uma  coleção  de  regras  de  integridade
• Definem  o  conjunto  de  estados  consistentes  do  banco  de  
dados
• Definem  o  conjunto  de  transições  consistentes  de  estado  
do  banco  de  dados
• Representar  dados  do  mundo  real
• Capturar  a  semântica  e  incorporá-­la  em  um  banco  de  dados
• Exemplo
• Através  do  modelo  relacional  representar  os  dados  de  uma  
universidade

♥ José  Maria  Monteiro Banco  de  Dados 31


Introdução aos Sistemas de Bancos de Dados
- Classificação de Sistemas de Bancos de Dados -

• Classificação  de  SBDs  -­ Modelo  de  Dados


• Sistema  de  Banco  de  Dados  Relacional
• Modelo  Relacional
• Tipo  primitivo  de  dados
• Relação  (tabela)
• Conjunto  de  tuplas  (linhas)
• Conjunto  de  Operadores
• Álgebra  Relacional
• Cálculo  Relacional
• Restrições  de  integridade
• Integridade  de  chave  primária
• Integridade  referencial

♥ José  Maria  Monteiro Banco  de  Dados 32


Introdução aos Sistemas de Bancos de Dados
- Classificação de Sistemas de Bancos de Dados -

• Classificação  de  SBDs  -­ Modelo  de  Dados


• Sistema  de  Banco  de  Dados  Orientado  a  Objeto
• Modelo  orientado  a  objeto
• Tipos  primitivos
• Objeto,  conjunto,  lista,  string,  integer,  real
• Restrições  de  integridade
• Unicidade  de  Objeto  e  identidade  de  objeto
• Hierarquia  de  classes
• Herança
• Uma  classe  herda  as  propriedades  da  superclasse
• Comportamento  de  objetos  de  uma  classe  
• Método
• Sistema  de  Banco  de  Dados  Objeto-­Relacional
• Modelo  relacional  +  Modelo  OO

♥ José  Maria  Monteiro Banco  de  Dados 33


Introdução aos Sistemas de Bancos de Dados
- Classificação de Sistemas de Bancos de Dados -
• Classificação  de  SBDs  -­ Arquitetura
• Sistema  de  Banco  de  Dados  Centralizados
• Os  componentes  do  SBD  residem  no  mesmo  host
• Sistema  de  Banco  de  Dados  Cliente-­Servidor
• Distribuição  de  funções do  SGBD  entre  clientes  e  servidor
• Sistema  de  Banco  de  Dados  Paralelos
• Distribuição  do  controle de  funções  do  DBMS  entre  diversos    
sistemas  computacionais
• Sistema  de  Banco  de  Dados  Distribuídos
• Distribuição    de  dados através  de  diversos  SBDs  homogêneos
• Sistema  de  Banco  de  Dados  Heterogêneos
• Distribuição  de  dados através  de  SBDs  heterogêneos  e
• autônomos  
• Sistema  de  banco  de  dados  múltiplos  (MDBS)
• Sistema  de  banco  de  dados  federados
• Sistema  de  Banco  de  Dados  Móvel
• Distribuição  de  funções do  SGBD  entre  clientes  e  servidor  em  
ambientes  de  computação  móvel
♥ José  Maria  Monteiro Banco  de  Dados 34
Introdução aos Sistemas de Bancos de Dados
- Gerenciamento de Transações -

Coleção de operações que realizam uma única


função lógica em uma aplicação de banco de dados

• Controle  de  acesso  concorrente


• Isolamento  entre  transações  concorrentes
• Tolerância  a  falhas
• Atomicidade  das  operações
• Persistência  dos  resultados  das  transações  bem  
sucedidas

♥ José  Maria  Monteiro Banco  de  Dados 35


Introdução aos Sistemas de Bancos de Dados
- Controle de Concorrência -
• Concorrência  em  um  ambiente  multiusuário
• Entrelaçamento  (interleaving)  de  operações
• Operações  de  um  programa  podem  ser  executadas
• entre  duas  operações  de  outro  programa
• Alterações  inconsistentes  no  banco  de  dados
• DBMS  precisa  monitorar  e  controlar  a  execução
• concorrente  de  programas
• Controle  de  Concorrência  

♥ José  Maria  Monteiro Banco  de  Dados 36


Sumário
1. Introdução  aos  Sistemas  de  Banco  de  Dados


2. O  Modelo  Relacional
a. Conceitos  Básicos
b. Modelagem   de  Dados
c. Álgebra  Relacional
d. Cálculo  Relacional  de  Tupla
3. Modelo  de  Entidades  e  Relacionamentos  (MER)
4. Projeto  de  Bancos  de  Dados  Relacionais
5. A  Linguagem  SQL
6. Acesso  a  Bancos  de  Dados
7. Restrições  de  Integridade
8. Técnicas  Avançadas  de  Projeto  de  BD’s  Relacionais  
(Normalização)

♥ José  Maria  Monteiro Banco  de  Dados 37


2. Modelo Relacional
- Introdução -

• Proposto  em  1970  por  Codd


• IBM
• Consolidou-­se  como  principal  
modelo  de  dados  para  aplicações  
comerciais
• Modelo  de  dados  para  Bancos  de  
Dados  Relacionais
• SBDs  relacionais

♥ José  Maria  Monteiro Banco  de  Dados 38


2. Modelo Relacional
- Introdução -
• 1970 – 1972
Edgar Frank Codd propõe o modelo de dados relacional, que se tornou um marco
em como pensar em banco de dados. Ele desconectou a estrutura lógica do banco
de dados do método de armazenamento físico. Este sistema se tornou padrão
desde então.
• Década de 70
Dois principais protótipos de sistema relacional foram
desenvolvidos entre 1974 e 1977 e demonstram um ótimo
exemplo de como a teoria conduz a boas práticas.
Ingres: Desenvolvido pela UCB. Que no final das contas
serviu como base para Ingres, Sybase, MS SQL Server,etc.
Utilizava QUEL como linguagem de consulta.
System R: Desenvolvido pela IBM San Jose, serviu de base
para o IBM SQL/DS, IBM DB2, Oracle, todas os BDs da HP, Dr.  Edgar  Frank  Codd,  o  pai  
do  m odelo  relacional.
Tandem's Non-­Stop SQL. Utilizava SEQUEL como linguagem
Conheça  mais  o  trabalho  do  Dr.  
de consulta. Codd  em
www.informatik.uni-­
O  termo  Sistema  de  Gerenciamento  de  Banco  de  Dados  Relacional   trier.de/%7Eley/db/about/codd.
(SGBDR  – RDBMS  em  inglês)  foi  definido  durante  este  período. html

♥ José  Maria  Monteiro Banco  de  Dados 39


2. Modelo Relacional
- Estrutura de um Banco de Dados Relacional -

• Um  banco   de  dados  relacional  consiste


• Um  conjunto  de  tabelas  (ou  relações)
• Relação  (Tabela)   Estudante
matr nome cpf end dt-nasc
• Conjunto  de  linhas 1 Gal 231 R X, 50 20000102
• Tuplas 2 Gil 451 R Y, 1 19991001
3 Sá 472 R V, 502 19990510
(ou  registros) 4 Dé 549 R Z, 501 19980601
5 Jô 465 R A, 501 20000203

• Uma  relação  é  definida  como  um  conjunto  de  tuplas


• Elementos  de  um  conjunto  são  distintos  entre  si
OBS
Na  prática,  alguns  SGBDs  comerciais  permitem  
• Não  existem  elementos  repetidos
que  as  tabelas  tenham  linhas  duplicadas.

• Linhas
• Conjunto  de  colunas  (Atributos ou  campos)
♥ José  Maria  Monteiro Banco  de  Dados 40
2. Modelo Relacional
- Conceitos Básicos -

• Domínio
• Conjunto  de  valores  permitidos  para  um  atributo
• Valores  são  atômicos  (indivisíveis)  e  monovalorados
• O  valor  nulo significa  valor  desconhecido  ou  inexistente
• Exemplo:  Domínio  do  atributo  matrícula
• Conjunto  de  todos  os  valores  válidos  de  matrícula
• dom(A) denota  o  domínio  do  atributo  A
• Tipo  de  dados  e  formato
• Utilizados  para  especificar  um  domínio  
• Exemplo:  telefone
• tipo  char  com  formato  (ddd)ddd-­dddd
• dom(telefone)  representa  o  conjunto  de  valores  atômicos  
válidos  para  o  tipo  char  e    formato  especificado

♥ José  Maria  Monteiro Banco  de  Dados 41


2. Modelo Relacional
- Conceitos Básicos -

• Esquema  de  relação  (ou  Intenção)


• Utilizado  para  descrever  uma  relação  
• Representado  por  R(A1:tipo,  A2:tipo,  …,  An:tipo),  onde
• R  é  nome  de  uma  relação  e
• A1,  A2,  …,  An  uma  lista  de  atributos
• Tipo:  tipo  de  dados  que  especifica  um  determinado  
domínio
• O  atributo  Ai é  um  papel  de  D  no  esquema  de  R
• Grau  de  R  (ou  aridade)
• Número  de  atributos  no  esquema  R

♥ José  Maria  Monteiro Banco  de  Dados 42


2. Modelo Relacional
- Conceitos Básicos -

• Instância  de  Relação  (ou  Extensão)


• Seja  o  esquema  de  relação  R(A1:tipo,  A2:tipo,  …,  An:tipo)
• Um  instância  de  relação  (ou  relação)  para  este  esquema  
• r(R)={t1,  t2,  …,  tk}
• Cada  ti representa  uma  n-­tupla  de  n  valores                                  
<v1,  v2,  …,  vn>,  onde  cada  vj ∈ dom(Aj),  0<j≤n
• r  representa  a  extensão  para  R
• r  contém  os  dados
• R  descreve  os  dados  armazenados  em  r
• A  cardinalidade  de  uma  instância  de  relação  é  o  número  de  
tuplas  que  ela  contém

♥ José  Maria  Monteiro Banco  de  Dados 43


2. Modelo Relacional
- Conceitos Básicos -

• Relação
• Seja  r  uma  relação  com  esquema  R
• r(R)  ⊆ dom(A1)  x  dom(A2)  x  dom(A3)  x  …  x  dom(An)
• r(R)  é  um  subconjunto  do  produto  cartesiano  dos  
domínios  dos  atributos  que  definem  R  
• cada  tupla  de  r(R)  relaciona  valores  dos  vários  domínios
• r  é  uma  relação  (matemática)
• r(R)  representa  um  conjunto  de  tuplas

♥ José  Maria  Monteiro Banco  de  Dados 44


2. Modelo Relacional
- Conceitos Básicos -

• Instância  de  Relação  (ou  Extensão)


• Seja  o  esquema  de  relação  R(SEXO:char,  EST_CIVEL:string)
• dom(SEXO)={‘M’,’F’}  ?
• Dom(EST_CIVIL)={‘Casado’,  ‘Solteiro’,  ‘Divorciado’,  ‘Viúvo’}?

SEXO EST_CIVIL
M Casado
M Solteiro
M Divorciado
M Viúvo
F Casado
F Solteiro
F Divorciado
F Viúvo

♥ José  Maria  Monteiro Banco  de  Dados 45


2. Modelo Relacional
- Conceitos Básicos -

• Esquema  de  um  banco  de  dados  relacional  


• Conjunto  de  esquemas  de  relação  mais  um  conjunto  de  restrições  de  
integridade  IC
• S={R1,  R2,  …,  Rn}  e  um  conjunto  de  restrições  de  integridade  IC
• Instância  de  um  banco  de  dados  relacional  
• Seja  o  esquema  S
• Uma  instância  db  para  o  esquema  S
• db={r1,  r2,  …,  rn}  ,  onde
• Cada  ri é  uma  instância  de  relação  de  Ri e
• Cada  ri satisfaz  as  restrições  de  integridade  especificadas  em  IC
• Exercício
• Considere  uma  banco  de  dados  relacional  DBR  com  as  relações  
Empregado  e  Departamento
• Construa  um  esquema  S  e  mostre  uma  possível  instância  para  DBR

♥ José  Maria  Monteiro Banco  de  Dados 46


2. Modelo Relacional
- Conceitos Básicos -

• Restrições  do  modelo  relacional


• Restrição  de  domínio
• O  valor  de  cada  atributo  A  
• Tem  que  ser  um  valor  atômico  de  dom(A)
• Restrição  de  Chave
• Tuplas  de  uma  relação  têm  que  serem  distintas  entre  si
• Duas  tuplas  em  uma  relação  não  podem  ter  a  mesma  
combinação  de  valores  para  seus  atributos
• Geralmente  existe  um  subconjunto  SC  de  atributos  em  um  
esquema  de  relação  R
• Todas  as  tuplas  de  qualquer  instância  r(R)    apresentam  uma  
combinação  diferente  de  valores  para  os  atributos  de  SC
• ∀ ti,  tj ∈ r  0<i,j≤n,  i≠j  :  ti[SC]  ≠ tj[SC]
• Super  chave  (superkey)

♥ José  Maria  Monteiro Banco  de  Dados 47


2. Modelo Relacional
- Conceitos Básicos -

• Restrições  do  modelo  relacional  (cont.)


• Restrição  de  Chave  (cont.)
• Super  chave  (superkey)
• Conjunto  de  um  ou  mais  atributos  que,  tomados  coletivamente,  nos  
permite  identificar  unicamente  uma  tupla  na  relação
• Pode  apresentar  atributos  redundantes
• Empregado(matr,nome,ender,cpf)
• {matr,  nome  e  cpf}  formam  uma  superchave?
• {matr  e  nome}  formam  uma  superchave?
• {cpf  e  nome}  formam  uma  superchave?
• {matr  e  cpf}  formam  uma  superchave?
• {matr}  é  superchave?
• {cpf}  é  superchave}?
• Se  K  é  uma  superchave,  então  o  mesmo  ocorre  com  qualquer  
superconjunto  de  K

♥ José  Maria  Monteiro Banco  de  Dados 48


2. Modelo Relacional
- Conceitos Básicos -

• Restrições  do  modelo  relacional  (cont.)


• Restrição  de  Chave  (cont.)
• Chave  (key)  ou  Chave  candidata  (candidate  key)
• Super  chave  sem  atributos  redundantes
• Empregado(matr,nome,ender,cpf)
• {matr,  nome  e  cpf}  formam  uma  chave?
• {matr  e  nome}  formam  uma  chave?
• {cpf  e  nome}  formam  uma  chave?
• {matr  e  cpf}  formam  uma  chave?
• {matr}  é  superchave?  {cpf}  é  superchave}?
• Chave  primária  (primary  key)
• Chave  candidata  escolhida  como  chave  da  relação
• Identifica  tuplas  em  uma  relação
• Garante  a  unicidade  de  uma  tupla  na  relação
• Em  geral,  representamos  a  PK  sublinhada  e  antes  dos  demais  atributos
• A  maioria  dos  SGBDs  ordena  fisicamente  uma  tabela  pela  sua  PK.

♥ José  Maria  Monteiro Banco  de  Dados 49


2. Modelo Relacional
- Conceitos Básicos -

• Restrições  do  modelo  relacional  (cont.)


• Restrição  de  Integridade  de  Entidade  (ou  Existencial)
• Especifica  que  nenhuma  chave  primária  pode  ter  valor  
nulo  (null)
• Garante  que  a  chave  primária  identifique  tuplas  em  uma  
relação

♥ José  Maria  Monteiro Banco  de  Dados 50


2. Modelo Relacional
- Conceitos Básicos -

• Restrições  do  modelo  relacional  (cont.)


• Restrição  de  Integridade  Referencial
• Sejam  dois  esquemas  de  relação  R  e  S
• Um  conjunto  de  atributos  FK  de  um  esquema  de  relação  
R  é  chave  estrangeira  (foreign  key) em  R  se
• Os  atributos  em  FK  têm  o  mesmo  domínio  que  a  chave  
primária  PK  de  um  outro  esquema  de  relação  S,  e
• Um  valor  de  FK  em  uma  tupla  t1 de  r(R)  
• Ou  ocorre  em  como  valor  de  PK  para  uma  tupla    t2  em  s(S)
• t1[FK]  =  t2[PK]  
t1 referencia   a  tupla  t2
• ou  é  nulo

♥ José  Maria  Monteiro Banco  de  Dados 51


2. Modelo Relacional
- Conceitos Básicos -

• Restrições  do  modelo  relacional  (cont.)


• Restrição  de  Integridade  Referencial  (cont.)
• Exemplo:  Considere  o  seguinte  esquema  de  banco  de  
dados
• Departamento(codigo,  descricao)
• Empregado(matr,  nome,  lotação)
• Se  lotação  referenciar  codigo,  então  lotação  é  chave  
estrangeira  em  Empregado
• Deve  ser  garantido  que  o  valor  de  lotação  ou  seja  nulo  ou  
referencie  um  valor  existente  em  Departamento
• Integridade  referencial
• Atualmente  é  garantida  automaticamente  pelos  SGBD  
existente  no  mercado

♥ José  Maria  Monteiro Banco  de  Dados 52


2. Modelo Relacional
- Conceitos Básicos -

• Restrições  do  modelo  relacional  (cont.)


• Restrição  de  Integridade  Referencial  (cont.)
• Exemplo:  Considere  o  seguinte  esquema  de  banco  de  
dados
• Departamento(codigo,  descricao)
• Empregado(matr,  nome)

Departamento Empregado

codigo descricao matr nome Como  saber  em  que  


1 RH 123 Gal
departamento  um  
2 VENDAS 124 Gil
determinado  
3 ADM 125 Sá
4 TIC 126 Dé
empregado  
127 Ana trabalha???

♥ José  Maria  Monteiro Banco  de  Dados 53


2. Modelo Relacional
- Conceitos Básicos -

• Restrições  do  modelo  relacional  (cont.)


• Restrição  de  Integridade  Referencial  (cont.)
• Exemplo:  Considere  o  seguinte  esquema  de  banco  de  
dados
• Departamento(codigo,  descricao)
• Empregado(matr,  nome,  lotação)
Chave  Estrangeira  (Foreign  Key)
Departamento Empregado

codigo descricao matr nome lotacao


1 RH 123 Gal 1
2 VENDAS 124 Gil 3
3 ADM 125 Sá 1
4 TIC 126 Dé 2
127 Ana null

♥ José  Maria  Monteiro Banco  de  Dados 54


2. Modelo Relacional
- Conceitos Básicos -

• Restrições   do  modelo   relacional  (cont.)


• Restrição   de  Integridade   Referencial   (cont.)
• Exemplo:  Considere   o  seguinte   esquema   de  banco   de  dados
• Departamento(coigo,   descricao,   ender)
• Empregado(matr,   nome,  ender,  cpf,  lotação)

Create  table  Departamento


(codigo  integer  not  null, Create  table  Empregado
descricao            varchar(30)  not  null, (matr  integer  not  null,
ender                      varchar(30), nome                      varchar(30)  not  null,
ender                      varchar(30),
primary  key  (codigo)) cpf                                integer                not  null,
lotação                  integer                not  null,
primary  key  (matr),
unique  key  (cpf),
foreign  key  (lotação)  references
Departamento  on  delete  cascade)

♥ José  Maria  Monteiro Banco  de  Dados 55


2. Modelo Relacional
- Conceitos Básicos -

• Outras  restrições  do  modelo  relacional


• Restrição  de  NOT  NULL  (Integridade  de  Vazio)
• Restrição  UNIQUE
• Restrição  de  Asserts  (Asserções  ou  Check)
• Uma asserção é um predicado expressando uma
condição que queremos que o Banco de Dados sempre
satisfaça.
• Ex:  salario  >=  780,00

CREATE  TABLE  clientes(


cod  int  NOT  NULL  CHECK (Cod  >  0),
nome  varchar(255)  NOT  NULL,
Sobre_nome  varchar(255),
endereco  varchar(255),
cidade  varchar(255)
)

♥ José  Maria  Monteiro Banco  de  Dados 56


2. Modelo Relacional
- Operações de Atualização -

Inclusão
• Insere  t  em  r(R)
• Lista  de  valores
• Pode  violar:
• Restrição  de  domínio
• Restrição  de  chave
• Integridade  existencial
• Integridade  referencial
• Tratamento
• Rejeitar  a  inclusão
• Solicitar  novas  informações

♥ José  Maria  Monteiro Banco  de  Dados 57


2. Modelo Relacional
- Operações de Atualização -

Exclusão

• Exclui  t  em  r(R)


• Condição  sobre  valores  de  atributos
• Pode  violar:
• Integridade  referencial
• Tratamento
• Rejeitar  a  exclusão
• Propagação  em  cascata
• Mudar  fk  em  R’  que  referencia  R

♥ José  Maria  Monteiro Banco  de  Dados 58


2. Modelo Relacional
- Operações de Atualização -

Modificação

• Modifica  t[A1,A2,...,Ak]  em  r(R)


• Condição  sobre  valores  de  atributos
• Alguns  SGBDs:  update=delete+insert
• Violação  +  tratamento:
• Depende  do  atributo  modificado
• Domínio  para  qualquer  atributo
• PK  =  exclusão  +  inclusão
• FK  =  verificar  integridade  referencial

♥ José  Maria  Monteiro Banco  de  Dados 59


2. Modelo Relacional
- Álgebra Relacional -

Coleção  de  operações  usadas  para  manipular  relações

• O  resultado  de  uma  operação


• op(r’)  → r’’
• op({r’,  r’’})  → r’’’
• Operações  básicas:
• Seleção   (σ)
Operações  unárias
• Projeção   (Π)
• União (∪)
• Diferença   (-­) Operações  binárias
• Produto  cartesiano   (x)

♥ José  Maria  Monteiro Banco  de  Dados 60


2. Modelo Relacional
- Álgebra Relacional -

• Classificação  das  operações:


• Operações  relacionais
• Seleção;;  projeção;;  junção
• Operações  de  conjunto
• União;;  interseção;;  diferença;;  produto  cartesiano
• Operações  especiais
• Agrupamento,  contagem,  maior  valor,  menor  valor

♥ José  Maria  Monteiro Banco  de  Dados 61


2. Modelo Relacional
- Álgebra Relacional -

• Linguagem   de  consulta  para  bancos  de  dados  relacionais


• Coleção  de  operadores  sobre  relações
• Desenvolvida  por  Codd
• Linguagem    procedimental  (ou  procedural)

♥ José  Maria  Monteiro Banco  de  Dados 62


2. Modelo Relacional
- Álgebra Relacional [Operações Básicas] -

• Operação  de  seleção


• Seleciona  um  subconjunto  de  tuplas  de  uma  relação
• Com  base  em  um  predicado
• Notação
•σP (r)
• r  é  uma  relação  e  
• P  representa  um  predicado  (condição  de  seleção)  
• Predicados  são  construídos  através  de  átomos
• Átomos
• t[Ai]  θ t[Ak] , t ∈ r  e    Ai e Ak são  atributos  de  r.  
• t[Ai]  θ k,  onde  k  é  uma  constante
• O  símbolo  θ denota  um  operador  de  comparação  
=,  ≠,  >, ≥,  <,  ≤
• Átomos  podem  ser  conectados  por    ∧ (and),  ∨ (or),  ← (not)
• Regras  para  construção  de  fOs
órmulas
atributos devem possuir domínios iguais
• Todo  átomo  é  uma  fórmula
• Se  P1 e   P2 são  fórmulas
• P1 ∧ P2,    P1∨ P2 e  ←P1 também  são  fórmulas

♥ José  Maria  Monteiro Banco  de  Dados 63


2. Modelo Relacional
- Álgebra Relacional [Operações Básicas] -

• Operação  de  seleção  (cont.)


• Exemplo
• Considere  a  relação  Empregado  
• Empregado(matr,  nome,  ender,  cpf,  salário,  lotação)
• Listar  todos  os  empregados  que  ganham  salário  maior  
que  5000
• σsalário>5000 (Empregado)
• Listar  todos  os  empregados  do  departamento  com  código  
igual  a  002  e  que  ganham  salários  maior  que  5000  

• σlotacao=002 ⌃ salario>5000 (Empregado)


• Listar  todos  os  empregados  não  lotados  no  
departamento  com  código  igual  a  002  e  que  ganham  
salários  entre    5000  e  10000
• σlotacao  ≠ 002 ⌃ (salario>5000  ⌃ salario  <  10000) (Empregado)
♥ José  Maria  Monteiro Banco  de  Dados 64
2. Modelo Relacional
- Álgebra Relacional [Operações Básicas] -

• Operação  de  seleção  (cont.)


• Propriedade  da  seleção

• σθ1∧θ2(r)  ⇔ σθ1(σθ2(r))  
• σθ1(σθ2(r))   ⇔ σθ2(σθ1(r))
• Comutatividade  da  operação  de  seleção

♥ José  Maria  Monteiro Banco  de  Dados 65


2. Modelo Relacional
- Álgebra Relacional [Operações Básicas] -

• Operação  de  Projeção


• Seleciona  um  subconjunto  de  atributos  de  uma  relação
• Notação
• ΠAi ,  Ai ,…,  Ai (r)  
1 2 n
• r  é  uma  relação  com  esquema  R(A1,  A2,  …,  An)
• {Ai1,  Ai2,  …,  Ain}  ⊆ {A1,  A2,  …,  An}
• Projeção  de  R  sobre  os  atributos  Ai1,  Ai2,  …,  Ain
• Exemplo
• Listar  o  nome  e  salário  de  todos  os  funcionários
• Πnome,  salário (Empregado)
• Listar  nome  e  salário  de  todos  os  empregado  que  
ganham  salário  maior  que  9000
Projeção
☞Filtro  de  atributos
Seleção
☞ Filtro  de  tuplas
♥ José  Maria  Monteiro Banco  de  Dados 66
2. Modelo Relacional
- Álgebra Relacional [Operações Básicas] -

• Exemplo
• Listar  nome  e  salário  de  todos  os  empregado  que  
ganham  salário  maior  que  9000
• Πnome,  salário  ( σ salario>9000  (Empregado))  (A)
• σ salario>9000 (Πnome,  salário  (Empregado))  (B)

• Qual  a  consulta  mais  rápida???  (A)  ou  (B)  ???

• Listar  nome  de  todos  os  empregado  que  ganham  salário  


maior  que  9000
• Πnome  ( σ salario>9000  (Empregado))

♥ José  Maria  Monteiro Banco  de  Dados 67


2. Modelo Relacional
- Álgebra Relacional [Operações Básicas] -

• Operação  de  União


• Executa  a  união  de  duas  relações  compatíveis
• Duas  relações  com  esquemas  R(A1,  A2,  …,  An)  e                      S(B1,  
B2,  …,  Bn)  são  compatíveis
• Apresentam  o  mesmo  número  de  atributos
• dom(Ai)=  dom(Bi),  0<i≤n
• Notação
• r  ∪ s
• Exemplo
• Considere  as  seguintes  relações
• Empregado(matr,  nome,  ender,  dt-­nasc,  cpf,  salário,  lotação)
• Dependente(nome-­dep,  data-­nasc,  matr-­resp)
• Liste  o  nome  e  data  de  nascimento  de  todos  os  
funcionários  e  dependentes  existentes  na  empresa
• Πnome,   dt-­nasc (Empregado)  ∪ Πnome-­dep,   data-­nasc (Dependente)  

♥ José  Maria  Monteiro Banco  de  Dados 68


2. Modelo Relacional
- Álgebra Relacional [Operações Básicas] -

• Operação  de  Diferença


• O  resultado  da  operação  r  -­ s é  uma  relação  que  contém  
todas  as  tuplas  de  r  que  não  pertencem  a  s
• r  e  s  são  relações  compatíveis
• Exemplo
• Considerando  que  na  empresa  só  existam  as  relações  
Empregado  e  Dependente  que  referem-­se  a  pessoas,  
execute  a  seguinte  consulta.  Listar  nomes  de  
empregados,  desde  que  não  existam  dependentes  com  
mesmo  nome
• Πnome (Empregado)  -­ Πnome-­dep (Dependente)

♥ José  Maria  Monteiro Banco  de  Dados 69


2. Modelo Relacional
- Álgebra Relacional [Operações Básicas] -

• Operação  de  Produto  Cartesiano


• Sejam  r  e  s  relações  com  esquemas  R(A1,  A2,  …,  An)  e                      
S(B1,  B2,  …,  Bm),  respectivamente
• Resultado  da  operação  r  x  s é  uma  relação  
• T(r.A1,  r.A2,  …,  r.An,  s.B1,  s.B2,  …,  s.Bm)
• com  n+m  atributos
• cada  tupla  de  T  é  uma  combinação  entre  uma  tupla  de  r  
e  uma  tupla  de  s
• T  ∈T ⇔ ∃v ∈ r  e  ∃u ∈ s,  tal  que  t[Ai]=v[Ai],  0<i≤n,   e  
t[Bj]=u[Bj],  0<j≤m
• Se  a  cardinalidade  de  r  é  nr tuplas  e  a  cardinalidade  s  é  
ns tuplas
• A  cardinalidade  de  T  é  nr∗ ns

♥ José  Maria  Monteiro Banco  de  Dados 70


2. Modelo Relacional
- Álgebra Relacional [Operações Básicas] -

• Operação  de  Produto  Cartesiano  (cont.)


• Exemplo
• Sejam  r  e  s  mostradas  abaixo.  Calcule  r  x  s  
r  x  s
r s

♥ José  Maria  Monteiro Banco  de  Dados 71


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  junção  theta  (theta-­join)


• Sejam  r  e  s  relações  com  esquemas  R(A1,  A2,  …,  An)  e                      
S(B1,  B2,  …,  Bm),  respectivamente
• O  resultado  da  operação  junção  theta  entre  r  e  s  é    uma  
relação  T(r.A1,  r.A2,  …,  r.An,  s.B1,  s.B2,  …,  s.Bm) definida  
por
• r          condição s  =  σcondição (r  x  s)
• condição  de  junção é  da  forma
r.Ag  θ s.Bi  ∧ r.Ah  θ s.Bk  ∧...∧ r.Am θ s.BL
Para  cada  r.Ai  θ s.Bj,  dom(r.Ai)  =  dom(s.BJ)  e        
θ∈{=, ≠, >, ≥, <, ≤}
• cada  tupla  de  T  é  uma  combinação  entre  uma  tupla  de  
r  e  uma  tupla  de  s,  sempre  que  a  combinação  satisfaça  
condição  de  junção
♥ José  Maria  Monteiro Banco  de  Dados 72
2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -
• Operação  de  junção  theta  (cont.)
• Exemplo
• Sejam  r  e  s  mostradas  abaixo.  Calcule  T=  r                                    s  
r.B ≠ s.B

r s T

♥ José  Maria  Monteiro Banco  de  Dados 73


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  Junção  de  Igualdade  (Equijoin)


• Operação  de  junção  theta,  cujo  operador  de  comparação  é  
a  igualdade    (=)
• Sejam  r  e  s  relações  com  esquemas  R(A1,  A2,  …,  An)  e                      
S(B1,  B2,  …,  Bm),  respectivamente
• O  resultado  da  operação  junção  de  igualdade  entre  r  e  s  é    
uma  relação  T(r.A1,  r.A2,  …,  r.An,  s.B1,  s.B2,  …,  s.Bm)
definida  por
• r          condição s  =  σcondição (r  x  s)
• condição  de  junção  é  da  forma
r.Ag  = s.Bi  ∧ r.Ah  = s.Bk    ∧ …  ∧ r.Am = s.BL
Para  cada  r.Ai=s.BJ,  dom(r.Ai)  =  dom(s.BJ)

♥ José  Maria  Monteiro Banco  de  Dados 74


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  Junção  de  Igualdade  (cont.)


• Exemplo
• Considere  as  relações  Departamento  (d)  e  Empregado  (e)    mostradas  
abaixo.    Calcule  a  seguinte  junção  de  igualdade  
Departamento                                                                      Empregado  
d.cod-dep=e.lotação

Departamento Empregado
cod-dep nome ender gerente Matr Nome cpf salário lotação
1 Informática R. X,10 21 11 Bárbara 231 8000 2
2 R. Humanos R. Y,5 11 21 André 451 9000 1
3 Financeiro R. Z. 2 40 33 Sofia 472 3000 2
35 Lucas 549 500 2
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1

♥ José  Maria  Monteiro Banco  de  Dados 75


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  Junção  de  Igualdade  (cont.)


• Exemplo

Departamento                                                                      Empregado
d.cod-dep=e.lotação
d.cod-dep d.nome d. ender d. gerente e.matr e.nome e.cpf e.salário e.lotação
1 Informática R. X,10 21 21 André 451 9000 1
1 Informática R. X,10 21 40 Caio 555 800 1
1 Informática R. X,10 21 57 Yasmin 800 400 1
2 R. Humanos R. Y,5 11 11 Bárbara 231 8000 2
2 R. Humanos R. Y,5 11 33 Sofia 472 3000 2
2 R. Humanos R. Y,5 11 35 Lucas 549 500 2
3 Financeiro R. Z. 2 40 37 Rebeca 465 400 3

Πe.nome,d.nome (Departamento                                                                      Empregado)


d.cod-dep=e.lotação

Para  cada  empregado,  listar  seu  nome  e  o  


nome  do  departamento  onde  está  lotado.

♥ José  Maria  Monteiro Banco  de  Dados 76


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  Junção  Natural  (Natural  Join)


• Operação  de  junção  de  igualdade
• Todos  os  com  o  mesmo  nome  nas  duas  relações
• Participam  obrigatoriamente  da  condição    de  junção
• Envolvidos  no  operador  de  comparação  (=)  
• Aparecem  só  uma  vez  na  relação  resultado  
• Sejam  r  e  s  relações  com  esquemas  
• R(A1,  A2,  …,  An,  B1,  B2,  …,  Bi)  e      
• S(B1,  B2,  …,  Bi,  C1,  C2,  …,  Cm),  respectivamente
• O  resultado  da  operação  junção  natural  entre  r  e  s  é    uma  relação  
T(r.A1,  r.A2,  …,  r.An,B1,  B2,  …,  Bi,s.C1,  s.C2,  …,s.Cm)  definida  por

• r          condição s  =  σcondição (r  x  s)


condição  de  junção  é  da  forma
r.B1  = s.B1  ∧ r.B2  = s.B2    ∧ …  ∧ r.Bi = s.Bi
• Notação
• r          s
♥ José  Maria  Monteiro Banco  de  Dados 77
2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  Junção  Natural  (cont.)


• Exemplo
• Considere  as  relações  Departamento  (d)  e  Empregado  (e)    mostradas  
abaixo.    Calcule  a  seguinte  junção  de  igualdade  
Departamento                  Empregado  
Departamento Empregado
cod-dep descricao ender gerente matr nome cpf salário cod-dep
1 Informática R. X,10 21 11 Bárbara 231 8000 2
2 R. Humanos R. Y,5 11 21 André 451 9000 1
3 Financeiro R. Z. 2 40 33 Sofia 472 3000 2
35 Lucas 549 500 2
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1

♥ José  Maria  Monteiro Banco  de  Dados 78


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  Junção  de  Igualdade  (cont.)


• Exemplo
Departamento                Empregado
d.cod-dep d.nome d. ender d. gerente e.matr e.nome e.cpf e.salário
1 Informática R. X,10 21 21 André 451 9000
1 Informática R. X,10 21 40 Caio 555 800
1 Informática R. X,10 21 57 Yasmin 800 400
2 R. Humanos R. Y,5 11 11 Bárbara 231 8000
2 R. Humanos R. Y,5 11 33 Sofia 472 3000
2 R. Humanos R. Y,5 11 35 Lucas 549 500
3 Financeiro R. Z. 2 40 37 Rebeca 465 400

♥ José  Maria  Monteiro Banco  de  Dados 79


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  Semi-­Junção  (Semi-­join)


• Definida  por
r              s  =  Π
θ r (r            s)
θ

• θ representa  uma  condição  de  junção  qualquer

• Operação  de  Interseção


• O  resultado  da  operação  r  ∩ s é  uma  relação  que  contém  
todas  as  tuplas  de  r    e  que  pertencem  a  s
• r  e  s  são  relações  compatíveis
• O  resultado  de  r  ∩ s é  definido  por
• r  ∩ s=  r  -­ (r-­s)

♥ José  Maria  Monteiro Banco  de  Dados 80


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  divisão


• Sejam  r  e  s  relações  com  esquemas  
R(A1,  A2,  …,  An,  B1,  B2,  …,  Bm)  e                      
S(B1,  B2,  …,  Bm),  respectivamente
• Resultado  da  operação  r  ⎟ s
• É  uma  relação  T(A1,  A2,  …,  An),  onde,  para  uma  tupla  v  
pertencer  a  T,  todos  os  valores  de  v    precisam  aparecer  
em  R  em  associação  com  toda  tupla  de  S
• Exemplo  1    
r
s
r  ⎟ s

♥ José  Maria  Monteiro Banco  de  Dados 81


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  divisão  (cont.)


• Exemplo  2    
r
s r  ⎟ s

• Exemplo  3
Considere  a  relação  r  do  exemplo  2  e  a  relação  s  abaixo.  Calcule      
r  ⎟ s r  ⎟ s
s

♥ José  Maria  Monteiro Banco  de  Dados 82


2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  divisão  (cont.)


• Sejam  r  e  s  relações  com  esquemas  
• R(A1,  A2,  …,  An,  B1,  B2,  …,  Bm)  e                      
Atributos  de  r  podem  aparecer
• S(B1,  B2,  …,  Bm),  respectivamenteem  qualquer  ordem
• R-­S=T(A1,  A2,  …,  An)
• Resultado  da  operação  da  divisão  de  s  por  r é  definido  por

• r  ⎟ s  =  ΠR-­S(r)  -­ ΠR-­S( (ΠR-­S(r)  x  s)    -­ ΠR-­S,S(r)    )

Re-­ordena  os  atributos  de  r

Associa   todas  tuplas  de  r  com  s

Fornece  pares  de  tuplas  de  ΠR-­S(r)  e  s,  mas  que  não  estão  em  r.  Portanto,  
uma  tupla  do  resultado  desta  operação  terá,  como    sua  componente  s,  uma
tupla  de  s,  mas  que  não  está  associada  com  uma  tupla  de  r.  
• ☞ Exclui  falsas  associações
♥ José  Maria  Monteiro Banco  de  Dados 83
2. Modelo Relacional
- Álgebra Relacional [Operações Derivadas] -

• Operação  de  divisão  (cont.)


• Exemplo
• Considere  as  tabelas  Emp-­Desc(matr,cod-­desc)  e  
Desconto(cod-­desc,valor,descrição),  onde
• A  tabela  Emp-­Desc  relaciona  os  empregados  com  os  
diversos  descontos  que  é  obrigado  a  pagar
Emp-­Desc
Desconto

Exercício:
Utilizando  a  definição  de  divisão,  mostrar  passo  a  passo  como  é  
encontrado  os  empregados  que  têm  descontados  de  seu  salário  todos  
os  tipos  de  descontos  possíveis
♥ José  Maria  Monteiro Banco  de  Dados 84
2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Operações  sobre  bancos  de  dados  relacional


• Não  pertencentes  ao  conjunto  de  operações  da  álgebra  relacional  
convencional  
• Operação  de  Atribuição  (assignment)
• Às  vezes,  é  importante  escrever  uma  expressão  da  álgebra  relacional  
em  diferentes  partes
• Atribuir  resultados  das  partes  a  relações  temporárias
• Notação
:=

• Exemplo
• rel1← ΠR-­S((ΠR-­S(r)  x  s)  -­ ΠR-­S,S(r))
• rel2←ΠR-­S(r)  
• resultado=  rel1  -­ rel2

♥ José  Maria  Monteiro Banco  de  Dados 85


2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Funções  Agregadas
• Funções  aplicadas  sobre  uma  coleção  de  valores  do  banco  de  dados
• sum
• Retorna  o  somatório  dos  valores  de  uma  coleção
• avg
• Retorna  a  média  dos  valores  de  uma  coleção
• max
• Retorna  o  maior  valor  de  uma  coleção  de  valores
• min
• Retorna  o  menor  valor  de  uma  coleção
• count
• Retorna  o  número  de  elementos  de  uma  coleção
• distinct
• Algumas  vezes,  torna-­se  necessário  eliminar  repetições  para  o  
cálculo  das  funções  agregadas
• Concatena-­se  a  palavra  distinct  após  o  nome  da  função

♥ José  Maria  Monteiro Banco  de  Dados 86


2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Funções  Agregadas  (cont.)


• Exemplos
• Considere  a  relação  
• Empregado(matr,  nome,  ender,  salário,  cpf,  lotação)
• matr  é  a  chave  primária   de  Empregado
• Encontre  o  número  de  empregados  lotados  no  departamento  001
• count(Πmatr(σlotação=001 (Empregado)))
• count  matr (σlotação=001 (Empregado))
• count-­distinct  matr (Empregado)
• Encontre  o  maior  salário  da  empresa
• max(Πsalário(Empregado))
• max  salario (Empregado)
• Encontre  o  salário  médio  da  empresa
• avg-­distinct(Πsalário(Empregado))
• Encontre  a  quantidade  de  salários  distintos  no  departamento  001
• count-­distinct(Πsalário(σlotação=001 (Empregado)))
• Encontre  o  primeiro  e  segundo  maiores  salários  da  empresa

♥ José  Maria  Monteiro Banco  de  Dados 87


2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Funções  Agregadas  (cont.)


• Operação  de  Agrupamento
• Cria  sub-­grupos  e  aplica  a  função  agregada  a  cada  sub-­grupo,  onde  
cada  sub-­grupo  é  um  conjunto  de  tuplas
• Exemplo:
Empregado
matr nome cpf salário cod-dep
11 Bárbara 231 8000 2
21 André 451 9000 1
33 Sofia 472 3000 2
35 Lucas 549 500 2
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
cod_dep sum  of  salário
cod_dep  Gsum salario  (Empregado)   1 10200
2 11500
3 400

♥ José  Maria  Monteiro Banco  de  Dados 88


2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Funções  Agregadas  (cont.)


• Operação  de  Agrupamento
Empregado
matr nome cpf salário cod-dep
11 Bárbara 231 8000 2
21 André 451 9000 1
33 Sofia 472 3000 2
35 Lucas 549 500 2
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1

cod_dep  G  sum salario,  max Salario  (Empregado)  

cod_dep sum  of  salário max  of  salário

1 10200 9000
2 11500 8000
3 400 400

♥ José  Maria  Monteiro Banco  de  Dados 89


2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Operação  de  Renomeação


• ρ(R(F),  E)
• E:  expressão  da  álgebra  relacional
• F:  um  conjunto  de  especificações  do  tipo  
• NomeAtributoAntigo  -­-­>    NomeAtributoNovo
• R(F):  relação  com  o  mesmo  esquema  de  E,  exceto  para  os  atributos  com  
Nomes  Antigos  que  passam  a  ter  Nomes  Novos  (dados  pela  
especificação  F)  
• Exemplo  :  ρ(T(A  -­>  E),  Π A(S)  x  Π C(R)  )  (onde  S(A,B)  e  R(C,D)  )
• resulta  em  uma  relação  com  esquema  {E,C}  e  com  o  mesmo  
conteúdo  que  Π A(S)  x  Π C(R)  
• Notação  Alternativa:
• R’  (  X,  Y,  Z  )  =  R  (  A,  B,  C  )            

♥ José  Maria  Monteiro Banco  de  Dados 90


2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Expressões  Aritméticas
• Ex:  Obtenha  uma  relação  de  inscrições  com  as  
classificações  inflaccionadas  de  20%.
• Πcoddis,  bia,  resultado,    novo  =  resultado*1.2  (  Inscrito  )  
• Πcoddis,  bia,  resultado,    novo  =  resultado  +  (20-­resultado)/10  (  Inscrito  )  

91
♥ José  Maria  Monteiro Banco  de  Dados
2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Operação  de  Junção  Externa  (outer-­join)


• Considere  as  seguintes  relações
• Vendedor(matr,  nome,  ender,  salário,  cpf,  lotação)
• Vendas(matr-­vend,cod-­item,quantidade,  pr-­venda)
• Considere  a  seguinte  consulta
• Listar  o  histórico  de  vendas  de  cada  vendedor
• Esquema  do  resultado
• Res(matr,nome,cod-­item,quantidade,pr-­venda)
• ΠRes(Vendedor              Vendas)
• Consulta  com  perda  de  informação
• Não  aparecerão  no  resultado  
• Vendedores  que  não  efetuaram  vendas
• Definir  uma  operação  que  evite  esta  perda  de  informação
• Outer  join
• Adcionar  tuplas  extras  ao  resultado  de  uma  junção  
natural
♥ José  Maria  Monteiro Banco  de  Dados 92
2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Operação  de  outer-­join  (cont.)


• Tipos
• Junção  externa  à  esquerda  (left  outer  join)
• Junção  externa  à  direita  (right  outer  join)
• Junção  externa  completa  (full  outer  join)
• left  outer  join
• Notação
• A B
• Calcula  o  resultado  da  junção  de  A  com  B
• Adiciona  ao  resultado  da  junção
• Tuplas  da  relação  à  esquerda  (A)  que  não  satisfazem  a  
condição  de  junção
• Atribui  valores  nulos  aos  atributos  não  definidos  para  estas  
tuplas

♥ José  Maria  Monteiro Banco  de  Dados 93


2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Operação  de  outer-­join  (cont.)


• left  outer  join (cont.)
• Considere  as  seguintes  relações
• Vendedor(matr,  nome,  salário)
• Vendas(matr,cod-­item,qtde,  pr-­venda)
• Listar  o  histórico  de  vendas  de  cada  vendedor
Vendedor
Vendas

♥ José  Maria  Monteiro Banco  de  Dados 94


2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Operação  de  outer-­join  (cont.)


• left  outer  join (cont.)
• Listar  o  histórico  de  vendas  de  cada  vendedor
• Vendedor                      Vendas

♥ José  Maria  Monteiro Banco  de  Dados 95


2. Modelo Relacional
- Álgebra Relacional [Outras Operações] -

• Operação  de  outer-­join  (cont.)


• right  outer  join
• Notação
• A     B
• Calcula  o  resultado  da  junção  de  A  com  B
• Adiciona  ao  resultado  da  junção
• Tuplas  da  relação  à  direita  (B)  que  não  satisfazem  a  
condição  de  junção
• Atribui  valores  nulos  aos  atributos  não  definidos  para  estas  
tuplas
• full  outer  join
• Notação
• A     B
• Calcula  o  resultado  da  junção  de  A  com  B
• Adiciona  ao  resultado  da  junção
• Tuplas  das  relações  A  e  B  que  não  satisfazem  a  condição  
de  junção
• Atribui  valores  nulos  aos  atributos  não  definidos  para  estas  
tuplas
♥ José  Maria  Monteiro Banco  de  Dados 96
Leis algébricas

• Reunião
• associativa: R  ∪ (  S  ∪ T  )  =  (  R  ∪ S  )  ∪ T
• comutativa: R  ∪ S  =  S  ∪ R  
• Produto  cartesiano
• associativo: R  ⋅ (  S  ⋅ T  )  =  (  R  ⋅ S  )  ⋅ T
• não  comutativo: R  ⋅ S  ≠ S  ⋅ R
• Junção   natural
• associativa  e  comutativa  (independência  da  ordem  das  colunas  
devida  aos  atributos): R  ⋈ S  =  S  ⋈ R
• Por  isso  ⋈ generaliza  facilmente: R  =  R1 ⋈ ...  ⋈ Rn
• R  contém  os  tuplos  µ tais  que,  para  1≤ i  ≤ n,  µ restringido  aos  
atributos  de  Ri é  um  tuplo  de  Ri
• θ -­ junção
• não  é  comutativa  mas  é  associativa  (no  caso  de  os  índices  serem  
válidos)
• R  ⋈ (  S  ⋈ T  )  =  (  R  ⋈ S  )  ⋈ T
i  θ1  j k  θ2  l i  θ1  j (r+k)  θ2  l

97
♥ José  Maria  Monteiro Banco  de  Dados
2. Modelo Relacional
- Cálculo Relacional -

• Desenvolvido  por  Codd  


• Notação    para  definir  a  informação  desejada  através
• das  propriedades  de  uma  consulta  
• Não  há  a  especificação  de  um  procedimento  para  a
• obtenção  da  informação
• Linguagem  não  procedimental
• Notação
• t∈r
• a  tupla  t pertence  à  relação  r
• t[A]
• valor  da  tupla t sobre  o  atributo  A
• Consulta  em  Cálculo  Relacional
• {t  |  P(t)}
• O  conjunto  de  todas  tuplas  t,  tal  que  o  predicado  (fórmula)  P é  verdade  
para  t

♥ José  Maria  Monteiro Banco  de  Dados 98


2. Modelo Relacional
- Cálculo Relacional -

• Fórmulas  são  construídas  através  de  átomos


• Átomos
• t ∈ r,  onde  t é  variável  do  tipo  tupla  e  r uma  relação  (não  é  
permitida  a  utilização  do  operador  ∉)
• s[Ai]  θ t  [Bk], s e  t são  variáveis  do  tipo  tupla.  Ai e Bk
representam  atributos  sobre  os  quais  s e t estão  definidas  
respectivamente.  
• O  símbolo  θ denota  um  operador  de  comparação  (
• =,  ≠,  >, ≥,  <,  ≤
• Os  atributos  devem  possuir  domínios  cujos  elementos  
possam  ser  comparados  por  θ
• s[Ai]  θ K  ,onde K  é  uma  constante

♥ José  Maria  Monteiro Banco  de  Dados 99


2. Modelo Relacional
- Cálculo Relacional -

• Átomos  podem  ser  conectados  pelos  operadores  lógicos  ∧ (and),  ∨


(or),  ← (not)
• Regras  para  construção  de  fórmulas
• Todo  átomo  é  uma  fórmula
• Se  P1 e   P2 são  fórmulas,  então  P1 ∧ P2,    P1∨ P2,  ←P1,  ←P2 e  P1 ⇒ P2
também  são  fórmulas
• P1 ⇒ P2 (P1 implica P2)
• Se  P1 é  verdade  então P2  necessariamente  é
• Equivalente
• ←P1 ∨ P2
• Se  P  é  uma  fórmula  e  r  uma  relação,  então  (∃t∈r)  (P(t)) é  uma  fórmula
• Quantificador  existencial
• Se  P  é  uma  fórmula  e  r  uma  relação,  então  (∀t∈r)  (P(t)) é  uma  fórmula
• Quantificador  universal Existe  pelo  menos  uma  tupla  de  r  
para  a  qual  P(t)  é  verdade

P(t)  é  verdade   para  todas  as  tuplas


de  r

♥ José  Maria  Monteiro Banco  de  Dados 100


2. Modelo Relacional
- Cálculo Relacional -

• Exemplos
Considere  as  seguintes  relações
Departamento(cod_depart,  nome,  ender)
Empregado(matr,  nome,  ender,  cpf,  lotação,  salario)
Dependente(matr_resp,  nome_dep,  data_nascimento)
Consulta  C1:  
Nome  e  salário  dos  empregados  que  ganham  mais  que  
5000
C1:  {e[nome],e[salário]  |  e  ∈ Empregado  ∧ e[salário]>5000  }

Consulta  na  Álgebra  Relacional:


Πnome,  salário (σsalário>5000 (Empregado))

♥ José  Maria  Monteiro Banco  de  Dados 101


2. Modelo Relacional
- Cálculo Relacional -

Consulta  C2:  
Nome  e  salário  dos  empregados  que  trabalham  no  
departamento  ‘DC’  

C2:  {e[nome],e[salário]  |  e  ∈ Empregado  ∧


((∃d)(d ∈ Departamento  ∧
d[nome]=´DC´ ∧ d[cod_dep]=e[lotacao]))}
Consulta  C3:  
Nome  dos  empregados  que  não  possuem  dependentes

C3:  {e[nome]  |  e  ∈ Empregado  ∧


((∀ p)  (←((p  ∈ Dependente)  ∧(e.matr=p.matr_resp)))}

♥ José  Maria  Monteiro Banco  de  Dados 102


2. Modelo Relacional
- Cálculo Relacional -

• Expressões  Inseguras
Ck:  {e  |  ←(e  ∈ Empregado)}
• Retorna  um  conjunto  infinito  de  tuplas
• Domínio  de  uma  expressão
• Valores  que  aparecem  como  constantes  ou  que  existem  
em  alguma  tupla  referenciada  (mencionada)  na  expressão
• Dom(e  ∈ Empregado   ∧ e[salário]>5000)
• 5000  mais  todos  os  valores  de  tuplas  pertencentes  a  
Empregado  
• A  expressão  é  segura  se  os  valores  que  aparecem  no  seu  
resultado  pertencem  ao  domínio  da  expressão

♥ José  Maria  Monteiro Banco  de  Dados 103


2. Modelo Relacional
- Cálculo Relacional -

• Exemplo
Dom(← (e  ∈ Empregado))
• Valores  de  tuplas pertencentes  a  Empregado
{e  |  ←(e  ∈ Empregado)}  
• Tem  como  resultado  tuplas  que  não pertencem  a  Empregado
• (←(e  ∈ Empregado)) não  é  segura
• Padrão  para  expressividade  relacional  (completeza  
relacional)
Uma  forma  de  representação   é  relacionalmente   completa  se  permite  
a  definição  de  qualquer  resultado  de  consulta  definida  por  uma  expressão  
de  cálculo  relacional
• Emprego  no  processo  de  otimização
• P1 ∧ (P1∨ P2)  ⇔ P1

♥ José  Maria  Monteiro Banco  de  Dados 104


Sumário

1. Introdução  aos  Sistemas  de  Banco  de  Dados


2. O  Modelo  Relacional

☞ 3.
4.
Modelo  de  Entidades  e  Relacionamentos   (MER)
Projeto  de  Bancos  de  Dados  Relacionais
5. A  Linguagem   SQL
6. Acesso  a  Bancos  de  Dados
7. Restrições  de  Integridade
8. Técnicas  Avançadas  de  Projeto  de  BD’s  Relacionais  
(Normalização)

♥ José  Maria  Monteiro Banco  de  Dados 105


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Modelo  de  dados  MER


• Não  é  implementado  por  nenhum  SBD
• Utilizado  como  modelo  conceitual  para  projeto  de  BDs
• Ferramenta  para  a  modelagem  de  BDs
• Proposto  por  P.  Chen  em  1976
• Princípio  básico
• Representar  dados  através
• Entidades
• Relacionamentos entre  as  entidades
• Atributos
• Propriedades  de  entidades  ou  relacionamentos

♥ José  Maria  Monteiro Banco  de  Dados 106


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -
• 1976
O Dr. Peter Chen (visite bit.csc.lsu.edu/~chen/chen.html) propõe o
modelo Entidade-­Relacionamento (ER) para projetos de banco de dados
dando uma nova e importante percepção dos conceitos de modelos de
dados. Assim como as linguagens de alto nível, a modelagem ER possibilita
ao projetista concentrar-­se apenas na utilização dos dados, sem se
preocupar com estrutura lógica de tabelas.

Dr.  Peter  Chen,  criador  do  


modelo  ER.

♥ José  Maria  Monteiro Banco  de  Dados 107


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Entidade
• Representação  abstrata  de  um  objeto  do  mundo  real
• Exemplos  de  entidades  do  mundo  real
• Objeto  concreto
• Um  empregado,  um  carro,  um  estudante
• Objeto  abstrato
• Uma  empresa,  uma  conta  bancária,  uma  disciplina
• Conjunto  de  entidades  (tipo  de  entidade)
• Entidades  que  apresentam  características  semelhantes
• Exemplo
• Estudantes,  Empregados,  Contas

♥ José  Maria  Monteiro Banco  de  Dados 108


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Atributos   de  uma  entidade


• Propriedades  que  caracterizam  uma  entidade
• Exemplos
• Atributos  de  empregados  
• matrícula,  nome,  endereço,  rg,  cpf,  data-­nasc,  salário,  
lotação,  data-­admissão
• Atributos  de  estudantes
• matrícula,  nome,  curso,  rg,  cpf,  data-­ingresso
• Conjunto  de  entidades
• Grupo  de  entidades  que  apresentam  mesmo  conjunto  
de  atributos
• A  cada  atributo  de  uma  entidade  deve  estar  associado  um  
valor

♥ José  Maria  Monteiro Banco  de  Dados 109


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Atributos   de  uma  entidade   (cont.)


• Um  atributo  pode  ser  ainda  definido  como
• Uma  função  que  associa  um  elemento  do  conjunto  de  
entidades  a  um  elemento  de  um  conjunto  de  valores  do  
atributo  (domínio  do  atributo)


Conjunto
● ● de  matrículas
Empregados matrícula
● 13 ∀Ei∈ Empregados  

Nome:  Ei -­-­>  nk ,  onde
● ● ●
nk∈ conjunto  nomes
nome
Bárbara
● ● ● ● Conjunto
● ● ● ●
de  nomes



Conjunto
endereço ●

de  endereços

R.  X,  9
♥ José  Maria  Monteiro Banco  de  Dados 110
3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Atributos   de  uma  entidade   (cont.)


• Atributos  chave  de  uma  entidade
• Conjunto  de  atributos  que  identificam  univocamente  
uma  entidade
• Seja  f  um  atributo  chave  para  um  conjunto  de  entidades  
D,    x∈D  e  f(x)=v,  então
• ∀d∈D  e  d≠x,  f(d)≠v
• Exemplo
• Matrícula  é  atributo  chave  para  Estudante
• Tipos  de  atributos
• Atributo  atômico endereço
• Atributo  que  não  pode  ser  subdividido
• Atributo  composto local cep cidade
• Atributo  formado  por  vários  atributos
rua número

♥ José  Maria  Monteiro Banco  de  Dados 111


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Atributos   de  uma  entidade   (cont.)


• Tipos  de  atributos
• Atributo  mono-­valorado
• Atributo  para  o  qual  está  associado  um  único  valor
• Exemplo
• Nome
• Atributo  multi-­valorado
• Atributo  para  qual  podem  estar  associados  vários  valores
• Função  que  associa  um  elemento  do  conjunto  de  entidades  
a  um  subconjunto  de  um  conjunto  de  valores
• Exemplo
• Para  o  atributo  telefone  podem  estar  associados  vários  
valores,  como  telefone  residencial,  comercial  e  celular
• Atributo  derivado
• Atributo  cujo  valor  poder  derivado  com  base  no  valor  de  um  
outro  atributo  (atributo  base)
• Exemplo
• Atributo  idade  pode  ser  derivado  do  atributo  data-­nasc

♥ José  Maria  Monteiro Banco  de  Dados 112


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Relacionamento
• Abstração  que  representa  associações  entre  diferentes  
entidades
• Exemplo
• Pode-­se  definir  um  relacionamento  que  associa  o  
empregado  Bárbara  com  o  departamento  “Ciência  da  
Computação”
• Conjunto  de  relacionamentos  (tipo  de  relacionamento)
• Grupo  de  relacionamentos  que  representam  o  mesmo  tipo  
de  associação
• Exemplo
• Conjunto  de  relacionamentos  lotação
+Contém  todos  os  relacionamentos  entre  empregado  e  
.departamento
• Seja  R  um  conjunto  de  relacionamentos  representando  
associações  entre  os  conjuntos  de  entidade  E1,  E2,  ...    En,  

♥ José  Maria  Monteiro Banco  de  Dados 113


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Relacionamento  (cont.)
• Conjunto  de  relacionamentos  (cont)
• Seja  R  um  conjunto  de  relacionamentos,  representando  
associações  entre  os  conjuntos  de  entidades  E1,  E2,  ...    En,  então  
R  ⊆ E1 x  E2 x  En
• Seja  r∈R,  então  r=(e1,  e2,  …,  en),  onde  e1∈E1,  e2∈E2,  …,  en∈En,
• Exemplo
• Considere  o  conjunto  de  relacionamentos  lotação
• lotação  ⊆ Departamento  x  Empregado
• (Bárbara,  Ciência  da  Computação)  ∈lotação
• Papel  (role)
• Função  que  uma  entidade  desempenha  no  relacionamento
• Exemplo
• Papel  de  empregado
• É  lotado  (Bábara  é  lotada  em  Ciência  da  Computação)
• Papel  de  departamento
• Lota  (Ciência  da  Computação  lota  Bárbara)

♥ José  Maria  Monteiro Banco  de  Dados 114


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Relacionamento   (cont.)
• Grau  de  Relacionamento
• Número  de  entidades  participantes  no  relacionamento
• Relacionamento  binário
• Relacionamento  de  grau  2
• Exemplo
• Relacionamento  ternário
• Relacionamento  de  grau  3
• Exemplo
• Relacionamento  Agência-­Conta-­Cliente
Cliente ●
● ● Conta
● ● ●
● ● ● ●

● ● ●

● ● ● ● Agência
● ●●
● ●
Agência_Conta-­Cliente
♥ José  Maria  Monteiro Banco  de  Dados 115
3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Relacionamento  (cont.)
• Auto-­relacionamento  (relacionamento  recursivo)
• Relacionamento  envolvendo  um  único  conjunto  de  
entidades
• O  conjunto  de  entidades  apresenta  diferentes  papéis
• Considere  o  seguinte  cenário:
• Cada  departamento  possui  vários  supervisores  
• responsáveis  por  um  subconjunto  de  empregados  do  
departamento  
• Modelagem  do  relacionamento  entre  empregado  e  supervisor  
• Um  supervisor  também  é  uma  entidade  do  tipo  Empregado
• Relacionamento  supervisiona

● 1
Empregado  desempenha  dois  papéis
● 1
-­ é-­supervisionado-­por  (1) ● 2
● 1
-­ é-­supervisor-­de  (2) ● 1
● 2
Supervisiona
Empregado
♥ José  Maria  Monteiro Banco  de  Dados 116
3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Relacionamento   (cont.)
• Atributos  de  relacionamento
• Propriedades  que  descrevem  um  relacionamento
• Exemplo
• Considere  o  atributo  data-­lotação
• Representa  a  data  em  que  um  empregado  foi  lotado  em  um  
determinado  departamento
• data-­lotação  é  um  atributo  do  relacionamento  lotação
• Considere  o  atributo  nota na  modelagem  de  dados  da  
Unifor
• Descreve  a  nota  de  um  aluno  em  uma  disciplina
• nota  é  um  atributo  do  relacionamento  cursa
• Cursa  representa  o  relacionamento  entre  os  conjuntos  de  
entidades  Estudante  e  Disciplina

♥ José  Maria  Monteiro Banco  de  Dados 117


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Restrições  estruturais  de  relacionamentos


• Cardinalidade  de  relacionamento
• Indica  o  número  de  entidades  que  podem  participar  de  um  
determinado  relacionamento
• Seja  R  um  relacionamento  binário  entre  os  conjuntos  de  
entidades  A  e  B
• A  Cardinalidade    de  R  deve  ser  uma  das  seguintes:
• Um  para  um  (1:1)
• Uma  entidade  de  A  só  pode  estar  associada  a  uma
entidade  de  B
• Uma  entidade  de  B  só  pode  estar  associada  a  uma
entidade  de  A
• Um  para  muitos  (1:N)
• Uma  entidade  de  A  pode  estar  associada  a  qualquer
quantidade  de  entidades  de  B
• Uma  entidade  de  B  só  pode  estar  associada  a  uma
entidade  de  A
• Muitos  para  um  (N:1)
• Uma  entidade  de  A  só  pode  estar  associada  a  uma  
entidade  de  B
• Uma  entidade  de  B  pode  estar  associada  a  qualquer
quantidade  de  entidades  de  A
♥ José  Maria  Monteiro Banco  de  Dados 118
3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Restrições  estruturais  de  relacionamentos  (cont.)


• Cardinalidade  de  relacionamento (cont.)
• Muitos  para  muitos  (N:N)
• ➲ Uma  entidade  de  A  pode  estar  associada  a  qualquer
.. quantidade  de  entidades  de  B

• ➲ Uma  entidade  de  B  só  pode  estar  associada  a  


qualquer
.. quantidade  de  entidades  de  A

• Exemplos
• Cardinalidade  do  relacionamento  lotação entre  
Departamento  e  Empregado 1:N

• Cardinalidade  do  relacionamento  cursa  entre  Estudante  e  


Disciplina
• Cardinalidade  do  auto-­relacionamento  supervisiona N:N

• Cardinalidade  do  relacionamento  que  modela  


1:N o  fato  de  que  
cada  departamento  da  empresa  possui  um  gerente   1:1

♥ José  Maria  Monteiro Banco  de  Dados 119


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Restrições  estruturais  de  relacionamentos   (cont.)


• Restrição  de  participação
• Especifica  a  obrigatoriedade  ou  não  de  uma  entidade  e
participar  de  um  relacionamento  com  outra  entidade
• Participação  total
• A  participação  de  um  conjunto  de  entidades  A  é  total  em  um  
relacionamento  R,  se  toda  entidade  de  A  participa  de  pelo  menos  
um  relacionamento  em  R
• Dependência  existencial
• Exemplo
• Considere  o  relacionamento  lotação,  para  o  qual  todo  
empregado  deve  estar  lotado  em  algum  departamento
• A  participação  de  Empregado  em  lotação  é  total
• Participação parcial
• A  participação  de  um  conjunto  de  entidades  A  é  parcial  em  um  
relacionamento  R,  se  apenas  um  subconjunto  de  entidades  de  A    
participa  em  R
• Exemplo
• Relacionamento  cursa entre  Estudante  e  Disciplina

♥ José  Maria  Monteiro Banco  de  Dados 120


3. Modelo Entidade-Relacionamento
- Conceitos Básicos -

• Entidade  fraca
• Entidade  cuja  existência  depende  de  estar  associada,  via  um  
relacionamento  (relacionamento  de  identificação),  com  uma  
outra  entidade  (entidade  forte)    
• Exemplo
• Considere  o  relacionamento  dependência entre  os  
conjuntos  de  entidades  Empregado  e  Dependente
• Dependente  contém  os  dependentes  dos  empregados  da  
empresa
• A  existência  de  um  dependente  Bárbara  
• Depende  da  existência  de  um  empregado  André  e  que  
• Bárbara  esteja  relacionada  a  André  através  do  relacionamento  
dependência
• Uma  entidade  fraca  é  identificada  
• Por  estar  relacionada  com  uma  entidade  forte
• Pelo  atributo  chave  da  entidade  forte
• Atributos  da  própria  entidade  fraca
• Chave  parcial

♥ José  Maria  Monteiro Banco  de  Dados 121


3. Modelo Entidade-Relacionamento
- Diagrama ER -

• Ferramenta   de  projeto
• Capaz  de  capturar  e  representar  graficamente    toda  
estrutura  lógica  de  um  banco  de  dados
• Utilizada  para  modelagem  de  BDs
• Existem  ferramentas
• Fornecem  uma  interface  gráfica  para  o  desenvolvimento  
de  DERs
• A  partir  do  DER  especificado,  geram  o  esquema  do  BD  
relacional
• ERWin

♥ José  Maria  Monteiro Banco  de  Dados 122


3. Modelo Entidade-Relacionamento
- Diagrama ER -

Notação
Símbolo Representação

Conjunto  de  entidades

Conjunto  de  entidades  


fracas  

Conjunto  de  relacionamentos


(relacionamento)

Relacionamento  de  
identificação

Nome  atributo Atributo


♥ José  Maria  Monteiro Banco  de  Dados 123
3. Modelo Entidade-Relacionamento
- Diagrama ER -

Notação
Símbolo Representação

Nome  atributo Atributo  chave

Nome  atributo Atributo  derivado

* Nome  atributo
Atributo  multivalorado

Nome  atributo

Atributo  composto
Nome  atributo Nome  atributo

♥ José  Maria  Monteiro Banco  de  Dados 124


3. Modelo Entidade-Relacionamento
- Diagrama ER -

Notação
Símbolo Representação

Nome  atributo Atributo  chave  parcial  de


uma  entidade  fraca

1 N
E1 R E2 Cardinalidade  1:N  

(min,max) Restrição  estrutural  de


R E
participação  de  E  em  R

E1 R E2 Participação  total  de  E2


em  R
♥ José  Maria  Monteiro Banco  de  Dados 125
3. Modelo Entidade-Relacionamento
- Diagrama ER -

• Exercício
• Utilize  o  DER  para  modelar  o  BD  para  o  seguinte  cenário
• A  empresa  X  tem  seus  dados  organizados  da  seguinte  
forma:
• Os  empregados  estão  lotados  em  diversos  departamentos.  
Funcionários  são  diretamente  chefiados  por  supervisores.  
É  importante  identificar  o  supervisor  de  cada  funcionário
• Todo  funcionário  deve  estar  lotado  em  um  departamento.  
Nenhum  funcionário  pode  estar  lotado  em  mais  de  um  
departamento
• Um  departamento  possui  no  mínimo  5  empregados,  onde  
um  deles  é  o  gerente  do  departamento.
• Os  dependentes  dos  funcionários  devem  possuir  como  
atributos:  nome,  data-­nasc.  A  idade  limite  para  ser  
dependente  de  um  empregado  é  18  anos
• O  salário  de  um  empregado  é  calculado  com  base  nos  
seus  diversos  vencimentos.  
• Para  tipo  de  vencimento,  existe  uma  descrição  e  o  valor  
correspondente

♥ José  Maria  Monteiro Banco  de  Dados 126


3. Modelo Entidade-Relacionamento
- Diagrama ER -

Quando  um  departamento  for  participar  de  lotação,  


terá,  no  mínimo,  cinco  empregados Cod_venc descrição

supervisiona Vencimento
é-­supervisionado
dt_lotação é-­supervisor (0,n) valor
(1,1) (0,n)
(1,1) (1,n)
lotação Empregado ganha
(0,n)
(5,n)
matr dt_nasc (1,1)
dependência
nome (0,1) idade
Departamento
(0,1) nome
Dependente
gerência
dt_nasc
♥ José  Maria  Monteiro Banco  de  Dados 127
3. Modelo Entidade-Relacionamento
- Diagrama ER -

Cod_venc descrição

supervisiona Vencimento
é-­supervisionado
dt_lotação é-­supervisor n valor
n 1
n n
lotação Empregado ganha
1
1
matr dt_nasc
dependência
nome 1 idade
Departamento n
1 nome
Dependente
gerência
dt_nasc

♥ José  Maria  Monteiro Banco  de  Dados 128


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Especialização
• Existem  conjuntos  de  entidades  compostos  de  subgrupos  
de  entidades
• Cada  subgrupo   apresenta  propriedades   diferentes  
dos  outros  subgrupos

♥ José  Maria  Monteiro Banco  de  Dados 129


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Especialização
• Considere  o  conjuntos  de  entidades  Empregado  na  
modelagem  dos  dados  de  um  universidade.  Podemos  
identificar  os  seguintes  subconjuntos  dentro  de  Empregado:
• Professores
• Titulação
• Universidade  de  titulação
• Regime  de  trabalho  (DE,  40h,  20h)
• Técnicos  Administrativos
• Grau  de  instrução
• Área  de  atuação    (contador,  secretária,  etc…)
• Engenheiros
• CREA
• Especialidade

♥ José  Maria  Monteiro Banco  de  Dados 130


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Especialização  (cont.)
• Definição
• Processo  de  identificação  de  subgrupos  de  entidades  
dentro  de  um  conjunto  de  entidades
• Processo  de  especialização  pode  ser  recursivo
• Um  único  conjunto  de  entidades  pode  ser  especializado  
por  mais  de  uma  característica  de  diferenciação  
(especialização)
• No  exemplo  de  Empregado  em  uma  universidade
• Especialização  por  tipo  de  empregado
• Especialização  por  tipo  de  contrato
• CLT
• Serviços  prestados
• Um  entidade  deve  pertencer  às  várias  especializações
• Os  subgrupos  identificados  em  um  processo  de  especialização  
podem  participar  de  relacionamentos  que  não  se  aplicam  a  
todas  entidades  do  conjunto  de  entidades  de  origem

♥ José  Maria  Monteiro Banco  de  Dados 131


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Especialização  (cont.)
• Notação  MER

Empregado
is  a (é  um)
Empregado   is  a  Professor  ou
Empregado   is  a  Técnico   Adm  ou
Empregado   is  a  Engenheiro
ISA

regime_tr CREA

Professor Técnico  Adm Engenheiro

titulação uni_tit Grau_ins área_atua especialidade

♥ José  Maria  Monteiro Banco  de  Dados 132


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Especialização  (cont.)
• Herança  de  propriedades
• Os  subgrupos  de  entidades  herdam todas  as  
propriedades  do  conjunto  de  entidade  de  mais  alto  nível

nome
Empregado
dt_nasc
matr

ISA
CREA
regime_tr

Professor Técnico  Adm Engenheiro

titulação uni_tit Grau_ins área_atua especialidade

♥ José  Maria  Monteiro Banco  de  Dados 133


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Especialização  (cont.)
• Relacionamentos dt_lotação

Disciplina n 1
Empregado lotação Departamento
n

oferta
ISA
n CREA
regime_tr

Professor Técnico  Adm Engenheiro

titulação uni_tit Grau_ins área_atua especialidade

♥ José  Maria  Monteiro Banco  de  Dados 134


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Especialização  (cont.)
• É  realizada  sobre  um  único  conjunto  de  entidades
• Identificar  subgrupos
• Ênfase  nas  diferenças  entre  entidades  de  um  mesmo  
subconjunto  de  entidades
• Através  dos  subgrupos  mais  especializados
• Generalização  
• Processo  de  identificação  de  conjuntos  de  entidades  que  
possuem  características  em  comum
• Mesmos  atributos  e  participam  de  mesmos  
relacionamentos
• Formação  de  um  único  conjunto  de  entidades  de  mais  alto  
nível
• É  realizada  sobre  vários  conjuntos  de  entidades
• Identificar  um  conjunto  de  entidades  de  mais  alto  nível

♥ José  Maria  Monteiro Banco  de  Dados 135


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Generalização  (cont.)
• Ênfase    nas  similaridades  entre  diversos  conjuntos  de  
entidades
• Redução  de  redundância  de  representação
• Atributos  compartilhados  só  serão  representados  no  
conjunto  de  entidades  de  nível  mais  alto
• Não  serão  repetidos
• Na  prática
• Generalização  é  o  processo  inverso  da  especialização
• Duas  estratégias  que  devem  ser  utilizadas
• Especializar  onde  for  necessário
• Generalizar  onde  for  possível

♥ José  Maria  Monteiro Banco  de  Dados 136


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Especificação   de  restrições   de  generalização   e  especialização


• Sejam  E1,  E2,  …,  En conjuntos  de  entidades  de  nível  mais  baixo  que  
o  conjunto  de  entidades  E

ISA
...
E1 E2 ... En

• Disjunção
• ∀ 0<i,j≤n,  i≠j  : Ei ∩ Ej =  ∅
• Nenhuma  entidade  de  E  pode  pertencer  a  mais  de  um  
subgrupo

♥ José  Maria  Monteiro Banco  de  Dados 137


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Especificação   de  restrições  de  generalização  e  


especialização
• Completeza
• Especifica  se  uma  entidade  de  E  tem  que  pertencer  
obrigatoriamente  a  um  dos  conjuntos  de  entidades  de  
mais  baixo  nível  ou  não
• Total
n
• E= ∪E i
i=1
• Parcial  
• E  ⊇ ∪n E i
i=1

♥ José  Maria  Monteiro Banco  de  Dados 138


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Agregação  
• Abstração  que  representa  relacionamentos  como  
entidades
• Mecanismo  utilizado  para  representar  relacionamentos  de  
relacionamentos
• Exemplo
• Considere  a  modelagem  de  dados  em  um  banco  BX.  
Clientes  do  BX  estão  relacionados  a  agência  e  conta
• Estratégia  1
data_abertura

Agência
1 n Conta

n
Cliente

♥ José  Maria  Monteiro Banco  de  Dados 139


3. Modelo Entidade-Relacionamento
- Diagrama no Modelo Relacional -

cod-ag nome ender gerente num-conta saldo

Agência Conta

cod-ag num-conta

Cliente_Conta data-abert

cod-cliente
cod-cliente ender
CPF Cliente
data-nasc
nome

♥ José  Maria  Monteiro Banco  de  Dados 140


3. Modelo Entidade-Relacionamento
- Diagrama no Modelo Relacional -

Agência Conta Cliente


cod_ag nome num_conta saldo cod_cliente nome
1 Benfica 123 1000 1 Gal
2 Pici 125 1500 2 Gil
3 Centro 126 1800 3 Sá
Alterar  a  data  de  abertura  de  uma  conta....
Clinte_Conta Alterar  a  agência   de  uma  determinada  conta….

cod_ag num_conta cod_cliente data_abertura


1 123 1 10/11 Quantas  contas  existem  na  
1 123 3 10/11 agência   1???
SELECT  count(*)
1 125 1 11/11
FROM  Cliente_Conta
2 126 3 12/11 WHERE  cod_ag=1
2 126 2 12/11
Podem  existir  duas  contas  com  o  mesmo  número  
em  agências   diferentes???
♥ José  Maria  Monteiro Banco  de  Dados 141
3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Agregação   (cont.)
• Problemas  na  Estratégia  1
• Não  representa  a  estrutura  lógica  que  deve  ser  
modelada
• Relacionamento  de  cliente  com  o  relacionamento  
agência-­conta
• Na  prática,  para  acessar  todas  as  contas  de  uma  
agência
• Terão  que  ser  acessadas  todas  triplas  
(agência,conta,cliente)
• Uma  conta  pode  pertencer  a  vários  clientes
• Vários  acessos  redundantes

♥ José  Maria  Monteiro Banco  de  Dados 142


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Agregação   (cont.)
• Utilizar  o  mecanismo  de  agregação
cod_ag nome ender gerente num_conta saldo

Agência 1 n Conta

n data_abertura

cod_cliente n ender
CPF Cliente
data-nasc
nome
♥ José  Maria  Monteiro Banco  de  Dados 143
3. Modelo Entidade-Relacionamento
- Diagrama no Modelo Relacional -

cod-ag nome ender gerente num-conta saldo

cod_ag
Agência Conta

cod-ag num-conta
data-abert

Cliente_Conta
cod-cliente
cod-cliente ender
CPF Cliente
data-nasc
nome

144
♥ José  Maria  Monteiro Banco  de  Dados
3. Modelo Entidade-Relacionamento
- Diagrama no Modelo Relacional -

Alterar  a  data  de  abertura  de  uma  conta....


Alterar  a  agência   de  uma  determinada  conta….
Agência Conta
cod_ag nome num_conta saldo cod_ag data_abertura
1 Benfica 123 1000 1 10/11
2 Pici 125 1500 1 11/11 Quantas  contas  existem  na  
agência   1???
3 Centro 126 1800 2 12/11 SELECT  count(*)
FROM  Conta
WHERE  cod_ag=1
Cliente Clinte_Conta
cod_cliente nome cod_ag num_conta cod_cliente
1 Gal 1 123 1
2 Gil 1 123 3
3 Sá 1 125 1
2 126 3
2 126 2

♥ José  Maria  Monteiro Banco  de  Dados 145


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Sem  Agregação  (cont.)


• Sem  Utilizar  o  mecanismo  de  agregação

cod_ag nome ender gerente num_conta saldo

Agência 1 n Conta

data_abertura n

cod_cliente n ender
CPF Cliente
data-nasc
nome

♥ José  Maria  Monteiro Banco  de  Dados


3. Modelo Entidade-Relacionamento
- Diagrama no Modelo Relacional -

Alterar  a  data  de  abertura  de  uma  conta....


Alterar  a  agência   de  uma  determinada  conta….
Agência Conta
cod_ag nome num_conta saldo cod_ag data_abertura
1 Benfica 123 1000 1 10/11
2 Pici 125 1500 1 11/11 Quantas  contas  existem  na  
agência   1???
3 Centro 126 1800 2 12/11 SELECT  count(*)
FROM  Conta
WHERE  cod_ag=1
Cliente Clinte_Conta
cod_cliente nome num_conta cod_cliente
1 Gal 123 1
2 Gil 123 3
3 Sá 125 1
126 3
126 2

♥ José  Maria  Monteiro Banco  de  Dados 147


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -
• Agregação   (cont.)
• Utilizar  o  mecanismo  de  agregação

data_consulta

Médico
n consulta n Paciente

n
Exame

♥ José  Maria  Monteiro Banco  de  Dados 148


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -
• Agregação   (cont.)
Médico Paciente Exame
mid mnome pid pnome eid enome
1 Dr.  Zé 1 Gal 1 Colesterol
2 Dra.  Ana 2 Gil 2 Endoscopia
3 Dr.  Pio 3 Sá 3 Mapa

Consulta
mid pid eid data_consulta
1 2 3 10/11
1 2 1 10/12
2 3 null 10/12 Se  o  médico  não  passar  nenhum  exame???

♥ José  Maria  Monteiro Banco  de  Dados 149


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -
• Agregação   (cont.)
• Utilizar  o  mecanismo  de  agregação
mid mnome pid
pnome

n n
Médico Paciente

n data_consulta

n enome
eid
Exame

♥ José  Maria  Monteiro Banco  de  Dados 150


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -
• Agregação   (cont.)
Médico Paciente Exame
mid mnome pid pnome eid enome
1 Dr.  Zé 1 Gal 1 Colesterol
2 Dra.  Ana 2 Gil 2 Endoscopia
3 Dr.  Pio 3 Sá 3 Mapa

Só  as  consultas  que  possuem  


Consulta Consulta_Exame exames   associados...
mid pid data_consulta mid pid data_consulta eid
1 2 10/11 1 2 10/11 3
1 2 10/12 1 2 10/12 1
2 3 10/12

♥ José  Maria  Monteiro Banco  de  Dados 151


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Agregação   (cont.)

♥ José  Maria  Monteiro Banco  de  Dados 152


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Agregação   (cont.)

♥ José  Maria  Monteiro Banco  de  Dados 153


3. Modelo Entidade-Relacionamento
- Propriedades Avançadas -

• Agregação   (cont.)

♥ José  Maria  Monteiro Banco  de  Dados 154


Sumário

1. Introdução  aos  Sistemas  de  Banco  de  Dados


2. O  Modelo  Relacional
3. Modelo  de  Entidades  e  Relacionamentos   (MER)

☞ 4.
5.
Projeto  de  Bancos  de  Dados  Relacionais
A  Linguagem   SQL
6. Acesso  a  Bancos  de  Dados
7. Restrições  de  Integridade
8. Técnicas  Avançadas  de  Projeto  de  BD’s  Relacionais  
(Normalização)

♥ José  Maria  Monteiro Banco  de  Dados 155


4. Projeto de Bancos de Dados
- Fases -
Mini-­mundo
(mundo  real)

Análise  de
Requisitos
Requisitos  de  dados
Projeto
Conceitual
Análise   Esquema  Conceitual  (MER)
Independente Funcional
do  SGBD Projeto  Lógico
(mapeamento   de  
Específico  para modelo  de  dados)
cada  SGBD
Esquema  Conceitual  representado
no  modelo  de  dados  do  SGBD
Projeto Projeto  Físico
(Software) Estruturas  de  armazenamento
e  caminhos  de  acesso  (índices)
Implementação
Implementação
Expressões  DDL  e  carga  do  BD

♥ José  Maria  Monteiro Banco  de  Dados 156


4. Projeto de Bancos de Dados
- Fases -

• Análise  (especificação)  de  requisitos


• Projetista  de  banco  de  dados  deve  realizar  entrevista  com  
usuários  prospectivos  do  banco  de  dados
• Entender  e  documentar  
• Requisitos  de  dados
• Projeto  conceitual
• Com  base  nos  requisitos  de  dados
• Criar  um  esquema  conceitual  para  o  banco  de  dados
• Modelo  de  dados  conceitual
• MER
• Construir  um  DER
• Projeto  lógico
• Com  base  no  DER  definido  na  fase  anterior
• Criar  um  diagrama  relacional
• Representação  gráfica  de  um  esquema  relacional

♥ José  Maria  Monteiro Banco  de  Dados 157


4. Projeto de Bancos de Dados
- Fases -

• Projeto  Físico
• Definir  estruturas  de  armazenamento
• Como  e  onde  devem  ser  armazenadas  as  tabelas
• Uma  tabela  em  um  arquivo
• Várias  tabelas  em  um  único  arquivo
• Definir  caminhos  de  acesso
• Definir  índices
• Definir  tipo  de  índice
• Ordenado
• Primário
• Secundário
• Hash
• Utilizar  critérios  de  performance
• Específico  por  SGBD
• Implementação
• Com  base  no  DR  definido  na  fase  3  e  as  estruturas  de  armazenamento  e  
caminhos  de  acesso  definidos  na  fase  anterior
• Criar  o  banco  de  dados
• Expressões  DDL
• Carregar  o  BD

♥ José  Maria  Monteiro Banco  de  Dados 158


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Ferramentas  CASE
• Modelagem  ER  gráfica
• Geração  automática  de  esquema  (DDL)
• Algoritmo  de  mapeamento
• Sete  passos

♥ José  Maria  Monteiro Banco  de  Dados 159


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Diagrama   relacional  (DR)


• Ferramenta  gráfica  utilizada  para  representar  um  esquema  
de  banco  de  dados  relacional
• A  partir  de  um  DER,  pode-­se  construir  um  DR  como  
descrito  a  seguir
• Passo  1
• Para  cada  conjunto  de  entidades  E,  deve  ser  criada  
uma  tabela  como  todos  os  atributos  de  E
• Escolher  uma  chave  candidata  para  ser  a  chave  primária  
da  tabela
• Apenas  os  componentes  atômicos  de  atributos  
compostos  devem  ser  incluídos
• Notação  de  tabela  no  DR
Nome  da  
Tabela

♥ José  Maria  Monteiro Banco  de  Dados 160


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Passo  2
• Para  cada  relacionamento  binário  1:1  entre  os  conjuntos  
de  entidades  E1  e  E2
• Escolher  uma  das  tabelas,  por  exemplo  E2,  e  incluir  como  
chave  estrangeira  em  E2  a  chave  primária  da  outra  tabela  
(E1)
• Critério  de  escolha
>>  Entidade  com  participação  total  no  relacionamento
• Atributos  de  relacionamentos  devem  ser  incluídos  na  
tabela  com  chave  estrangeira
• Notação
PK
E1 E2

PK

♥ José  Maria  Monteiro Banco  de  Dados 161


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Passo  2
• Para  cada  relacionamento  binário  1:1  entre  os  conjuntos  
de  entidades  E1  e  E2

PK
Empregado Emp Dep
codigo
nome PK
matr dt_nasc

nome 1 PK
Departamento Dep Emp
1
gerência
PK

♥ José  Maria  Monteiro Banco  de  Dados


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Passo  2
• Para  cada  relacionamento  binário  1:1  entre  os  conjuntos  
de  entidades  E1  e  E2
PK
Departamento Empregado

PK

Empregado Departamento
matr nome codigo codigo nome
1 RH
1 Gal NULL
2 Vendas
2 Gil NULL
3 Sá 1
4 Dé 2
5 Ana NULL
♥ José  Maria  Monteiro Banco  de  Dados 163
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Passo  2
• Para  cada  relacionamento  binário  1:1  entre  os  conjuntos  
de  entidades  E1  e  E2
PK
Empregado Departamento

PK

Empregado Departamento
matr nome codigo nome matr
1 RH 3
1 Gal
2 Vendas 4
2 Gil
3 Sá
4 Dé Valores  nulos  não  são  armazenados….
5 Ana
♥ José  Maria  Monteiro Banco  de  Dados 164
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Passo  3
• Para  cada  relacionamento  binário  1:N  entre  os  
conjuntos  de  entidades  E1  e  E2
• Identificar  o  conjunto  de  entidades  que  participa  do  lado  N  
(suponha  que  seja  E2)
• Incluir  como  chave  estrangeira  na  tabela  E2  a  chave  
primária  da  outra  tabela  (E1)
• Atributos  de  relacionamentos  devem  ser  incluídos  na  
tabela  com  chave  estrangeira
• Notação
PK
E1 E2

♥ José  Maria  Monteiro Banco  de  Dados 165


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Passo  4
• Para  cada  relacionamento  binário  N:N  entre  os  
conjuntos  de  entidades  E1  e  E2
• Criar  uma  nova  tabela  auxiliar  tab-­aux  para  representar  o  
relacionamento
• Incluir  como  chaves  estrangeiras  na  tabela  tab-­aux  as  
chaves  primárias  de  E1  e  E2
• Estes  dois  atributos  comporão  a  chave  primária  de  tab-­aux
• Atributos  de  relacionamentos  devem  ser  incluídos  na  
tabela  tab-­aux
• Notação
PK-­E1 PK-­E2
E1 Tab-­aux E2

PK-­E1
PK-­E2
♥ José  Maria  Monteiro Banco  de  Dados 166
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Passo  5
• Para  relacionamento  de  grau  maior  que  2
• Criar  uma  nova  tabela  auxiliar  tab-­aux  para  representar  o  
relacionamento
• Incluir  como  chaves  estrangeiras  na  tabela  tab-­aux  as  chaves  
primárias  das  tabelas  que  participam  do  relacionamento
• Estes  atributos  comporão  a  chave  primária  de  tab-­aux
• Passo  6
• Para  cada  conjunto  de  entidades  fracas  F
• Cria  uma  tabela  TFr  com  todos  os  atributos  de  F
• Incluir  como  chave  estrangeira  de  TF  a  chave  primária  da  
tabela  correspondentes  ao  conjunto  de  entidades  fortes  R
• A  chave  primária  de  TFr  será  a  chave  parcial  de  F  mais  a  chave  
primária    de  R

♥ José  Maria  Monteiro Banco  de  Dados 167


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Passo  7
• Para  cada  atributo  multivalorado  A  de  um  conjunto  de  
entidades  E1
• Criar  uma  tabela  T  com  o  atributo  A  
• Incluir  como  chave  estrangeira  em  T  a  chave  primária  de  
E1
• A  chave  primária  de  T  será  composta  do  atributo  A  mais  a  
chave  primária  de  E1

♥ José  Maria  Monteiro Banco  de  Dados 168


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

• Exercício
• Construa  o  DR  para  o  seguinte  DER
cod-ag nome ender gerente num-conta saldo

Agência 1 n Conta

n
data_abertura

cod-cliente n ender
CPF Cliente
data-nasc
nome
♥ José  Maria  Monteiro Banco  de  Dados 169
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

cod-ag nome ender gerente num-conta saldo

cod_ag
Agência Conta

cod-ag num-conta
data-abert

Cliente_Conta
cod-cliente
cod-cliente ender
CPF Cliente
data-nasc
nome

♥ José  Maria  Monteiro Banco  de  Dados 170


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

cic N End
Sal
DN

Empregado

ISA ISA
Es

Piloto Técnico

B HV

♥ José  Maria  Monteiro Banco  de  Dados


Primeira Alternativa

• Uma  tabela  EMP


Atributos  CIC,  DN,  N,  End,Sal
Chave  Primária  CIC
• Uma  tabela  PILOTO
Atributos  CIC,  B,HV
Chave  Primária  CIC
Chave  Estrangeira  :  CIC referencia  EMP
• Uma  tabela  TEC
Atributos  CIC,  Es
Chave  Primária  CIC
Chave  Estrangeira  CIC referencia  EMP

♥ José  Maria  Monteiro Banco  de  Dados


Segunda Alternativa

• Uma  tabela  PILOTO


Atributos  CIC,  DN,  N,  End,Sal,  B,HV
Chave  Primária  CIC

• Uma  tabela  TEC


Atributos  CIC,  DN,  N,  End,Sal,  Es
Chave  Primária  CIC

♥ José  Maria  Monteiro Banco  de  Dados


Vantagens e Desvantagens

• Primeira  Alternativa  com  3  tabelas


• Mais  geral
• Permite  fazer  consultas  sobre  empregados  que  não  são  
nem  pilotos  nem  técnicos.
• Não  é  a  adequada  quando  se  quer  consultar  atributos  
gerais  de  Pilotos  e  Técnicos:  é  preciso  combinar  as  tabelas  
PILOTO  e  TEC  com  a  tabela  EMP.

♥ José  Maria  Monteiro Banco  de  Dados


Vantagens e Desvantagens

• Segunda  Alternativa  com  2  tabelas


• É  adequada  quando  se  quer  consultar  somente  
informações  relacionadas  a  Pilotos  ou  Técnicos.
• Não  é  aplicável  se  tivermos  empregados  que  não  são  nem  
Pilotos  nem  Técnicos.
• Não  é  aplicável  se  existem  Pilotos  que  também  são  
Técnicos  e  vice-­versa  :  os  dados  deveriam  ser  
armazenados  duas  vezes  !!!  
• Uma  consulta  que  pede  para  listar  todos  os  empregados  
deve  varrer  duas  tabelas  !!!

♥ José  Maria  Monteiro Banco  de  Dados


4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -

DataInP

Projeto Patrocinado Departamento

Monitorado DataInM
por

Empregado

♥ José  Maria  Monteiro Banco  de  Dados


DP CREATE  TABLE  PAT
(  DID  char(4),
PID  char(4),
DEP DP  DATE,
PROJ PAT
PRIMARY  KEY  (DID,PID),
FOREIGN  KEY  (PID)  
REFERENCES  PROJ,
DM FOREIGN  KEY  (DID)  
MON
REFERENCES  DEP)

EMP CREATE  TABLE  MONITORA


(  CIC  integer,
DID  char(4), PROJ
PAT  
PID  char(4),
DM  DATE,
PRIMARY  KEY  (CIC,DID,PID), DEP
FOREIGN  KEY  (CIC)  
REFERENCES  EMP, MONITORA
FOREIGN  KEY  (DID,PID)   DEP
REFERENCES  PAT)

♥ José  Maria  Monteiro Banco  de  Dados


Sumário

1. Introdução  aos  Sistemas  de  Banco  de  Dados


2. O  Modelo  Relacional
3. Modelo  de  Entidades  e  Relacionamentos   (MER)
4. Projeto  de  Bancos  de  Dados  Relacionais

☞ 5.
6.
A  Linguagem   SQL
Acesso  a  Bancos  de  Dados
7. Restrições  de  Integridade
8. Técnicas  Avançadas  de  Projeto  de  BD’s  Relacionais  
(Normalização)

♥ José  Maria  Monteiro Banco  de  Dados 178


5. SQL
- Histórico -

• Structured  Query  Language  -­ SQL


• Desenvolvida  pela  IBM
• Structured  English  Query  Language  -­ Sequel
• Linguagem  de  consulta  para  o  sistema  R
• Primeiro  protótipo  de  SBD  relacional
• Especificar  consultas  de  forma  interativa
• ad  hoc  queries
• Padrão
• ANSI
• SQL  86
• SQL  89
• SQL  92
• SQL  99
• Propriedade  de  SBDs  objeto-­relacional

♥ José  Maria  Monteiro Banco  de  Dados 179


5. SQL
- Definição de Esquemas em SQL -

• Esquema  de  um  banco  de  dados  relacional  


• Conjunto  de  esquemas  de  relação  mais  um  conjunto  de  
restrições  de  integridade  IC
• Expressões  DDL  do  SQL  permitem  especificar
• Esquema  de  relações(tabelas)
• Domínio  de  valores  associados  a  cada  atributo
• Restrições  de  integridade
• Conjunto  de  índices  a  serem  mantidos  para  cada  relação
• Estrutura  de  armazenamento  físico  de  cada  relação  em  
disco
• Autorização  de  acesso  para  cada  relação

♥ José  Maria  Monteiro Banco  de  Dados 180


5. SQL
- Definição de Esquemas em SQL -

• Criando  tabelas
• Estrutura  básica
• CREATE  TABLE  nome-­tabela
(nome-­coluna   tipo-­de-­dados   [not  null],
[nome-­coluna   tipo-­de-­dados   [not  null]  …  ],
[CONSTRAINT  nome-­restrição]
UNIQUE  nome-­coluna
|  PRIMARY  KEY(nome-­coluna   {,  nome-­coluna})
Especifica
chaves   |  FOREIGN  KEY  (nome-­coluna   {,  nome-­coluna})
candidatas REFERENCES  nome-­tabela  
[ON  DELETE  CASCADE  |  
SET  NULL  |  NO  
ACTION  ],
Definição
de  restrições [ON  UPDATE  CASCADE],  
|  CHECK  (predicado)      
)
♥ José  Maria  Monteiro Banco  de  Dados 181
5. SQL
- Definição de Esquemas em SQL -

• Criando  tabelas  (cont.)


• Alguns  tipos  de  dados  suportados  pelo  SQL  92
• char(n)
• string  de  caracteres  de  tamanho  fixo  n
• varchar(n)
• string  de  caracteres  de  tamanho  variável  (máximo  n)
• integer
• smallint
• decimal(p,d)
• numérico  com  p  dígitos
• Dos  p  dígitos,  d  dígitos  representam  casas  decimais  após  
a  vírgula
• real
• numérico  ponto  flutuante
• date
•Alphabetic  date  formats  (  ‘April  15,  1998’)  
• data  de  calendário •Numeric  date  formats  (  ‘4/15/1998’)  
•Unseparated  string  formats  (‘19921225')  

♥ José  Maria  Monteiro Banco  de  Dados 182


5. SQL
- Definição de Esquemas em SQL -

• Criando  tabelas  (cont.)


• Exemplo:  Considere  o  seguinte  esquema  de  banco  de  
dados
Departamento(cod_depart,  nome,  ender)
Empregado(matr,  nome,  ender,  
cpf,salário,lotação)
• Crie  as  tabelas  Departamento  e  Empregado  utilizando  a  
DDL  do  SQL  com  as  seguintes  restrições
• O  salário  de  cada  empregado  deve  ser  maior  que  200
• Não  podem  existir  valores  de  cpf  repetidos
• Não  se  pode  permitir  a  remoção  de  departamentos  para  
os  quais  ainda  existam  empregados  lotados
• Ao  alterar  o  código  de  de  um  departamento,  alterar  o  
valor  do  atributo  lotação  para  todos  empregados  do  
departamento

♥ José  Maria  Monteiro Banco  de  Dados 183


5. SQL
- Definição de Esquemas em SQL -

• Removendo  tabelas
• Estrutura  básica
• DROP  TABLE  nome-­tabela  [CASCADE |  RESTRICT]
• Remove  as  tuplas  da  tabela  e  sua  definição  do  catálogo
• CASCADE  remove  as  restrições  do  tipo  foreign  key tabelas  
que  referenciam  a  tabela  removida
• Alterando  tabelas
• Estrutura  básica
• ALTER  TABLE  nome-­tabela
[ADD  nome-­coluna  tipo  de  dados]
[DROP  nome-­coluna  ] Não  suportado  pelo  DB2
[ADD  CONSTRAINT  nome-­restrição]
[DROP  CONSTRAINT  nome-­restrição]
[DROP  PRIMARY  KEY]
[  repetir  ADD  ou  DROP  em  qualquer  ordem]

• Exercício:
• Alterar a tabela Empregado para que nome seja chave candidata
♥ José  Maria  Monteiro Banco  de  Dados 184
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consultas  simples  sobre  o  banco  de  dados


• Estrutura  básica
SELECT  [ALL |  DISTINCT]  {*  |  expr  [[AS]  c_alias]  
{,  expr  [[AS]  c_alias]  …  }}
FROM  nome-­tabela  [[AS]  qualificador]  
{,  nome-­tabela  [[AS]  qualificador]  …}
WHERE  predicado
• ALL
• Retorna  todas  as  tuplas,  inclusive  repetidas  (default)
• DISTINCT
• Retorna  apenas  tuplas  não  repetidas
• *
• Retorna  todos  os  atributos  da(s)  tabela(s)
• expr
• Representa  um  atributo  ou  
• Expressão  matemática  envolvendo  atributos  das  tabelas
• salario*1.40
♥ José  Maria  Monteiro Banco  de  Dados 185
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consultas  simples  sobre  o  banco  de  dados  (cont.)


• FROM
• Representa  o  produto  cartesiano  das  tabelas  referenciadas  
• WHERE
• Corresponde  ao  predicado  de  seleção  da  álgebra  relacional
• Exemplos:  Considere  o  seguinte  esquema  de  banco  de  dados
Departamento(cod_depart,  nome,  ender)
Empregado(matr,  nome,  ender,  cpf,salário,lotação)
• Listar  os  funcionários  com  salário  maior  que  3000
• Listar  funcionários  com  salários  maior  que  1000  e  menor  que  
2000
• Listar  nome  dos  funcionários  com  o  nome  de  seu  
departamento  de  lotação
• Listar  nome  dos  funcionários  com  o  nome  de  seu  
departamento  de  lotação  e  uma  simulação  de  seu  salário  com  
um  aumento  de  15%

♥ José  Maria  Monteiro Banco  de  Dados 186


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Predicados  com  operações  sobre  strings


• Identificação  de  padrão
• %
• Casa  com  qualquer  substring
• _
• Casa  com  qualquer  caracter
• Operador
• like
• Exemplos
• nome  like  ‘inf%’
• Retorna  strings  que  iniciam  pelo  substring  inf
• nome  like  ‘%si_’
• Retorna  strings  que  contenham  ‘si’  como  substring  e  
terminem  com  um  caracter  qualquer  após  ‘si’
• Listar  todos  empregados  com  sobrenome  ‘brayner’
• Select  nome  from  Empregado  where  nome  like  ‘%brayner%’

♥ José  Maria  Monteiro Banco  de  Dados 187


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consultas  com  o  operador  de  união


• UNION
• União  de  duas  relações  (consultas)
• Sem  repetições
• UNION  ALL
• União  de  duas  relações  
• Com  repetições
• Exemplo
• Considere  as  seguintes  relações
• Empregado(matr,  nome,  ender,  dt_nasc,  cpf,  salário,  lotação)
• Dependente(nome_dep,  data-­nasc,  matr_resp)
• Liste  o  nome  e  data  de  nascimento  de  todos  os  
funcionários  e  dependentes  existentes  na  empresa
select  nome,dt_nasc  from  Empregado  UNION
select  nome_dep,data_nasc  from  Dependente

♥ José  Maria  Monteiro Banco  de  Dados 188


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consultas  com  o  operador  de  interseção


• INTERSECT
• Interseção  entre  duas  relações  (consultas)
• Sem  repetições
• INTERSECT  ALL
• Interseção  entre  duas  relações  
• Com  repetições
• Consultas  com  o  operador  de  diferença
• EXCEPT
• Diferença  entre  duas  relações  (consultas)
• Sem  repetições
• EXCEPT  ALL
• Diferença  entre  duas  relações  (consultas)
• Com  repetições

♥ José  Maria  Monteiro Banco  de  Dados 189


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Exercícios
• Listar  matrícula   dos  empregados    que  não  possuem  dependentes
Select  e.matr
From  empregado   e
EXCEPT
Select  d.matr-­resp
From  dependente   d

• Listar  matrícula   dos  empregados   que  possuem   dependentes


Select  e.matr Select  d.matr-­resp
From  empregado   e
INTERSECT From  dependente   d
Select  d.matr-­resp
From  dependente   d

• Consultas   com  consultas   ordenadas


ORDER  BY  coluna-­resultado   [ASC |  DESC]  
{,  coluna-­resultado   [ASC |  DESC]  …}
• Listar  empregados   ordenados   por  salário  na  ordem  
decrescente   e  por  nome  na  ordem  crescente
♥ José  Maria  Monteiro Banco  de  Dados 190
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Funções  Agregadas
• Funções  embutidas  (built-­in)  aplicadas  sobre  uma  coleção  
de  valores  (colunas)  do  banco  de  dados
• sum
• Retorna  o  somatório  dos  valores  de  uma  coleção
• avg
• Retorna  a  média  dos  valores  de  uma  coleção
• max
• Retorna  o  maior  valor  de  uma  coleção  de  valores  
• min
• Retorna  o  menor  valor  de  uma  coleção
• count
• Retorna  o  número  de  elementos  de  uma  coleção
• Sintaxe
• nome-­da-­função  (ALL |  DISTINCT  nome-­coluna)  |  count(*)
• Não  podem  ser  utilizados  na  cláusula  WHERE

♥ José  Maria  Monteiro Banco  de  Dados 191


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Exercícios
• Encontre  o  número  de  empregados  lotados  no  
departamento  de  Informática
select  count(*)
from  Empregado  e,  Departamento  e
where  e.lotacao=d.cod_dep  and  d.nome  like  '_nform_tica'

• Encontre  o  montante  da  folha  de  pagamento  da  empresa


select  sum(salario)
from  Empregado  
• Encontre  o  salário  médio  pago  pela  empresa
select  avg(distinct  salario)
from  Empregado

♥ José  Maria  Monteiro Banco  de  Dados 192


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Agrupando  tuplas  no  SQL


• Aplicar  funções  agregadas  a  diferentes  grupos  de  tuplas
• Exemplo
• Listar  a  quantidade  de  empregados  por  departamento
• Cláusula
• GROUP  BY
• Exemplo
select  lotação,  count(*)  as  quantidade_empregados
from  Empregado
group  by  lotação A  função  count  é  aplicada  
lotacao          quantidade_empregado   para  o  conjunto  de  tuplas  de  
-­-­-­-­-­-­-­-­-­-­-­ -­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­ cada  grupo
1                                4
2                                2

♥ José  Maria  Monteiro Banco  de  Dados 193


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Agrupando  tuplas  no  SQL


select  lotação,  count(*)  as  quantidade_empregados
from  Empregado
group  by  lotação A  função  count  é  aplicada  
para  o  conjunto  de  tuplas  de  
Empregado cada  grupo
matr nome cpf salário lotação
11 Bárbara 231 8000 2
21 André 451 9000 1 lotação quantidade_empregados
33 Sofia 472 3000 2 1 3
35 Lucas 549 500 2 2 3
37 Rebeca 465 400 3
40 Caio 555 800 1 3 1
57 Yasmin 800 400 1

♥ José  Maria  Monteiro Banco  de  Dados 194


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Agrupando  tuplas  no  SQL


select  lotação,  sum(salário)
from  Empregado
group  by  lotação
Empregado
matr nome cpf salário lotação lotação sum  of  salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200
33 Sofia 472 3000 2 2 11500
35 Lucas 549 500 2
37 Rebeca 465 400 3 3 400
40 Caio 555 800 1
57 Yasmin 800 400 1

♥ José  Maria  Monteiro Banco  de  Dados 195


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Agrupando  tuplas  no  SQL


select  lotação,  sum(salário),  max(salário)
from  Empregado
group  by  lotação
Empregado
matr nome cpf salário lotação lotação sum  of  salário max  of  salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200 9000
33 Sofia 472 3000 2
2 11500 8000
35 Lucas 549 500 2
37 Rebeca 465 400 3 3 400 400
40 Caio 555 800 1
57 Yasmin 800 400 1

♥ José  Maria  Monteiro Banco  de  Dados 196


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Agrupando  tuplas  no  SQL  (cont.)


• Todas  colunas  que  aparecem  na  cláusula  select têm  que  
aparecer  na  cláusula  group  by
• Exceto  os  argumentos  da  funções  agregadas
• Exemplo  de  sintaxe  incorreta
select  lotação,  matr,  count(*)
group  by  lotação
• Exemplos
• Lista  de  todos  dependentes  com  respectivos  
responsáveis  e  nome  do  departamento  de  lotação  dos  
responsáveis.  
• Agrupar  o  resultado  por  departamento  e  por  empregado
select  d.nome,  e.nome,  p.nome
from  Departamento  d,  Empregado  e,  Dependente  p
where  d.cod_dep=e.lotacao  and  e.matr=p.matr_resp
group  by  d.nome,  e.nome,  p.nome
♥ José  Maria  Monteiro Banco  de  Dados 197
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Agrupando  tuplas  no  SQL  (cont.)


• Exemplos  (cont.)
• Listar  maiores  e  menores  salários  de  cada  departamento
select  d.nome,  max(e.salario) as  Maior_Salario,  min(e.salario) as  
Menor_Salario
from  Departamento  d,  Empregado  e
where  d.cod_dep=e.lotacao  
group  by  d.nome
• Totalizar    a  quantidade  de  itens  vendidos  por  vendedor  e  
por  item,  considerando  o  seguinte  esquema
• Vendedor(matr,  nome,  salário)
• Vendas(matr,cod_item,qtde,  pr-­venda,dt-­hora-­venda)
• Estoque(cod_item,  referência,  pr_compra,pr_venda,qtde)
select  v.nome,  e.referência,  sum(d.qtde) as  total
from  Estoque  e,  Vendedor  v,  Vendas  d
where  e.cod_item=d.cod_item  and  v.matr=d.matr
group  by  v.nome,  e.referência

♥ José  Maria  Monteiro Banco  de  Dados 198


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Selecionando  grupos
• Listar  nome  dos  departamentos  cuja  média  salarial  seja  maior  
que  7000
• Cláusula  having
• Filtro  de  grupos
• Exemplo Funções  Agregadas  
select  d.nome,  avg(salario) =>  Podem  ser  
from  Departamento  d,  Empregado  e
where  d.cod_depart=e.lotacao utilizados  na  cláusula  
group  by  d.nome HAVING
having  avg(e.salario)>7000
• Consulta  com  where e  having
• predicado  da  cláusula  where é  avaliado  primeiramente
• Tuplas  que  satisfazem  o  predicado  são  agrupadas  pelo  group  by
• Predicado  da  cláusula  having é  avaliado
• Grupos  que  satisfazem  o  predicado  aparecem  no  resultado

♥ José  Maria  Monteiro Banco  de  Dados 199


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Selecionando  grupos
select  lotação,  count(*)  as  quantidade_empregados
from  Empregado
group  by  lotação
Empregado
matr nome cpf salário lotação lotação quantidade_empregados
11 Bárbara 231 8000 2
1 3
21 André 451 9000 1
33 Sofia 472 3000 2 2 3
35 Lucas 549 500 2 3 1
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1

select  lotação,  count(*)  as  quantidade_empregados


from  Empregado
group  by  lotação lotação quantidade_empregados
having  count(*)  >  1 1 3
2 3

♥ José  Maria  Monteiro Banco  de  Dados 200


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Selecionando  grupos
select  lotação,  count(*)  as  quantidade_empregados
from  Empregado
group  by  lotação
Empregado
matr nome cpf salário lotação lotação quantidade_empregados
11 Bárbara 231 8000 2
1 3
21 André 451 9000 1
33 Sofia 472 3000 2 2 3
35 Lucas 549 500 2 3 1
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1

select  lotação lotação


from  Empregado 1
group  by  lotação 2
having  count(*)  >  1
♥ José  Maria  Monteiro Banco  de  Dados 201
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Selecionando  grupos
select  lotação,  sum(salário),  max(salário)
from  Empregado
group  by  lotação
Empregado
matr nome cpf salário lotação lotação sum  of  salário max  of  salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200 9000
33 Sofia 472 3000 2
2 11500 8000
35 Lucas 549 500 2
37 Rebeca 465 400 3 3 400 400
40 Caio 555 800 1
57 Yasmin 800 400 1

select  lotação ,  sum(salário) lotação sum  of  salário


from  Empregado 1 10200
group  by  lotação 2 11500
having  max(salário)  >  500
♥ José  Maria  Monteiro Banco  de  Dados 202
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Selecionando  grupos
select  lotação,  sum(salário),  max(salário)
from  Empregado
group  by  lotação
Empregado
matr nome cpf salário lotação lotação sum  of  salário max  of  salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200 9000
33 Sofia 472 3000 2
2 11500 8000
35 Lucas 549 500 2
37 Rebeca 465 400 3 3 400 400
40 Caio 555 800 1
57 Yasmin 800 400 1

select  lotação ,  sum(salário) lotação sum  of  salário


from  Empregado 1 10200
group  by  lotação 2 11500
having  count(*)  >  3
♥ José  Maria  Monteiro Banco  de  Dados 203
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Selecionando  grupos  (cont.)


• Exemplos
• Listar  nome  e  média  salarial  dos  departamentos  que  
possuem  mais  de  10  empregados  lotados
select  d.nome,  avg(e.salario) as  Média_Salarial
from  Departamento  d,  Empregado  e
where  d.cod_dep=e.lotacao  
group  by  d.nome
having  count(matr)>=11

• Listar  nome  e  quantidade  de  empregados  dos  


departamentos  cuja  média  salarial  é  maior  que  5000
select  d.nome,  count(*) as  Número_Empregados
from  Departamento  d,  Empregado  e
where  d.cod_dep=e.lotacao  
group  by  d.nome
having  avg(e.salario)>=5000

♥ José  Maria  Monteiro Banco  de  Dados 204


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Selecionando  grupos  (cont.)


• Exemplos
• Listar  nome  de  vendedores  e  quantidade  de  vendas  efetuadas  
dos  vendedores  com  volume  de  vendas  superior  a  10000  
(classificado  em  ordem  decrescente  por  quantidade  de  
vendas),  considerando  o  seguinte  esquema:
• Vendedor(matr,  nome,  salário)
• Vendas(matr,cod_item,qtde,  pr-­venda,dt-­hora-­venda)
• Estoque(cod_item,  referência,  pr_compra,pr_venda,qtde)

select  v.nome,  count(*)  as  total_de_vendas


from  Vendedor  v,  Vendas  d
where  v.matr=d.matr
group  by  v.nome
having  sum(d.qtde*d.pr_venda)  >  10000
order  by  count(*)

♥ José  Maria  Monteiro Banco  de  Dados 205


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Checando  valores  nulos


• Predicado  IS  NULL
• Exemplo
select  *  from  Empregado  
where  dt-­nasc  is  null
• Consulta  SQL  aninhada  (subconsulta)
• Consulta  SQL  especificada  dentro  de  uma  outra  consulta  
SQL
• Exemplo
• Listar  todos  os  empregados  que  têm  salário  maior  que  a  
média  salarial  da  empresa
select  e.nome  
from  Empregado  e
where  salário  >  (select  avg(salário)  from  Empregado)

subconsulta   retorna  um  conjunto  de  valores  para  


a  consulta  mais  externa  (executada   primeiro)
♥ José  Maria  Monteiro Banco  de  Dados 206
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)


• Listar  o  primeiro  e  segundo  maiores  salários  da  empresa
select  max(salário)
from  Empregado
union
select  max(salario)
from  Empregado  
where  salário  <>  (select  max(salário)  from  Empregado)

• Listar  nome  dos  departamentos  com  média  salarial  maior  


que  a  média  salarial  da  empresa
select  d.nome
from  Departamento  d,  Empregado  e
where  d.cod_depart=e.lotação
group  by  d.nome
having  avg(e.salário)  >  (select  avg(salário)  from  Empregado)

subconsulta   na  cláusula  having


♥ José  Maria  Monteiro Banco  de  Dados 207
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)


• Consulta  correlacionada
• Listar  todos  os  empregado  que  possuem  salário  maior  
que  a  média  salarial  de  seus  departamentos
select  nome  
from  Empregado  
where  salário  >  (select  avg(salário)  from  
Empregado  
where  lotação=?????  )
A  subconsulta  precisa  utilizar  o  valor  do  atributo  
lotação de  cada  tupla  da  consulta  mais  externa  como  
parâmetro  de  entrada
• Variável  de  correlação
• Variável  da  consulta  mais  externa  utilizada  pela  consulta  
mais  interna      
Executado  para  cada  tupla  da  
select  e.nome   consulta  mais  externa
from  Empregado  e
where  salário  >  (select  avg(salário)  from  Empregado  
where  lotação=e.lotação)
♥ José  Maria  Monteiro Banco  de  Dados 208
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)


• Predicado  IN
• Verifica  a  pertinência  de  elementos  em  um  conjunto
• Exemplo
select  nome  
from  Empregado
where  matr  in  (1,5,8,9)
• Listar  os  empregados  lotados  nos  departamentos  
localizados  em  Fortaleza,  considerando  o  seguinte  
esquema
Departamento(cod_depart,  nome,  ender,cidade)
Empregado(matr,  nome,  ender,  
cpf,salário,lotação)
select  nome  
from  Empregado  
where  lotação  in  (select  cod_depart  from  Departamento  
where  cidade='Fortaleza'  )

♥ José  Maria  Monteiro Banco  de  Dados 209


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta   SQL  aninhada   (cont.)


• Predicado   IN
• Listar  os  empregados   lotados  nos  departamentos  
localizados   em  Fortaleza,  considerando   o  seguinte  
esquema
Departamento(cod_depart,   nome,  ender,cidade)
Empregado(matr,   nome,  ender,  cpf,salário,lotação)
select  nome  
from  Empregado  
where  lotação  in  (select  cod_depart  from  Departamento  
where  cidade='Fortaleza'  )

select  nome  
from  Empregado  e,  Departamento  d
where  e.lotação  =  d.cod_depart  
and  d.cidade='Fortaleza'  )

♥ José  Maria  Monteiro Banco  de  Dados 210


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)


• Predicado  IN  (cont.)
• Sintaxe
• expr  [NOT]  IN  (subconsulta)  |  expr  [NOT]  IN  (val  [,val  …])
• Predicados  SOME,  ANY  e  ALL
• Listar  empregados  que  ganham  salários  maior  ou  igual  
a  média  salarial  de  um  departamento
• Sintaxe
• expr  θ{SOME  |  ANY  |  ALL}  (subconsulta)
• θ ∈ {<,  <=,>,  >=,  =,  <>}

select  nome  
from  Empregado  
where  salário  >=some  (select  avg(salário)  from  Empregado    
group  by  lotação)

♥ José  Maria  Monteiro Banco  de  Dados 211


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)


• Predicados  SOME,  ANY  e  ALL  (cont.)
• θSOME  (subconsulta)   e  θANY  (subconsulta)  
• Retornam  verdade  se  e  somente  se  
• Para  pelo  menos  um  elemento  s  retornado   pela  
subconsulta,  expr   θ s é  verdade
• São  equivalentes
• θALL  (subconsulta)    
• Retorna  verdade  se  e  somente  se,  
• Para  todo  elemento  s  retornado  pela  subconsulta,                expr  
θ s é  verdade
• Listar  empregados  que  ganham  salários  maior  ou  igual  a  
média  salarial  de  cada  departamento
select  nome  
from  Empregado  
where  salário  >=all  (select  avg(salário)
from  Empregado  group  by  lotação)

♥ José  Maria  Monteiro Banco  de  Dados 212


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)


• Predicados  SOME,  ANY  e  ALL  (cont.)
• Listar  o  departamento  com  maior  média  salarial
• Não  é  permitido  função  agregada  composta
select  d.nome  
from  Empregado  e,  Departamento  d
where  d.cod_depart=e.lotação
group  by  d.nome
having  avg(salário)  >=all  (select  avg(salário) from  Empregado    
group  by  lotação)

• Predicado  EXISTS
• Verifica  se  o  conjunto  retornado  por  uma  subconjunto  é  
vazio  ou  não
• Listar  empregados  que  possuem  dependentes  
select  e.nome  
from  Empregado  e
where  exists  (select  *  from  Dependente  where  matr_resp=e.matr)

♥ José  Maria  Monteiro Banco  de  Dados 213


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)

• Predicado  EXISTS
• Verifica  se  o  conjunto  retornado  por  uma  subconjunto  é  
vazio  ou  não
• Listar  empregados  que  possuem  dependentes  
select  e.nome  
from  Empregado  e
where  exists  (select  *  from  Dependente  where  matr_resp=e.matr)

select  DISTINCT e.nome  


from  Empregado  e,  Dependente  d
where  e.matr  =  d.matr_resp

♥ José  Maria  Monteiro Banco  de  Dados 214


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)


• Predicado  EXISTS  (cont.)
• Sintaxe
• [NOT]  EXISTS   (subconsulta)
• EXISTS  (subconsulta)
• Retorna  verdade  se  e  somente  se
• O  conjunto  retornado  por  subconsulta  não  é  vazio
• NOT  EXISTS  (subconsulta)
• Retorna  verdade  se  e  somente  se
• O  conjunto  retornado  por  subconsulta  é  vazio
• Listar  nome  de  departamentos  com  empregados  ganhando  
duas  vezes  mais  que  a  média  do  departamento
select  d.nome
from  Departamento  d
where  exists  (select  *  from  Empregado  e
where  e.lotacao=d.cod_depart  and
salário  >  (2*(select  avg(salário)  from  Empregado  
where  lotação=e.lotação)))

♥ José  Maria  Monteiro Banco  de  Dados 215


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)


• Subconsulta  escalar
• Subconsulta  que  retorna  apenas  um  valor
• Pode  aparecer  na  lista  de  argumentos  da  cláusula  
select e  na  cláusula  where
• Exemplo
• Listar  nome  dos  empregados  com  a  quantidade  de  
dependentes  de  cada  empregado
select  e.nome,  (select  count(*)  From  dependente  where  matr_resp=e.matr)
from  Empregado  e

• Predicado  Between
• Sintaxe
• expr1  [NOT]  BETWEEN  expr2  and  expr3
• Exemplo
• matr  between  2  and  10  ⇔ matr  >=  2  and  matr<=10
♥ José  Maria  Monteiro Banco  de  Dados 216
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Consulta  SQL  aninhada  (cont.)


• Subconsulta  escalar
• Exemplo
• Listar  nome  dos  empregados  com  a  quantidade  de  
dependentes  de  cada  empregado
select  e.nome,  (select  count(*)  From  dependente  where  matr_resp=e.matr)
from  Empregado  e
select  e.nome,  count(*)  as  qtd_dep
from  Empregado  e,  Dependente  d
where  e.matr  =  d.matr_resp
group  by  e.nome

select  e.nome,  t.qtd_dep


from  Empregado  e,  (         select  matr_resp,  count(*)  as  qtd_dep
from  Dependente  
group  by  matr_resp
)  as  t
e.matr=t.matr_resp

♥ José  Maria  Monteiro Banco  de  Dados 217


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Formas  de  Junção  em  SQL  Avançado


• Listar  nome  dos  departamentos  que  possuem  empregados
select  d.nome  
projeção
from    Empregado  e,  Departamento  d produto  cartesiano
where  d.cod_depart=e.lotação
seleção

Πd.nome(σd.cod_depart=e.lotação(Departamento  x  Empregado))


Πd.nome(  Departamento d.cod_depart=e.lotação      Empregado  )

♥ José  Maria  Monteiro Banco  de  Dados 218


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Formas  de  Junção  em  SQL  Avançado  (cont.)


• Sintaxe  da  cláusula  FROM
[  FROM  {<tabela_fonte>}  [,...n]  ]
<table_fonte>  ::=
nome_tabela  [  [AS]  qualificador  ]    [  WITH  (  <table_hint>  [,...n])  ]
Pode  ser  
|  nome_tabela  [  [AS]  qualificador ]    [  (column_alias [,...n]  )  ]
uma  visão   |  (subquery)  [AS]  qualificador [  (column_alias [,...n]  )  ]
(view)
|  <tabela_fonte>  <tipo_junção>  <tabela_fonte>  ON  
<condição_junção>

<tipo_junção>  ::=
[  INNER |  {  {  LEFT  |  RIGHT  |  FULL  }  [OUTER]  }  ]  [  <join_hint>  ]
JOIN

♥ José  Maria  Monteiro Banco  de  Dados 219


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Formas  de  Junção  em  SQL  Avançado  (cont.)


• Sintaxe  da  cláusula  FROM  (cont.)
• WITH  (<table_hint>  [,...n])  ])
• Especifica  estratégias  (dicas)  para  o  otimizador  de  consultas
• Índices
• tipo  e  granularidade  de  bloqueio  (lock)
• (column_alias [,...n]  )
• Especifica  alias  para    colunas  retornadas  de  
• uma  tabela  (não  suportado  pelo  SQL  Server  7.0)  ou
• subconsulta
• Um  alias  para  cada  coluna  especificada  na  lista  do  select  da  
subconsulta
• join_hint
• Indica  para  o  otimizador  de  consulta  qual  o  algoritmo  de  junção  
deve  ser  executado
• Nested  loop  join,  merge  join  ou  hash  join  (SQL  Server  7.0)

♥ José  Maria  Monteiro Banco  de  Dados 220


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Formas  de  Junção  em  SQL  Avançado  (cont.)


• Sintaxe  da  cláusula  FROM  (cont.)
• Tipos  de  junção
• Junção  theta
• INNER  JOIN
• Junção  externa à  esquerda  
• LEFT  OUTER  JOIN
• Junção  externa à  direita  
• RIGHT  OUTER JOIN
• Junção  externa completa  
• FULL  OUTER  JOIN
• Junção  theta
• Exemplo
• Listar  nome  dos  empregados  com  o  nome  do  respectivo  
departamento
select  e.nome,  d.nome  
from  Empregado  e  inner  join  Departamento  d  on  e.lotação=d.cod_depart
♥ José  Maria  Monteiro Banco  de  Dados 221
5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Formas  de  Junção  em  SQL  Avançado  (cont.)


• Junção  theta  (INNER  JOIN)
• Exemplo
• Para  os  empregados  que  têm  salário  maior  que  700,  listar  
nome  com  o  nome  do  respectivo  departamento,  
select  nome_empregado,  d.nome  from  Departamento  d  inner  join
(select  nome,  lotação  from  Empregado  where    salário>700)  e  
(nome_empregado,departamento_lotação)  
on  departamento_lotação=d.cod_depart

• Junção  Externa  (OUTER  JOIN)


• Adicionar  tuplas  extras  ao  resultado  de  uma  junção  
natural

♥ José  Maria  Monteiro Banco  de  Dados 222


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Formas  de  Junção  em  SQL  Avançado  (cont.)


• LEFT  OUTER  JOIN
• Calcula  o  resultado  da  junção  
• Adiciona  ao  resultado  da  junção
• Tuplas  da  relação  à  esquerda  que  não  satisfazem  a  
condição  de  junção
• Atribui  valores  nulos  aos  atributos  não  definidos  para  estas  
tuplas
• Exemplo
• Listar  o  histórico  de  vendas  de  cada  vendedor,  
considerando  o  seguinte  esquema
• Vendedor(matr,  nome,  salário)
• Vendas(matr,cod_item,qtde,  pr-­venda,dt-­hora-­venda)
• Estoque(cod_item,  referência,  pr_compra,pr_venda,qtde)
select  v.nome,  e.referência,  d.qtde,d.qtde*d.pr_venda  
from  Vendedor  v  left  outer  join  (Vendas  d  inner  join  Estoque  e
on  d.cod_item=e.cod_  item)  on  v.matr=d.matr

♥ José  Maria  Monteiro Banco  de  Dados 223


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Formas  de  Junção  em  SQL  Avançado  (cont.)


• RIGHT  OUTER  JOIN
• Calcula  o  resultado  da  junção  
• Adiciona  ao  resultado  da  junção
• Tuplas  da  relação  à  direita  que  não  satisfazem  a  condição  
de  junção
• Atribui  valores  nulos  aos  atributos  não  definidos  para  estas  
tuplas
• Exemplo
• Para  cada  empregado,  listar  nome  do  empregado,  nome  
do  departamento  e  nome  dos  dependentes

select  e.nome,  d.nome,  p.nome  


from  Departamento  d  inner  join  (Dependente  p  right  outer  join  
Empregado  e  on  p.matr_resp=e.matr)  on  d.cod_dep=e.lotação

♥ José  Maria  Monteiro Banco  de  Dados 224


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Formas  de  Junção  em  SQL  Avançado  (cont.)


• FULL  OUTER  JOIN
• Calcula  o  resultado  da  junção  
• Adiciona  ao  resultado  da  junção
• Tuplas  das  relações  envolvidas  na  junção  que  não  
satisfazem  a  condição  de  junção
• Atribui  valores  nulos  aos  atributos  não  definidos  para  estas  
tuplas
• Incluindo  tuplas  em  uma  tabela
• Cláusula  Insert
• Sintaxe
INSERT  [INTO]  nome_tabela [(lista_de_colunas))]  
{  VALUES  (  { DEFAULT  | NULL   | expr  }[,...n]  )
|  subquery  }

♥ José  Maria  Monteiro Banco  de  Dados 225


5. SQL
- Conjunto de Operações para Manipulação de Dados -

• Atualizando  tuplas  de  uma  tabela


• Cláusula  Update
• Sintaxe
UPDATE  nome_tabela
SET  nome_coluna  =  {expr  |  NULL  |  (subquery)  }
{,  nome_coluna  =  {expr  |  NULL  |  (subquery)  }}
WHERE  predicado
• Removendo   tuplas  de  uma  tabela
• Cláusula  Delete
• Sintaxe
DELETE  FROM  nome_tabela
WHERE  predicado

♥ José  Maria  Monteiro Banco  de  Dados 226


5. SQL
- Visões -

• Acesso  a  um  banco  de  dados


• Requer  conhecimento  do  esquema  
• Indesejável  
• Para  usuários  inexperientes  
• Desenvolvedores  de  aplicativos  que  acessam  o  BD
• Por  questões  de  segurança  e  privacidade
• Grupos  de  usuários  devem  ter  acesso  a  dados  de  
interesse
• O  acesso  a  todo  o  banco  de  dados  é  perigoso
• Janelas  sobre  o  banco  de  dados
• Cada  janela  mostra  parte  do  banco  de  dados
• Diferentes  visões  
• Visões  (views)
• Definidas  sobre  tabelas  do  banco  de  dados
• Tabelas  base

♥ José  Maria  Monteiro Banco  de  Dados 227


5. SQL
- Visões -

• Tipos  de  visões


• Visão  virtual
• A  definição  da  visão  é  armazenada
• Dados  da  visão  não  são  persistentes
• Sempre  que  referenciada
• Os  dados  são  materializados
• Custo  praticamente  igual  a  cada  materialização
• Quanto  ao  acesso
• Somente  leitura
• Visões  que  só  permitem  acesso  de  leitura
• Permitem  atualização  
• Visões  que  permitem  atualizações  nas  tabelas  base

♥ José  Maria  Monteiro Banco  de  Dados 228


5. SQL
- Visões -

• Tipos  de  visões  (cont.)


• Visão  materializada
• Dados  e  definição  são  persistentes
• Problema  de  atualização  dos  dados  da  visão
• Sempre  que  há  uma  atualização  nas  tabelas  base  da  visão
• Recalculada
• Atualizada
• Com  intervenção  humana
• Automática
• Reduz  custos  de  materialização  de  resultado
• Visões  somente  para  leitura
• Aplicações
• Implementação  Data  Warehouse
• Integração  de  fontes  de  dados  heterogêneas

♥ José  Maria  Monteiro Banco  de  Dados 229


5. SQL
- Visões -

• Definição  de  visões  em  SQL


CREATE  VIEW  nome_da_visão  
[(nome_coluna  {,  nome_coluna  …})]
AS
subquery  [WITH  CHECK  OPTION]

• WITH  CHECK  OPTION


• Especifica  que  atualizações   (INSERT  ou  UPDATE)  na  
tabela  base  só  serão  permitidas  se  
• resultam  em  tuplas  visíveis  para  a  visão

♥ José  Maria  Monteiro Banco  de  Dados 230


5. SQL
- Visões -

• Exemplos
• Definindo  visões
create  view  V1  (nome_departamento,  nome_empregado)
as  select  d.nome,e.nome
from  Departamento  d  inner  join  Empregado  e
on  d.cod_depart=e.lotação

create  view  V2  (nome_empregado,  número_de_dependentes)


as  select  e.nome,  (select  count(*)  from  Dependente  where  
matr_resp=e.matr)
from  Empregado  e

create  view  V3  (matrícula,  salário)


as  select  nome,salário
from  Empregado
where  salário<700  with  check  option

♥ José  Maria  Monteiro Banco  de  Dados 231


5. SQL
- Visões -

• Exemplos
• Acessando   o  banco   de  dados   através   de  visões
select  *  from  V1
select  *  from  V2  where  número_de_dependentes>2
select  *  from  V3
matrícula                                                      salário                                    
-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­ -­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­
caio                                                                        500.0
rebeca                                                                500.0

• Atualizando  o  banco   de  dados   através   de  visões


update  v3  set  salário=salário+100
select  *  from  V3
matrícula                                                      salário                                    
-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­ -­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­
caio                                                                        600.0
rebeca                                                                600.0
update  v3  set  salário=salário+150 Erro,  pois  as  tuplas  a  serem  
alteradas  vão  deixar  de  ser  visíveis  
para  V3
♥ José  Maria  Monteiro Banco  de  Dados 232
5. SQL
- Visões -

• Visões  que  permitem  atualizações  apresentam  as  


seguintes  restrições  na  subconsulta
• A  cláusula  FROM   deve  possuir  apenas  uma  tabela
• Tabela  base
• Visão
• Deve  permitir  atualização
• Não  estão  especificadas  as  cláusulas  group  by e  having
• A  palavra  reservada  distinct  não  está  especificada
• A  cláusula  where  não  contém  subconsulta  que  referencia  
qualquer  tabela  na  cláusula  from  diretamente  ou  
indiretamente  (via  visões) Restrição  não  existente  no  SQL  Server  7.0
• Todas  as  colunas  da  subconsulta  são  colunas  simples
• Não  são  permitidas  colunas  do  tipo  avg(salário)  ou  
expressões  aritméticas

♥ José  Maria  Monteiro Banco  de  Dados 233


5. SQL
- Visões -

• Visões  que  permitem  atualizações  apresentam  as  


seguintes  restrições  na  subconsulta
• ORACLE  permite  atualização  em  visões  com  junção  de  
duas  tabelas
• Desde  que  a  junção  seja  entre  tabelas  com  
relacionamento  1:N
• A  tabela  do  lado  N  tenha  chave  primária
• A  atualização  só  pode  ser  feita  em  colunas  da  tabela  do  
lado  N
• Exceto  o  atributo  de  junção

♥ José  Maria  Monteiro Banco  de  Dados 234