Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Fundamentos de Bases de Dados 
 
 
 
Manuel Soares de Menezes 
(Notas de Aula) 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses i 
 
 
 
 
Prefácio 
 
 
“A motivação mais importante para o trabalho de pesquisa que resultou no modelo relacional, foi o 
objectivo de fornecer um limite nítido e claro entre os aspectos lógicos e os físicos na Gestão de Bases de 
Dados” 
 
- Frank Codd - 
 
 
Estas notas de aula são o resultado da compilação de apontamentos 
manuscritos elaborados pelo autor, quando este ministrou a disciplina de Base 
de Dados I, no curso de Engenharia Informática da Universidade Católica de 
Angola. 
 
O objectivo era elaborar uns apontamentos para os estudantes tivesse uma visão 
geral sobre a modelagem de Bases de Dados, o Projecto de Bases de Dados, e 
uma introdução a implementação do projecto de Base de Dados com SQL. 
 
 
Mas para elaborar esses apontamentos o autor consultou inúmeros livros e 
artigos espalhados pela Internet, mas as obras de Elmasri[2011], Heuser[2009], 
Ramakrishnan[2008], Rob[2010] e Setzer[2001], foram as que tiveram uma 
maior influência na concepsão dessas notas. 
 
É importante salientar que estas notas estão em fase de concepsão, logo elas 
possuem erros ortográficos, e provávelmente alguns erros de conteudo. 
 
Mas como pretendenmos utiliza-las em sala de aula, acredito que teremos a 
oportunidade para medir a sua receptividade, colher os subsídios necessáros 
para efectuar alguns melhoramentos, e eliminar os prováveis erros. 
 
Tenho plena consciencia que essa fase de teste levará alguns anos, e só depois 
de ter a absoluta certeza que o texto atingiu os objectivos, e não possui nenhum 
erro ortográfico nem conceitual, pensarei em publica-lo. 
 
Para terminar, devo salientar que essas notas não poderiam ser apresentadas 
com a qualidade que possuem, sem a ajuda de algumas pessoas, em especial 
os meus alunos: 
 
- Cristina Manuel dos Santos; 
- Emiliana Neide Nanjepele Adelino; 
- Jeovany Garcia Sassinda Afonso; 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses ii 
 
que sem qualquer remuneração, passaram horas afio a desenhar as figuras que 
têm uma qualidade que me enche de orgulhoso, 
 
e ao meu aluno: 
 
- Hoctair Pepe de Carlos Bernardino 
 
que tem-se mostrado incansável com o trabalho de formatação e a junção dos 
vários ficheiros enviados por mim. 
 
Como espero que no futuro posso acrecentar os nome de mais estudantes, e o 
nome colegas meus, convido-os a participar no enrequicimento do texto. 
 
Estas notas de aula contêm os seguintes temas: 
 
- Introdução às Bases de Dados; 
 
- Modelo de Entidade e Relacionamento; 
 
- Modelo de Entidade e Relacionamento Estendido 
 
- Modelo Relacional 
 
- Conversão do Modelo Entidade e Relacionamento para o Modelo Relacional 
 
- Normalização 
 
- Calculo e Álgebra Relacional (por escrever) 
 
- SQL- Criação de Tabelas 
 
- SQL – Manipulação de Tabelas 
 
- SQL- Consultas Simples 
 
- Bibliografia 
 
 
Luanda aos 15 de março de 2023. 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 1 
 
 
1 
Capítulo 
Introdução às Bases de Dados 
 
“Reparou que todas as letras da palavra database (base de dados, em inglês) são digitadas com a mão esquerda? 
Sabemos que a disposição do teclado da máquina de escrever (QWERTY) foi projectada, para facilitar o uso 
uniforme de ambas as mãos. Conclui-se, que escrever sobre bases de dados, além de ser algo não natural, é bem 
mais difícil do que parece.” 
 - Anônimo - 
 
1.1 Dados e Informação 
 
Todos nós já ouvimos falar em dados e informação. Mas o que é de facto dado 
e o que é informação? Qual a diferença entre eles? 
 
Vamos clarificar esses conceitos com um exemplo. Suponhamos que temos a 
seguinte letra: A. 
 
Qual é o significado de “A”? Por si só, o valor “A” não tem qualquer significado. 
É como se tivéssemos uma letra dentro de um saco com diversas letras. Embora 
um conjunto de letras possam constituir uma palavra, se elas forem analisadas 
de forma separada, e se não estiverem integradas num determinado contexto, 
não têm nenhum significado, e não são uteis há sociedade. Então, estamos em 
condições de efectuar a seguinte definição: 
 
Dados são elementos ou valores discretos, que não têm qualquer significado 
para há sociedade. 
 
Por outro lado, as informações são sequencias de dados que são uteis e têm 
algum significado para há sociedade. Nesse contexto podemos efectuar a 
seguinte definição: 
 
Informação é o resultado do processamento ou da interpretação de dados, que 
tem algum significado para há sociedade. 
 
O leitor interessado em aprofundar esses conceitos, consulte o artigo de 
Valdemar Setzer [2015]. 
 
Contudo, a informação é muito poderosa e vital para as organizações 
(empresas), por esse facto ela deve possuir as seguintes propriedades: 
 
Actualidade: a informação deve ser o mais actual possível para facilitar o 
processo de tomada de decisão. 
 
Correcta: as organizações têm de ter a capacidade para verificar se as 
informações que possuem estão correctas, para que possam ser processadas, 
e para que as tomadas de decisões sejam assertivas. 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 2 
 
 
Relevância: a informação ao dispor de uma organização (empresas), deve ser 
selecionada e filtrada para que a tomada de decisão seja feita sobre o que se 
considerado relevante, e não em informações fúteis. 
 
Disponibilidade: a informação deve estar disponível e acessível. Se a informação 
não estiver disponível no momento exato que é necessária, as tomadas de 
decisões podem ser errôneas, e causar enormes prejuízos financeiros e 
estruturais às empresas e à sociedade. 
 
Legibilidade: a informação deve ser fornecida de tal modo que seja facilmente 
interpretada pelos seus destinatários. 
 
1.2 Conceito de Base de Dados 
 
Para garantir o funcionamento de um supermercado, o Director de informática 
decidiu adquirir quatro sistemas informáticos independentes para tratar das 
seguintes operações (funcionalidades): 
 
Produção: Sistema para controlar a fabricação de alguns artigos, como por 
exemplo o pão. Para a produção do pão, necessitamos de uma receita que 
envolve os seguintes artigos: farinha, sal e fermento. Logo, para realizar essa 
operação, esse sistema necessita dos seguintes dados: código do artigo, nome 
do artigo, quantidade existente e preço de venda. 
 
Stock: Sistema para controlar por artigo a quantidade existente. Logo, para 
realizar essa operação, esse sistema necessita dos seguintes dados: Código do 
artigo, nome do arquivo, quantidade existente, preço de compra e preço de 
venda. 
 
Inventário: Sistema para contar a quantidade de artigos existente num 
determinado momento. Logo para realizar essa operação, esse sistema 
necessita dos seguintes dados: Código do artigo, nome do artigo e quantidade 
inventariada, preço de compra e preço de venda. 
 
Vendas: Sistemas para controlar as vendas dos artigos ao público. Para realizar 
essa operação, esse sistema necessita dos seguintes dados: código do artigo, 
nome do artigo, quantidade existente, e o preço de venda; 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 3 
 
É evidente que estes sistemas não são suficientes para garantir o funcionamento 
do supermercado. Para que isso aconteça, é necessário adquirir os seguintes 
sistemas: 
 
Encomendas: Sistema para controlar as encomendas feitas aos fornecedores.Logo, para realizar essa operação, esse sistema necessita dos seguintes dados: 
código do fornecedor, nome do fornecedor, código da encomenda, e por cada 
encomenda, o código dos artigos encomendados, nome desses artigos, 
quantidades encomendadas e preço de compra. 
 
Contabilidade: Sistema para controlar a situação financeira da empresa, ou seja, 
um sistema para apurar a quantidade de dinheiro que sai da empresa para pagar 
os fornecedores, a água, a luz e outras despesas, e quantidade de dinheiro que 
entra na empresa pelas vendas dos artigos. Logo, para realizar essa operação, 
esse sistema necessita dos seguintes dados: por cada encomenda, o código do 
fornecedor, nome do fornecedor, código da encomenda, valor a pagar, e por 
cada dia, o valor das vendas realizadas nesse dia. 
 
Como esses sistemas foram desenvolvidas separadamente, temos o problema 
de redundância de Dados. A redundância de Dados ocorre quando uma 
informação está representada no sistema mais do que uma vês. Para este caso, 
são redundantes as informações referentes aos artigos, porque são repetidas 
nos ficheiros que compõem cada um dos sistemas adquiridos. 
 
Este tipo de solução tecnológica, que denominamos por arquitectura de 
software, provoca os seguintes problemas: 
 
Entrada repetida da mesma informação: a mesma informação tem de ser 
inserida no sistema várias vezes. Para o exemplo anterior, os dados de um artigo 
têm de ser inseridos no sistema que controla as compras, no sistema de 
produção de artigos e no sistema de venda ao publico. Além de exigir trabalho 
desnecessário, a entrada repetida da mesma informação pode resultar em erros 
de transcrição de dados. 
 
Inconsistência de dados: cabe ao utilizador a responsabilidade de garantir a 
sincronia dos sistemas. Essa dependência humana, é muito susceptível a erros, 
porque podem ocorrer por um lado, erros de digitação, e por outro, operações 
de remoção de elementos que podem ser feitos num sistema e não ser feito nos 
restantes. 
 
Para suprir esses problemas, devemos utilizar um único arquivo que deve ser 
compartilhado por todas as operações que a empresa pretende informatizar. A 
essa propriedade dá-se o nome de compartilhamento de dados. 
 
Definição: o compartilhamento de dados é uma arquitectura de software que 
possui a seguinte propriedade: cada dado é armazenado uma e apenas uma vez 
e acedido por todos os utilizadores de uma empresa. 
 
Definição: uma base de dados é um conjunto de dados compartilhados, 
armazenados num único arquivo, denominado por repositório. 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 4 
 
 
 
 
Contudo os dados armazenados nesse repositório, possuem a seguinte 
propriedade: satisfazem as necessidades de informação de um conjunto de 
utilizadores, e possuem um conjunto de relacionamento entre esses dados. 
 
Definição: uma Base de Dados é um conjunto de dados, denominado por 
entidades, armazenado num repositório que descreve o funcionamento de uma 
organização. Esse repositório possui os dados que satisfazem as necessidades 
de informação de todos os utilizadores desse organização, e as relações entre 
esses dados. 
 
Por exemplo: uma base de dados para uma Universidade poderia ser conter as 
seguintes informações: 
- Entidades: alunos, professores, disciplinas, cursos e turmas. 
- Relacionamentos: alunos por professores, alunos por disciplinas, alunos por 
cursos, alunos por turmas, professores por disciplinas, professores por cursos, 
professores por turmas, etc. 
 
1.3 Sistema de Gestão de Base de Dados 
 
Um Sistema de Gestão de Base de Dados (SGBD) é uma coleção de programas 
que permite aos utilizadores criar e manipular uma base de dados. Esse Sistema 
é um software que permite a definição, recuperação, manipulação e 
compartilhamento de acesso à uma base de dados. 
 
Entendemos por: 
 
Definição, a especificação dos tipos, das estruturas, e das restrições para os 
dados que possam ser armazenados na Base de Dados; 
 
Recuperação, a operação de gravação de dados em algum dispositivo 
magnético que possa ser controlado pelo SGBD; 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 5 
 
Manipulação, a execução de funções como consulta a Base de Dados, para 
recuperar dados específicos, e actualizar a Base de Dados para que está reflicta 
as mudanças existentes no mundo real; 
 
Compartilhamento, a possibilidade de vários utilizadores ou aplicações, 
acederem ao mesmo tempo aos dados armazenados na Base de Dados. 
 
Apresentamos a seguir, uma figura que ilustra em termos gerais, a estrutura 
típica de um SGBD com base no modelo relacional. 
 
 
 
Mas para realizar essas operações, o SGBD relacional, possui uma linguagem 
de programação, denominada por SQL (Structured Query Language) que é 
composta pelos seguintes subconjuntos: 
 
DDL- Data Definition Language: Instruções para definir as tabelas que compõem 
à Base de Dados; 
 
DML- Data Manipulation Language: Instruções para manipular o conteúdo das 
tabelas da Base de Dados; 
 
TCL- Transaction Control Language: Instruções que efectuam o registro 
permamente das alterações feitas nas linhas das tabelas da Base de dados; 
 
DQL- Data Query Language: Instruções que efectuam a extração de 
informações na Base de Dados; 
 
DCL- Data Control Language: Instruções para o controle de acesso aos dados e 
a gestão de permissões dos utilizadores; 
 
Na figura a seguir, mostramos os comandos associadas a cada subconjunto da 
linguagem SQL. Contudo, devemos salientar que nem todos os autores utilizam 
essa classificação. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 6 
 
 
Fonte: EduRev: Computer Science Engineering (CSE): DataBase Management System (DBMS) 
 
Em função dessa linguagem, o SGBD apresenta os seguintes recursos: 
 
1º- Grande capacidade de gestão de informação: qualquer SGBD tem a 
capacidade de armazenar informações para sistemas simples, como uma 
agenda telefônica, e para sistemas complexos, como um sistema de reserva de 
passagens aéreas. Em ambos os casos, o SGBD tem a capacidade de garantir 
estabilidade, segurança e confiança, independente da quantidade de 
informações que estão armazenadas; 
 
2º- Redundância de Dados: qualquer SGBD tem a capacidade de reduzir ao 
máximo, ou mesmo eliminar a redundância de informações que são 
responsáveis pelas inconsistências de dados; 
 
3º- Facilidade de acesso: qualquer SGBD tem a capacidade de permitir o acesso 
concorrente a informação, ou seja, que a mesma informação possa ser 
partilhada por vários utilizadores; 
 
4º- Segurança de Dados: qualquer SGBD tem a capacidade de garantir 
segurança ao acesso aos dados através do controlo de senhas, e limitar as 
movimentações dos utilizadores na Base de Dados através gestão de 
permissões; 
 
5º- Garantia de Integridade: qualquer SGBD tem a capacidade de garantir que 
os valores dos dados que serão armazenados na Base de Dados, satisfaçam 
certas restrições que garantem a coerência e consistência da informação; 
 
6º- Facilidade de Migração: qualquer SGBD tem a capacidade de permitir a 
transferência de dados entre as Bases de Dados. Ao acto de transferir as 
informações de uma Base de Dados para outra, dá-se o nome de Migração. 
 
Os SGBD podem ser classificados em duas categorias: 
 
Os proprietários, que são desenvolvidos por grandes empresas de software 
multinacionais como por exemplo a ORACLE, IBM, Microsoft, cuja utilização é 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 7 
 
feita com base em licença, que são extremamente caras. Fazemparte desses 
SGBD, o Oracle, o DB2, e o SQLSERVER. 
 
Os de código aberto “open source”, que normalmente são desenvolvidos por 
universidades, e podem ser utilizados sem a necessidade de pagar licenças. 
Fazem parte desses SGBD, o mySQL, FireBird, e o PostgreeSQL. 
 
1.4 Sistema de Base de Dados 
 
Entendemos por Sistema de Base de Dados, a união entre a Base de Dados e 
o SGBD, cuja estrutura genérica pode ser descrita pela seguinte figura: 
 
 
Fonte: Elsmari-Sistemas de Banco de dados 
 
O Sistema de Base de dados, possui as seguintes propriedades: 
 
Abstracção de dados: num sistema tradicional de ficheiros, a estrutura dos 
ficheiros com os dados está inserida nos programas que manipulam esses 
ficheiros. Com este tipo de estrutura, a alteração os dados em um ficheiro, obriga 
à alteração de todos os programas que manipulam esse ficheiro. Num sistema 
de Base de Dados, a estrutura dos ficheiros está no catálogo do SGBD e, 
portanto, separada dos programas que os manipulam. 
 
Independência dos dados: O catálogo do SGBD guarda para cada ficheiro uma 
série de informações denominadas por meta-dados. Essas informações tornam 
o SGDB independente da Base de Dados, e permite que o SGBD funcione com 
Base de Dados diferentes. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 8 
 
Suporte de múltiplas visões dos dados: Fornecer diferentes perspectivas (visões) 
dos dados para diferentes utilizadores. Uma visão pode ser um subconjunto de 
dados da Base de Dados, ou um subconjunto de dados virtuais obtidos a partir 
de dados da Base de Dados. 
 
Partilha de dados e acesso multi-utilizador: O SGBD garante que cada 
transacção ou é executada correctamente ou é abortada por completo, ou seja, 
quando ocorrer alguma falha na execução de uma transação, o SGBD restaura 
o estado da Base de Dados para o estado que está tinha antes dessa ocorrência. 
 
1.5 Utilizadores de um SGBD 
 
Os utilizadores de uma Base de Dados podem ser classificados em diversas 
categorias de acordo com as suas necessidades de acesso as funcionalidades 
do SGDB, e podem ser: 
 
Administradores de Base de Dados “DataBase Administrator”, são profissionais 
de informática que são responsáveis por autorizar acesso ás Bases de Dados, 
coordenar e monitorar a sua utilização. O DBA é responsável por resolver 
problemas como quebra de segurança ou baixo desempenho das Bases de 
Dados. 
 
Projectistas de Base de Dados são profissionais de informática que têm a 
responsabilidade de identificar os dados a serem armazenados nas Bases de 
Dados, e escolher estruturas de dados apropriadas para representar e 
armazenar tais dados. Os projectistas de Base de Dados, interagem com os 
utilizadores e definem visões das Bases de Dados para adequar as 
necessidades de informação de cada grupo de utilizadores. 
 
Analistas de sistemas são profissionais de informática que determinam os 
requisitos dos utilizadores finais, especialmente dos utilizadores comuns, e 
desenvolvem as funcionalidades que esses utilizadores necessitam para atender 
aos seus requisitos; 
 
Programadores de aplicações são profissionais de informática que implementam 
as funcionalidades projectadas pelos analistas de sistemas, através de 
programas de computador. 
 
Utilizadores finais são profissionais de várias áreas do conhecimento humano, 
que necessitam de aceder as Bases de Dados para consultar, modificar e 
imprimir relatórios. 
 
1.6 Modelos de Dados 
 
Modelo Hierárquico 
 
Criado na década de 1960 pela IBM, o modelo Hierárquico foi considerado o 
primeiro modelo de Base de Dados. Nesse modelo, os dados estavam 
organizados em estrutura de dados do tipo árvore, onde cada átomo continha 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 9 
 
um registro, e cada registro era composto por um conjunto de campos (atributos). 
As ligações entre os registros caracterizavam-se por serem relacionamentos 
com uma cardinalidade de um-para-muitos. Por esse facto, o modelo Hierarquico 
ficou conhecido com uma base de dados um-para-muitos. Mas com o 
lançamento da base de dados relacional, este modelo perdeu a sua 
popularidade, apesar de ainda ser utilizado para algumas aplicações. 
Modelo em Rede 
 
O modelo em Rede surgiu como uma extensão do modelo Hierárquico, com a 
substituição da estrutura de dados do tipo árvore, pela estrutura de dados do tipo 
grafo. Este modelo foi desenvolvido por um grupo de trabalho, que tinha por 
objectivo terminar um padrão para as estruturas e as linguagens dos SGDB. 
Esse grupo, denominado por CODASYI (Conference On Data Systems 
Language) estabeleceu um padrão que foi aceite pela comunicade científica da 
altura, e surgiram muitos produtos comerciais, que evoluiram, introduzindo 
linguagens e caracteristias completamente independents. Uma dessas 
extensões deu origem ao Modelo Relacional. 
 
Modelo Relacional 
 
O modelo relacional apareceu no início dos anos 70 do século passado, e tem 
como base a teoria dos conjuntos e a álgebra a relacional. Este modelo mostrou-
se ser mais flexível e mais adequado do que os modelos Hierárquico e em Rede, 
para resolver os problemas que se colocavam na altura a nível da concepção e 
implementação de Bases de Dados. A sua estrutura fundamental baseia-se na 
tabela ou relação. Uma tabela é constituída por um ou mais campos, 
denominados por atributos, que contêm o tipo de dados que a Base de Dados 
irá armazenar. Para este modelo, uma Base de Dados é um conjunto de tabelas 
que se relacionam, e que possuem algumas restrições para garantir a sua 
integridade e coerência. 
 
Modelo Orientado a Objetos 
 
O modelo Orientado por Objectos começou a tornar-se comercialmente viável 
nos meados dos anos 80 do século passado. O seu aparecimento deveu-se as 
limitações de armazenamento de informação do modelo Relacional, que não 
permitia que se desenvolvesse sistemas complexos como os sistemas de 
informações geográficas (SIG), sistemas de desenho assistido por computador 
(CAD-CAM), que necessitam de tipos de dados mais complexos. Mas quando 
essas Bases de Dados foram introduzidas algumas das falhas do modelo 
Relacional tornam-se perceptíveis e foram solucionadas, tornando desse modo, 
as Bases de Dados orientados por objetos mais viradas para aplicações 
especializadas, e as Bases de Dados Relacionais viradas para resolver os 
problemas de negócios das empresas. 
 
Modelo Objeto-Relacional 
 
Embora alguns SGBD possuem a capacidade de manipular objetos complexos, 
como imagem, som e vídeo, bem como alguns recursos de orientação por 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 10 
 
objetos, isso não impediu que os sistemas puramente orientados por objetos 
fossem desenvolvidos com um outro modelo de dados. Este modelo contêm a 
implementação de uma camada de abstração de dados em cima dos métodos 
relacionais, o que torna possível a manipulação de dados mais complexos. 
 
Modelo NoSQL 
 
Um dos grandes desafios actuais da área de informática é a manipulação e 
processamento de grandes quantidades de dados no contexto do Big Data. 
NoSQL (Not only SQL) é um termo utilizado para definir um tipo de Base de 
Dados que não segue normas das tabelas presentes nas Bases de Dados 
Relacionais. A quantidade de dados gerada diariamente em vários domínios 
como a web, as redes sociais, e as redes de sensores, estão na ordem de 
algumas dezenas ou centenas de Terabytes. Uma das tendências para 
solucionar os diversos problemas e desafios gerados pelo contexto Big Data é o 
movimento denominado NoSQL. 
 
1.7 Fases do Projecto de uma Base de Dados 
 
A figura a seguir, ilustra o esquema geral onde são descritas as diferentes fasespara o desenho de uma Base de Dados. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 11 
 
 
Fonte: Elsmari-Sistemas de Banco de dados 
 
1º-Levantamento e Análise de Requisitos: é a primeira etapa do projeto de Bases 
de Dados e tem por objectivos: 
 
a) identificar os possíveis utilizadores para definir o objectivo do projecto; 
 
b) identificar as deficiências do sistema informático actual, se existir; 
 
c) estabelecer as metas e os objectivos para o novo sistema; 
 
d) verificar se é possível informatizar o problema (viabilidade); 
 
d) estimar os custos da implementação e analisar os seus benefícios; 
 
e) preparar um cronograma para a implementação do projecto. Nesta fase é 
necessário que a equipe de desenvolvimento do projecto, os analistas de 
sistemas, tenham um completo domínio das regras de negócio da organização 
(empresa). Para realizar este estudo pode-se utilizar várias ferramentas, tais 
como: entrevistas, análise dos procedimentos, análise dos documentos 
utilizados na empresa, questionários etc. 
 
O objetivo dessa fase é identificar os factos do mundo real, que são relevantes 
para desenvolver o novo software. Esta fase de pré-modelagem é uma das mais 
importantes do projecto de Bases de Dados, porque ela é responsável pela 
qualidade da solução que se pretende desenvolver. Esse levantamento pode ser 
feito por várias técnicas de especificação de requisitos. Para aprofundar esse 
assunto, recomendamos que o leitor consulte o Capitulo 8 - Pressman [2016] ou 
o Capítulo 4 - Sommerville [2011]. O processo de levantamento de requisitos 
termina com a elaboração de um dossier que possui a especificação formal dos 
dados no formato texto, que é denominado por minimundo. 
 
2º-Projecto Conceitual: está fase consiste em especificar os requisitos criados 
na fase anterior para um modelo de dados. O modelo de dados mais utilizados 
para especificar esses requisitos são o Modelo de Entidade e Relacionamento 
(MER) que será objecto de estudo nos próximos capítulos, e a Unifield Modeling 
Language (UML) que não abordaremos nestas notas. Contudo é importante 
frisar que esses modelos descrevem o conteúdo da informação, e não as 
estruturas onde essa informação será armazenada, e são independentes 
do SGBD que será utilizado. 
 
3º-Projecto Lógico: está fase consiste em transformar o modelo de dados 
desenvolvido na fase anterior para o modelo interno. O modelo interno consiste 
no detalhe das tabelas, dos relacionamentos, dos tipos de dados das colunas, 
das restrições de integridade, das visões, etc. Os modelos internos mais 
utilizados são o Modelo Relacional que estudaremos nestas notas e o modelo 
Objecto-Relacional que não abordaremos. Esta fase continua a ser 
independente do SGBD, e termina com a produção de um esquema de uma base 
de dados, muito parecida com o modelo conceitual, mas com os detalhes dos 
http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 12 
 
dados. O refinamento do Projecto Lógico é uma etapa opcional, que consiste em 
identificar os potenciais problemas, e aplicar as técnicas de normalização para 
melhorar o desempenho do futuro sistema. 
 
4º-Projecto Físico: está é a fase final de um projeto de uma Base de Dados. 
Nesta fase vai-se definir os detalhes técnicos da implementação como por 
exemplo, a forma como os dados serão armazenados, os scripts para a criação 
dos objectos na base de dados (tabelas, visões, colunas, funções, ...), as 
permissões dos utilizadores, etc. Esta etapa está muito ligada a tecnologia 
do SGBD que será utilizado. 
 
Para aprofundar as fases de um projecto de uma Base de dados, que muitos 
autores denominam por Ciclo de Vida de uma Base de Dados, recomendamos 
que o leitor consulte o Capítulo1 - Teorey [2006]. 
 
Uma Base de Dados bem projectada é a base para o sucesso do sistema que 
se pretende desenvolver. As primeiras etapas desse projeto são de extrema 
importância, porque dela depende a criação de Base de Dados que satisfaça as 
reias necessidades dos clientes, enquanto que a última etapa está mais ligada à 
tecnologia do SGBD que iremos utilizar. 
 
1.8 Ferramentas CASE 
 
Ferramentas CASE (Computer-Aided Software Engineering) são instrumentos 
computadorizados que servem para auxiliar o desenho de sistemas no processo 
de Engenharia de Software. Em outras palavras, são softwares que têm por 
finalidade ajudar a desenvolver outros softwares. 
 
Nestas notas estamos interessados em ferramentas CASE específicas para 
auxiliar a modelagem da Bases de Dados. Mas como existem no mercado muitas 
ferramentas disponíveis, vamos escolher uma que se adeque ao nosso processo 
de aprendizagem, mas que seja disponibilizada de forma gratuita. 
 
Como exemplo de ferramentas para modelagem temos: DBDesigner, MySQL 
Workbench Design, PowerArchitect, Oracle’s Designer, Draw.io, ERWin e o 
brModelo. 
 
Nestas notas, utilizaremos o Draw.io, para desenhar o Modelo de Entidade e 
Relacionamento, porque para além de ser uma ferramenta gratuita (freeware), 
ela está voltada para ensino. 
 
1.9 Leituras Recomendadas 
 
Para aprofundar os assuntos abordados neste capítulo, recomendados que o 
leitor consulte o artigo: 
 
 Setzer W.;- Dado, Informação, Conhecimento e Competência, 
Departamento de Ciências de Computação, Instituto de Matemática 
http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 13 
 
Estatística, Universidade de São Paulo, 2015 
(http://www.ime.usp.br/~vwsetzer/dado-info-Folha.html) 
 
 
e os seguintes livros: 
 
 Date C. J;- Introdução a Sistemas de Banco de Dados, Parte1- Conceitos 
Básicos, Capitulo 1- Visão Geral do Gerenciamento de banco de Dados e 
Capitulo 2-Arquitectura de Sistemas de Banco de Dados, tradução da 8ª 
edição americana, LTC, 2004 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Capítulo 1- Banco de Dados e usuários de Banco de Dados 
e Capitulo 2- Conceitos de Arquitetura do Sistema de Banco de Dados, 
tradução da 6ª edição americana, São Paulo, Pearson Addison Wesley, 
2011. 
 
 Heuser C. A.;- Projeto de Banco de Dados, 6ª Edição, Instituto de 
Informática da UFRGS, Capítulo 1- Introdução, Porto Alegre, Bookman, 
2009 
 
 Rob P., Coronel C.;- Sistema de banco de Dados: Projeto, implementação 
e Administração, Capítulo 1- Sistemas de Banco de Dados e Capítulo 2- 
Modelo de Dados, tradução da 8ª edição americana Edição, Cengage 
Learning, 2010. 
 
 Silberschatz A., Korth F. K, Sudarshan S.; - Sistema de Banco de Dados, 
Rio de Janeiro, Elsevier, 2012 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 14 
 
 
2 
Capítulo 
Modelo de Entidade e Relacionamento 
 
“Uma base de dados é uma coleção de dados operacionais armazenados, utilizados pelos sistemas de 
aplicação de uma determinada organização.” 
 
 - Date - 
 
2.1 Introdução 
 
Em março de 1976, o cientista da computação chinês, Peter Pin-Shan Chen pu-
blicou um trabalho com o título: "The Entity-Relationship Model: Toward the uni-
fied view of data", Chen [1], no qual definia uma possível abordagem para o pro-
cesso de modelagem dos dados. 
 
Esse trabalho foi amplamente aceite pela comunidade científica, e apesar de ter 
quase 50 anos, continua muito actualizado,e é a principal referencia para a mo-
delagem de Projectos de Bases de Dados. 
 
2.2 Entidades 
 
Uma entidade é um ente, um objecto do mundo real que é distinto de todos os 
outros objectos. Por exemplo, um livro de uma biblioteca é uma entidade con-
creta, enquanto que, um financiamento de um banco é uma entidade abstracta. 
 
Definição: entendemos por conjunto de entidades, o conjunto de todos os ob-
jectos que possuem as mesmas características. 
 
Por exemplo, o conjunto de todas os empregados de uma empresa, pode ser 
definido como o conjunto entidade EMPREGADO. De igual modo, o conjunto de 
todos os empréstimos de um banco comercial, pode ser definido como o conjunto 
de entidade EMPRÉSTIMO. 
 
No Diagrama de Entidade e Relacionamento (DER), os conjuntos de entidades 
são representada por um retângulo (notação original de Peter Chen), e contêm 
no seu interior o seu nome em letras maiúsculas. Por exemplo: 
 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 15 
 
Contudo, os conjuntos de entidades que descrevem um determinado problema, 
podem não ser disjuntos. 
 
Por exemplo, a entidade CLIENTE representa todos os clientes de um banco, 
enquanto que a entidade EMPREGADO representa todos os empregados do 
mesmo banco. Mas nesse universo podemos ter pessoas que podem pertencer 
a entidade CLIENTE, ou a entidade EMPREGADO, ou a ambos, ou a nenhuma. 
 
O conceito de conjunto de entidades é imprescindível para modelar as regras de 
negócio de qualquer organização. Vamos clarificar essa afirmação: 
 
Problema: uma clínica necessita de controlar as consultas médicas que realiza, 
acompanhar os pacientes que atende, e manter actualizado o seu estado clínico. 
Para cada médico a clínica possui uma ficha com o número, nome, endereço, 
especialidade, etc., e para cada paciente, a clínica possui uma outra ficha com 
o nome, endereço, data de nascimento, sexo. Todas as consultas são registra-
das numa terceira ficha com as seguintes informações: médico, paciente e o 
diagnóstico. 
 
Quais são os conjuntos de entidades que estão descritas neste problema. Ob-
serve que nessa descrição existem médicos, pacientes, exames e consulta. Es-
ses objectos são entes que participam nas actividades desse problema, têm um 
significado próprio, logo entidades. 
 
Boas Prácticas: as entidades devem ser escritas no singular em letras maiús-
culas. 
 
Observação: devemos considerar como fortes candidatos para o conjunto de 
entidades, as palavras escritas num texto que gramaticalmente são substantivos. 
 
Porém, a existência de entidades não permite que as informações que ela con-
tém possa relacionar-se com outras entidades. Para permitir a relação entre elas, 
temos de estudar um novo conceito. 
 
2.3 Relacionamentos 
 
2.3.1 Conceitos 
 
Um relacionamento é uma associação entre uma ou várias entidades. Por exem-
plo, num banco temos um relacionamento entre clientes e contas correntes. 
 
No Diagrama de Entidade e Relacionamento (DER), os relacionamentos são re-
presentados por losângulos (notação original de Peter Chen). 
 
Por exemplo, no relacionamento, 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 16 
 
 
 
 
temos um conjunto de objectos chamado por EMPREGADO, um conjunto de 
objectos chamado por FABRICA, e um conjunto de associações que relacionam 
os empregados as fábricas, denominadas por trabalham. 
 
Em termos matemáticos, um relacionamento R é formada por um conjunto de 
pares não ordenados (ei, mi) tal que, ei pertence a entidade E, e mi pertence a 
entidade M, e podem ser representados por um diagrama de ocorrência: 
 
 
 
 
 
O grau do relacionamento é determinado pelo número de conjuntos de entidades 
envolvidas nesse relacionamento. Um relacionamento é binário se envolve duas 
entidades, ternário se envolve três entidades, e assim por diante. 
 
Boas Prácticas: os relacionamentos devem ser escritos como verbos com letras 
minúsculas 
 
2.3.2 Auto Relacionamentos 
 
Um auto relacionamento, caracteriza-se por uma entidade relacionar-se consigo 
mesma. No exemplo a seguir 
 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 17 
 
temos um conjunto de objectos que fazem o papel de marido, um conjunto de 
objectos que fazem o papel de esposa, e um conjunto de associações que rela-
cionam os maridos com as esposas, denominado por casamento. Observe que 
agora temos o conceito do papel de um conjunto de entidades num relaciona-
mento. 
 
Notação: os papeis de um relacionamento são anotados nos campos superiores 
do losângulo. 
 
2.3.3 Cardinalidade dos Relacionamentos 
 
A cardinalidade de um relacionamento mostra o número de vezes que um con-
junto de entidade A se relaciona com um conjunto de entidade B. Essa cardina-
lidade pode ser do tipo 1:1 (um-para-um), 1:N ( um-para-muitos), N:1 (muitos-
para um) e N:N ( muito para muitos). 
 
Em estudaremos em seguida os vários tipos de cardinalidade para relaciona-
mentos binários. 
 
UM-para-UM (1:1): Este relacionamento caracteriza-se por um elemento do con-
junto de entidade em A relacionar-se com um e apenas um elemento do conjunto 
de entidade B, e um elemento do conjunto de entidade B relacionar-se com um 
e apenas um elemento do conjunto de entidade A. Em termos de teoria dos con-
juntos: 
 
Exemplo: 
 
 
 
 
Este relacionamento mostra que um departamento é coordenado por um e ape-
nas um funcionário, e que um funcionário coordena um e apenas um departa-
mento; 
 
que em termos de conjuntos é representado por 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 18 
 
Exemplo: 
 
 
 
 
Este auto relacionamento mostra que no casamento cristão, um homem se casa 
com apenas uma mulher, e que uma mulher se casa com apenas um homem. 
Nessa relação, um faz o papel de marido e outro faz o papel de esposa. 
 
que em termos de conjuntos é representado por: 
 
 
 
 
 
UM-para-MUITOS (1:N): Este relacionamento caracteriza-se por um elemento 
do conjunto de entidades A relacionar-se com vários elementos do conjunto de 
entidade B, mas um elemento do conjunto de entidades B relaciona-se com um 
apenas um elemento do conjunto de entidades A. Em termos de teoria dos con-
juntos: 
 
 
Exemplo: 
 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 19 
 
Este relacionamento mostra que uma divisão de uma empresa possui mais do 
que um departamento, mas que um departamento está contido em uma e apenas 
uma divisão. 
 
que em termos de conjuntos é representado por: 
 
 
 
 
Exemplo: 
 
 
 
 
Este auto relacionamento retrata a sociedade árabe. Nesta sociedade, um ho-
mem pode casa-se com mais do que uma mulher, mas mulher só pode casa-se 
com apenas um homem. Um faz o papel de marido e outro faz o papel de esposa. 
 
 
MUITOS-para-UM (N:1): Este relacionamento caracteriza-se por um elemento 
do conjunto de entidades A relacionar-se com um elemento do conjunto de enti-
dades B, e que um elemento do conjunto de entidades B relacionar-se com mais 
do que elemento do conjunto de entidades A. 
 
Exemplo: 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 20 
 
Este relacionamento mostra que um estudante numa universidade só pode estar 
inscrito em apenasum curso, mas que num curso podem estar inscritos vários 
estudantes. 
 
que em termos de conjuntos é representado por: 
 
 
 
 
 
Exemplo: 
 
 
 
 
Este auto relacionamento mostra a sociedade poliândrica. Nesta sociedade um 
homem pode casa-se com apenas uma mulher, mas uma mulher pode casa-se 
com mais do que um homem. Um faz o papel de “manso” e outra faz o papel de 
“safada”. 
 
 
MUITOS-para-MUITOS(N:N): Este relacionamento caracteriza-se por um ele-
mento do conjunto de entidade A relacionar-se com mais do que um elemento 
do conjunto de entidade B, e que um elemento do conjunto de entidade B relaci-
onar-se com mais do que um elemento do conjunto de entidade A. Em termos 
de teoria dos conjuntos: 
 
 
Exemplo: 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 21 
 
 
 
 
Este relacionamento mostra que um médico pode consultar vários pacientes, e 
que um paciente pode ser consultado por vários médicos. 
 
que em termos de conjuntos é representado por: 
 
 
 
 
 
Exemplo: 
 
 
 
 
Este auto relacionamento mostra uma sociedade sem moral, onde um homem 
pode relaciona-se com mais do que uma mulher, e uma mulher pode relaciona-
se com mais do que um homem. Em Angola, este relacionamento é denominado 
por “kit”, um faz o papel de “safado” e a outra o papel de “safada”, mas no meu 
tempo, esse relacionamento era chamado de “amizade colorida”. 
 
Contudo, devemos ter muito cuidado com a análise e a interpretação que faze-
mos com os relacionamentos um-para-muitos e muitos-para-muitos. Este tipo de 
cardinalidade, depende ambiente onde a relação está inserida. Para que o leitor 
tenha uma noção mais precisa dessa ambiguidade, vamos analisar o seguinte 
problema: que tipo de relação existe entre as prateleiras e produtos? 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 22 
 
Se estivermos num supermercado, os artigos expostos nas prateleiras estão or-
ganizados por tipo de artigo. Logo um artigo está exposto numa única prateleira, 
mas numa prateleira podemos ter expostos vários artigos. Logo, temos um rela-
cionamento com uma cardinalidade de um-para-muitos. 
 
Mas se estivermos em nossa casa, onde a necessidade de organização não é 
tão exigente, guardamos os artigos nos espaços livres de uma estante. Para 
essa realidade um artigo pode ser armazenado em várias prateiras, e uma pra-
teleira armazena vários artigos. Para este caso temos um relacionamento com 
uma cardinalidade de muitos-para-muitos. 
 
Boas prácticas: se num projecto tivermos auto relacionamentos sem papeis de-
finidos, devemos ter muito cuidado porque estamos em presença de um projecto 
com falhas. 
 
2.4 Atributos 
 
Os atributos representam as características de uma entidade ou de um relacio-
namento. Cada atributo está associado a um conjunto de valores que recebe o 
nome do domínio. 
 
No Diagrama de Entidade e Relacionamento (DER) a representação dos atribu-
tes não é padronizada. Nestas notas utilizaremos a notação original de El-
masri[2011] que consiste em utilizar elipses. Por exemplo, o conjunto de enti-
dade CLIENTE que mostramos a seguir, possui seguintes atributos: o código 
(que na terminologia das bases de dados denomina-se por Id), nome (nome pró-
prio e nome de família), endereço (que é composto cidade, bairro, rua, casa e 
caixa postal), telefone, data de nascimento, e idade. 
 
 
 
 
Boas Prácticas: para escrever o nome dos atributos, vamos adoptar o padrão 
Camel Case. Nesse Padrão, o primeiro caracter de cada palavra deve ser escrito 
com uma letra maiúscula enquanto que os restantes com letras minúsculas. 
 
2.4.1 Cardinalidade dos Atributos 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 23 
 
Os atributos podem ser monovalorados ou multivalorados. Os atributos monova-
lorados são aqueles que possuem um único valor para cada elemento de um 
conjunto de entidade. Estes atributos são representados por uma elipse. Por 
exemplo, no conjunto de entidade CLIENTE, são atributos monovalorados o Id 
(código) do cliente e a data de nascimento. 
 
Em contrapartida, os atributos multivalorados, são aqueles que possuem mais 
do que um valor para cada elemento de um conjunto de entidade. Esses atributos 
são representados por uma elipse dupla. Por exemplo, no conjunto de entidade 
CLIENTE, são atributos multivalorados o número do telefone. 
 
2.4.2 Classificação dos Atributos 
 
Os atributos podem ser classificados como simples, compostos ou derivados. 
 
Os atributos simples ou atómicos são aqueles que não podem ser decompostos 
em atributos mais simples. Estes atributos são representados por uma elipse. 
Por exemplo, no conjunto de entidade CLIENTE, são atributos simples o Id (có-
digo) do cliente e a data de nascimento. 
 
Os atributos compostos, são aqueles que podem ser decompostos em atributos 
mais simples. Por exemplo, no conjunto de entidade CLIENTE, são atributos 
compostos o nome de um cliente. 
 
Os atributos derivados são aqueles cujos valores podem ser calculados a partir 
dos valores de outros atributos. Estes atributos são representados por uma eli-
pse a tracejado. Por exemplo, no conjunto de entidade CLIENTE, são atributos 
derivados a idade do cliente. 
 
Atenção: os atributos derivados não devem ser descritos no Diagrama de Enti-
dade e Relacionamento. 
 
O atributo chave é um conjunto de um ou mais atributos que permite identificar 
de forma inequívoca uma ocorrência de um elemento num determinado conjunto 
de entidade. Estes atributos são representados por um traço nome do atributo. 
Por exemplo, no conjunto de entidade CLIENTE são atributos chave, o Id (có-
digo) do cliente. 
 
Mas existem algumas entidades do mundo real, como por exemplo, um municí-
pio, que o atributo chave só pode ser identificado pela concatenação do código 
da província com o código do município. 
 
Vamos clarificar este conceito com um exemplo. Suponhamos que a província 
de Luanda, está classificada com o código 02, e possui os seguintes municípios: 
01- Luanda, 02- Viana, 03- Cacuaco, …, etc, e que a província de Benguela está 
classifica com o código 07, e possui os seguintes municípios: 01- Benguela; 02-
Catumbela; 03- Lobito, 04-Baia Farta,…, etc. Como identificar o município de 
Viana? Se utilizarmos apenas o código 02, teremos os municípios de Viana e de 
Catumbela. Logo, para identificar um município de forma unívoca, temos de fazer 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 24 
 
a concatenação do código na província que contém esse município com o código 
do município, ou seja, identificá-lo com o código 0202. 
 
Para modelarmos está realidade temos de utilizar o conceito de entidade fraça 
que será estudado no próximo capítulo. 
 
2.4.3 Atributos de Relacionamentos 
 
Os atributos também podem estar contidos nos relacionamentos. Mas vamos 
consolidar esse conceito com um exemplo muito simples. 
 
Vamos considerar um relacionamento entre o conjunto de entidade EMPRE-
GADO e o conjunto entidade DEPARTAMENTO. Por uma simples inspecção, 
verificamos que estamos em presença de um relacionamento com a cardinali-
dade Muitos-para-Um, ou seja, N:1. 
 
Suponhamos que pretendemos acrescentar a esse relacionamento a data que o 
empregado começou a trabalhar num departamento. Se colocássemos essa 
data como atributo da entidade EMPREGADO, não estaríamos a modelar o pro-
blema de forma correcta, uma vez que não relacionamos essa data com um de-
partamento. Mas se colocássemos essa data na entidade DEPARTAMENTO, 
também não estaríamos a relacionar esse atributocom um empregado. Isso quer 
dizer que só poderemos modelar essa “acção” se envolvermos as duas entida-
des, ou seja, a data de inicio de funções de um empregado, é um atributo do 
relacionamento entre a entidade EMPREGADO e a entidade DEPARTAMENTO. 
 
 
 
2.4.4 Esquemas 
 
Podemos representar uma entidade ou um relacionamento, através de uma 
forma textual, cuja sintaxe descrevemos a seguir. 
 
R (a1,a2,…,an) 
 
onde 
 
 R é o nome de uma entidade ou de um relacionamento 
 
e 
 a1,a2,…,an os seus atributos. 
 
A essa forma de representação damos o nome de esquema de uma Base de 
Dados. 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 25 
 
 
2.5 Entidade Fraca 
 
Até agora vimos que todas os elementos que pertencem a um conjunto de enti-
dades possuem um atributo chave. Mas não é bem assim. Existem alguns con-
juntos de entidades no mundo real, cujos elementos não possuem essa proprie-
dade. Esses conjuntos de entidades são chamadas de entidades fracas e estão 
subordinadas a um conjunto de entidade chamada por entidade forte. 
 
As entidades fracas caracterizam-se por herdar os atributos da entidade domi-
nante, mas possuem os seus próprios atributos. 
 
Como essas entidades não têm um atributo chave, para podermos identificar de 
forma inequívoca qualquer elemento, temos de utilizar o atributo chave da enti-
dade forte mais um conjunto mínimo de atributos da entidade fraca. 
 
Vamos consolidar este conceito com dois exemplos muito simples. No primeiro 
pretendemos armazenar os dependentes de todos os funcionários de uma em-
presa para efeitos de pagamento de salários. 
 
Sabemos que o conjunto de entidade FUNCIONÁRIO está relacionado com o 
conjunto de entidade DEPENDENTE com uma cardinalidade 1:N, ou seja, para 
efeito de pagamento de salários, um funcionário pode estar associado à vários 
dependentes, mas cada dependentes só pode estar associado a um funcionário. 
Mas os atributos do conjunto da entidade DEPENDENTE são: nome do depen-
dente, sexo e data de nascimento. Mas numa empresa podemos ter dois funci-
onários cujos filhos possuem o mesmo nome e a mesma idade. Como identifica-
los? 
 
Cada funcionário é identificado pelo seu Bilhete de Identidade. Então para po-
demos identificar cada dependente no conjunto dos todos os funcionários de 
uma empresa, devemos relacionar os dados do dependente ao bilhete de iden-
tidade do seu progenitor. 
 
No Diagrama de Entidade e Relacionamento (DER) o conjunto de entidades fra-
cas, são representadas (notação de Peter Chen) por duplo retângulo e o relaci-
onamento com o conjunto da respectiva entidade forte por um duplo triangulo. 
Em termos gráficos: 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 26 
 
 
O segundo exemplo, já foi discutido neste capitulo, quando estudamos o conceito 
de chave para modelar a estrutura administrativa de uma província. 
 
Mas um conjunto de entidades fracas pode subordinar-se a um outro conjunto 
de entidades fracas. 
 
Vamos clarificar esse conceito com um exemplo. A classificação mercadológica 
é uma forma de organizar as mercadorias nos supermercados. Essa estrutura 
de mercadorias está normalmente organizada em três grandes grupos: Depar-
tamentos, Secções e Famílias. Por exemplo, todo o supermercado tem o depar-
tamento de bebidas, e nesse departamento temos a secção de vinhos, e nessa 
secção temos as famílias de vinhos verdes, rosé e tintos. 
 
Então, essa estrutura mercadológica pode ser modelada por um conjunto de en-
tidade forte denominada por DEPARTAMENTO, que possui um conjunto de en-
tidade fraca denominada por SECÇÃO. Mas esse conjunto de entidade fraca 
também possui um conjunto de entidade fraca denominada por FAMÍLIA que lhe 
está subordinado. Essa estrutura é modelada pelo seguinte diagrama. 
 
 
 
 
Observe que o atributo chave do conjunto de entidade DEPARTAMENTO é seu 
código. Mas o atributo chave do conjunto de entidade SECÇÃO é a concatena-
ção do código do departamento com código da secção, e por fim, o atributo 
chave do conjunto de entidade FAMÍLIA é a concatenação dos atributos chave 
dos conjuntos de entidades DEPARTAMENTO, SECÇÃO e FAMÍLIA. 
 
Notação o atributo de um conjunto de entidade fraca, é representado por uma 
elipse com o nome do atributo com uma linha tracejada 
 
Antes de efectuarmos alguns exercícios para consolidar a matéria, vamos apre-
sentar um resumo da notação do Diagrama de Entidade e Relacionamento. 
 
2.6 Exercícios Resolvidos 
 
Para consolidar os conhecimentos vamos começar por modelar problemas muito 
simples, e aproveitar a oportunidade para mostrar uma metodologia do desen-
volvimento do projecto de bases de dados. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 27 
 
2.6.1-Pretende-se criar uma pequena base de dados, para organizar cd’s. Sa-
bemos que, cada cd possui um título e diversas músicas; toda a música possui 
um título e uma duração; uma música pode ter sido composta por um ou mais 
compositores. Uma música pode ter sido interpretada por um ou mais cantores, 
e existem cantores que também são compositores. 
 
Resolução: vamos mostrar em primeiro lugar uma metodologia para o desenvol-
vimento do projecto de bases de dados. 
 
O primeiro passo consiste na extracção dos elementos que são fortes candidatos 
a serem entidades. Por definição, as entidades são objectos que se caracterizam 
por ter actividade própria, logo são identificados por substantivo comuns. Pela 
análise gramatical ao texto temos: 
 
CD; 
MÚSICA; 
COMPOSITOR; 
INTERPRETADOR. 
 
Mas os compositores e os interpretadores têm as mesmas características, são 
seres humanos. Então temos os seguintes conjuntos de entidades: 
 
CD; 
MÚSICA; 
ARTISTA. 
 
O segundo passo consiste na extracção dos atributos dessas entidades, ou seja, 
extrair no texto, as propriedades que caracterizam essas entidades. Por uma 
simples leitura, temos: 
 
CD (CodCd, Titulo) 
MÚSICA (CodMusica, Titulo, Duração) 
ARTISTA (CodArtista, Nome) 
 
O terceiro passo consiste na extracção dos relacionamentos entre os conjuntos 
de entidades. Vimos que a presença de um verbo é uma forte indicação de um 
relacionamento, então: 
 
Na frase “um CD possui um título e diversas músicas”, temos o verbo possuir, 
que nos permite modelar o relacionamento: 
 
possuir (CD, MÚSICA) 
 
Na frase “uma música pode ter sido composta por um ou mais compositores”, 
temos o verbo compor, que nos permite modelar o relacionamento: 
 
compor (MÚSICA, ARTISTA) 
 
e na frase “uma música pode ter sido interpretada por um ou mais interpretado-
res”, temos o verbo interpretar, que nos permite modelar o relacionamento: 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 28 
 
 
interpretar (MÚSICA, ARTISTA) 
 
O quarto passo consiste na extracção das cardinalidades entre os relacionamen-
tos. Pelo modelo descritivo, temos: 
 
possuir (CD, MÚSICA) 
compor (MÚSICA, ARTISTA) 1:N 
interpretar (MÚSICA, ARTISTA) 1:N 
 
logo estamos em condições de desenhar o correspondente Diagrama de Enti-
dade e Relacionamento. 
 
 
Mas, neste diagrama não está clara a modelagem dos compositores que são ao 
mesmo tempo interpretadores. Sabemos que a composição e a interpretação 
são actividades humanas. Logo essa actividade não é um atributo do conjunto 
de entidade MUSICA, nem um atributo do conjunto de entidade ARTISTA. É um 
atributo do relacionamento entre o conjunto de entidade MÚSICA e o conjunto 
de entidade ARTISTA. Então, faz todo o sentidofundir os relacionamentos com-
posição e interpretação num único, que denominaremos por produzir, e que pos-
sui o atributo tipo de actividade. 
 
produzir (MÚSICA, ARTISTA) TipoActividade 
 
Esse atributo pode receber os seguintes valores: 01 para compositor, 02 para 
interpretador e 03 para ambos. 
 
Agora, estamos em condições de redesenhar o Diagrama de Entidade e Relaci-
onamento, que satisfaz aos requisitos no modelo descritivo que analisamos. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 29 
 
 
 
2.6.2-Para identificar qualquer empresa o ministério das finanças disponibiliza 
um código que se denomina por Número de Identificação Fiscal (NIF), que per-
mite identificar essa empresa de forma única. Mas para além disso, toda a em-
presa possui um nome, um ramo de actividade, uma sede e eventualmente al-
gumas filais. A sede e as filiais possuem um endereço, e vários telefones de 
contacto. Os funcionários dessa empresa, possuem um código de identificação, 
um nome, um endereço e uma data de nascimento. Cada funcionário trabalha 
apenas na sede ou numa filial, e para contactá-los, cada funcionário possui um 
telefone directo. 
 
Resolução: vamos mais uma vez, mostrar a metodologia para o desenvolvimento 
do projecto de bases de dados. 
 
O primeiro passo consiste na extracção dos conjuntos de entidades. Pela análise 
gramatical, temos apenas três substantivos comuns que reúnem essas condi-
ções: 
 
EMPRESA; 
FILIAL; 
FUNCIONÁRIO. 
 
O segundo passo consiste na extracção dos atributos desses conjuntos de enti-
dades. Por uma simples leitura ao texto, temos: 
 
EMPRESA (NIF, Nome, Endereço (Rua, Casa, Bairro, Cidade), {Telefones}) 
FILIAL (CodFil, Nome, Endereço (Rua, Casa, Bairro, Cidade), {Telefones}) 
FUNCIONARIO (IdFunc, Nome, Endereço (Rua, Casa, Bairro, Cidade), Dat-
Nasc) 
 
Mas as entidades EMPRESA e FILIAL têm os mesmos atributos. Não é possível 
agrupa-los numa única entidade? 
 
Para eliminar essa redundância, podemos acrescentar no conjunto de entidade 
EMPRESA um atributo, denominado por tipo-de-empresa, que terá o valor ‘sede’ 
quando estivermos perante a Sede e ‘filial’ caso contrário, e anular a entidade 
FILIAL. 
 
Embora está solução simplifica o nosso modelo, ela não nos permite saber quem 
é a filial de quem, como veremos a seguir. 
 
O terceiro passo, consiste na extração dos relacionamentos entre os conjuntos 
de entidades. São fortes candidatos para relacionamentos todos os objectos que 
são expressos por verbos. Por uma análise gramatical ao texto temos: 
 
Na frase “cada empresa possui zero os mais filiais”, temos um verbo possuir, 
que nos mostra que existe o relacionamento: 
 
possui (EMPRESA, FILIAL) 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 30 
 
 
Mas esse relacionamento colide com a estratégia de termos adicionado no con-
junto de entidade EMPRESA o atributo tipo_de_empresa, e anulado o conjunto 
de entidade FILIAL. 
 
Para modelar essa realidade, e saber quem é filial de quem, devemos utilizar o 
auto relacionamento 
 
possui (EMPRESA, EMPRESA) 
 
onde temos um conjunto de objectos que fazem o papel de sede, e um conjunto 
de objectos que fazem o papel de filial. Com essa solução passamos a ter ape-
nas os seguintes conjuntos de entidades: 
 
EMPRESA (NIF, Nome, Endereço(Rua, Casa, Bairro, Cidade), {Telefones}); 
FUNCIONARIO (IdFunc, Nome, Endereço, DatNas). 
 
Vamos continuar a analisar o texto. Agora temos a frase “Cada funcionário tra-
balha na sede ou numa filial”. Como nesta frase temos o verbo trabalhar, que 
nos permite modelar o relacionamento: 
 
trabalha (EMPRESA, FUNCIONÁRIO) 
 
Mas na frase “cada funcionário possui um telefone directo”. Apesar de termos o 
verbo possuir, não estamos em presença de um relacionamento, porque o tele-
fone não é uma entidade. O facto de o trabalhador ter direito à um telefone di-
recto, faz com que o número do telefone varie de empregado para empregado, 
logo o telefone de serviço é um atributo do funcionário. 
 
FUNCIONARIO (CodFunc, Nome, Endereço (Rua, Casa, Bairro, Cidade), Dat-
Nasc, TelServico) 
 
O quarto passo consiste na extracção das cardinalidades dos relacionamentos. 
Pelo modelo descritivo temos: 
 
possui (EMPRESA, EMPRESA) 1:N 
trabalha (EMPRESA, FUNCIONÁRIO)1:N 
 
Logo estamos em condições de desenhar o Diagrama de Entidade e Relaciona-
mento. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 31 
 
 
 
2.6.3-Para efectuar um parto na maternidade Lucrécia Paim, temos os 
procedimentos: Quando uma senhora (parturiente) entra em período de parto, 
recebe uma etiqueta com um número; Quando um bebé nasce, são 
armazenadas as seguintes informações: nome, data de nascimento, peso, 
altura, código da mãe, número do bebé a nascer nesse dia; e o número da 
carteira profissional do médico; Quando uma parturiente chega a maternidade, 
são retiradas as seguintes informações: nome, endereço, telefones, data de 
nascimento e o médico que fará o parto; Para os médicos é importante saber o 
número da carteira profissional, nome, telefone e a especialidade. 
 
Resolução: como já temos alguma experiencia na aplicação da metodologia do 
projecto de bases de dados, vamos automatizar alguns passos, para que a 
implementação se torne mais rápido. 
 
Primeiro passo: extracção do conjunto de Entidades 
 
MÉDICO; 
BEBÉ; 
PARTURIENTE; 
 
Segundo Passo: Extração dos Atributos 
 
MÉDICO (CodMédico, Nome, {Telefone}, Especialidade); 
BEBÉ (CodBebé, Nome, dtNasc, Peso, Altura, CodMãe, NumBebé, 
CodMédico); 
PARTURIENTE (CodMãe, Nome, Endereço, {Telefones}, DatNac, CodMédico); 
 
Observe que o CodMãe não é um atributo da entidade BEBÉ, e que o CodMédico 
não é um atributo da entidade PARTURIENTE nem da entidade BEBÉ. Logo 
estamos em condições de refazer os atributos das entudades que fazem parte 
deste problema. 
 
MÉDICO (CodMédico, Nome, {Telefone}, Especialidade); 
BEBÉ (CodBebé, Nome, dataNasc, Peso, Altura, Numero); 
PARTURIENTE (CodMãe, Nome, Endereço, {Telefones}, DataNac); 
 
Terceiro passo: extracção dos Relacionamentos 
 
Atende (MÉDICO, PARTURIENTE) 
Éfilho (PARTURIENTE, BEBÉ) 
 Assiste (MÉDICO, BEBÉ) 
 
Quarto passo: Cardinalidade dos Relacionamentos 
 
Atende (MÉDICO, PARTURIENTE) 1:N 
Éfilho (PARTURIENTE, BEBÉ) 1:N 
Assiste (MÉDICO, BEBÉ) 1:N 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 32 
 
Logo, estamos em condições de desenhar o Diagrama de Entidade e Relaciona-
mento. 
 
 
 
2.6.4-Uma empresa está organizada por departamentos. A cada departamento 
está associado à um único nome, um número único, um empregado que é o 
gerente e a data em que este começou a gerir o departamento. Um departa-
mento pode ter várias localizações. Cada departamento controla um determi-
nado número de projectos. Cada projecto tem um nome único, um número único 
e uma localização única. Para os empregados é necessário guardar o nome (pró-
prio e de família), número do BI, endereço, salário, sexo, data de nascimento e 
o correspondente supervisor. Cada empregado pertence a um único departa-
mento, mas pode trabalhar em vários projectos, que não são necessariamente 
controlados pelo mesmo departamento. Para cada projecto é necessário tomar 
nota do número de horas por semana que cada empregado nele trabalha. Para 
efeitos de seguro é necessário conhecer os dependentes de cada empregado, 
ou seja, o nome, sexo, data de nascimento e grau de parentesco. 
 
Resolução: como já temos um pleno conhecimento sobre a metodologia do pro-
jectode bases de dados, vamos mais uma vez, compactar o processo de imple-
mentação. 
 
Primeiro passo: extracção do conjunto de Entidades e seus atributos 
 
DEPARTAMENTO (CodDepart, Nome, Gerente, Localização (Rua, Prédio, An-
dar, Porta)); 
PROJECTO (CodProj, Nome, Localização (Rua, Prédio, Andar, Porta), Depar-
tamento); 
EMPREGADO (NumBI, Nome, Endereço, Salário, Sexo, DataNasc, Supervisor, 
Departamento); 
 
Segundo Passo: extração do conjunto de Entidades Fortes, Fracas e seus atri-
butos 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 33 
 
 
Entidades Fortes 
EMPREGADO (NumBI, Nome, Endereço, Salário, Sexo, DataNasc, Supervisor, 
Departamento); 
 
Entidades Fracas 
 
DEPENDENTE (Empregado, Nome, Sexo, DataNasc, GrauParentesco); 
 
Mas, no esquema anterior existem alguns relacionamentos implícitos, porque 
temos atributos de uma entidade que se referem a outra entidade. 
 
Gerente na entidade DEPARTAMENTO; 
Departamento na entidade PROJECTO; 
Supervisor e Departamento na entidade EMPREGADO; 
Empregado na entidade DEPENDENTE. 
 
No modelo de Entidade e Relacionamento estas referências não devem ser re-
presentadas por atributos, mas sim por relacionamentos. 
 
Terceiro Passo: extracção dos Relacionamentos, respectivos atributos e sua car-
dinalidade. 
 
Dirige (EMPREGADO, DEPARTAMENTO, GerenteData) 1:1; 
Controla (DEPARTAMENTO, PROJECTO) 1:N; 
Supervisiona (EMPREGADO, EMPREGADO) 1:N; 
Trabalha_Para (EMPREGADO, DEPARTAMENTO) N:1; 
Trabalha_Em (EMPREGADO, PROJECTO, Horas) N:N; 
Dependente_De (DEPENDENTE, EMPREGADO) N:1. 
 
Logo, estamos em condições de apresentar o Diagrama de Entidade e Relacio-
namento 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 34 
 
 
2.7 Exercícios Propostos 
 
2.7.1- Desenvolva uma pequena base de dados para informatizar uma delegacia 
de polícia, que pretende obter as seguintes informações: 
 
Cadastrar as informações pessoais das pessoas que cometeram crimes, as suas 
armas e a suas vítimas. Para além disso, o sistema deve fornecer as informa-
ções: 
 
Quais os crimes que um determinado criminoso cometeu, sabendo que um crime 
pode ser cometido por mais de um criminoso; 
 
Quais crimes que uma determinada vítima sofreu, sabendo que várias vítimas 
podem ter sofrido um mesmo crime; 
 
2.7.2-Uma biblioteca de uma Universidade pretende que se desenvolva uma 
base de dados para controlar os empréstimos do seu acervo de livros. 
 
Para cada livro devem ser armazenadas as seguintes informações: ISBN (código 
internacional único de livros), título, autor(es), edição, ano de publicação e edi-
tora (nome, endereço, site e e-mail). 
 
Para cada autor livro devem ser armazenadas as seguintes informações: código, 
nome, sexo, e-mail, e telefones de contato. 
 
A biblioteca possui vários exemplares de cada livro para empréstimo. Cada 
exemplar possui um número de identificação, que é único para cada livro. Dois 
exemplares de livros diferentes podem ter o mesmo número de identificação. 
 
Para cada exemplar que a biblioteca emprestar devem ser armazenadas as se-
guintes informações: dados do exemplar, dados do utilizador que levou o livro 
(número de matrícula, nome, endereço e telefones), data do empréstimo, data 
limite para devolução e a data real da devolução. 
 
2.7.3-Pretende-se desenvolver uma base de dados para uma empresa que aluga 
automóveis que possui os seguintes requisitos: 
 
Essa empresa, possui automóveis e camionetas de carga para alugar. Para cada 
veículo alugado deve ser armazenado, o número da placa, o número do chassis, 
cor, modelo e marca. Para além disso, existe na empresa, uma tabela para 
classificar os veículos. Por exemplo, o tipo A3 corresponde a automóveis 
pequenos, de quatro portas e com ar-condicionado, enquanto que o tipo C4 
corresponde a camionetas com capacidade de carga ate 1 tonelada. 
 
O tipo de automóvel define o tamanho (pequeno, medio ou grande), o numero 
de portas e os acessórios disponíveis, como ar-condicionado, radio, GPS e 
cambio automático. Mas para as camionetas o tipo de automóvel define a 
capacidade de carga da camioneta e a dimensão (largura e altura) da sua 
carroceria. 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 35 
 
 
Para alugar um veículo, um cliente faz uma reserva por telefone ou pelo Site da 
Empresa, onde define as datas de inicio e término do aluguel, o tipo de veiculo 
que deseja alugar, a filial de retirada e a filial de entrega do veículo. Somente se 
relaciona o veículo ao cliente quando este for retirado. 
 
A empresa possui uma grande rede de lojas, e para cada loja pretende-se 
armazenar o nome, o código da loja, o endereço e os telefones de contacto. 
 
Para os clientes que desejam alugar veículos, deve-se armazenar, o nome, o 
sobrenome, data de nascimento, endereço, número do telemóvel, e número de 
Bilhete de Identidade. 
 
2.7.4-Pretende-se desenvolver uma base de dados para uma Universidade com 
os seguintes requisitos: 
 
Para cada professor deve-se armazenar as seguintes informações: número do 
professor, nome, idade, grau académico, e especialidade de pesquisa. 
 
Para cada projecto deve-se armazenar: número do projecto, nome do financia-
dor, data inicial, data final e orçamento; 
 
Para cada estudante de pós-graduação deve-se armazenar: número do estu-
dante, nome, idade, e o programa de pós-graduação (por exemplo, mestrado ou 
doutoramento). 
 
Cada projecto é gerido por um professor (conhecido como pesquisador principal 
do projecto). 
 
Cada projecto é orientado por um ou mais professores (conhecidos como coori-
entadores). 
 
Os professores podem gerir e/ou orientar múltiplos projectos. Cada projecto é 
também pode ser orientado por um ou mais estudantes de pós-graduação (co-
nhecidos como os assistentes de pesquisa do projecto). 
 
Quando os alunos de pós-graduação conduzem um projecto, um professor deve 
supervisionar seu trabalho no projecto. Os alunos de pós-graduação podem tra-
balhar em múltiplos projectos, e neste caso, eles terão um supervisor (potencial-
mente diferente) para cada projecto; 
 
Para cada departamento deve-se armazenar: um número do departamento, 
nome de departamento e endereço. 
 
Os departamentos possuem um professor (conhecido como chefe do departa-
mento) que coordena o departamento. 
 
Os professores podem trabalhar em mais do que departamento. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 36 
 
Os alunos de pós-graduação têm um departamento principal no qual estão a 
fazer o seu programa de pós-graduação. 
 
Cada aluno de pós-graduação tem um outro aluno de pós-graduação mais ex-
periente (conhecido como conselheiro do aluno) que o aconselha nos cursos a 
que deve assistir. 
 
2.7.5-Uma empresa de transportes rodoviários, pretende informatizar o percurso 
dos seus autocarros, que fazem o serviço de atendimento au publico numa pe-
quena cidade. 
 
Para cada autocarro deve-se armazenar as seguintes informações: matrícula, 
data de entrada em serviço, número de quilómetros, data da próxima revisão e 
o tipo de autocarro. 
 
Por tipo de autocarro deve-se armazenar marca, modelo, número de lugares 
sentados e um número de lugares de pé. 
Por cada percurso dos autocarros deve-se armazenar as seguintes informações: 
número do percurso (1,2,3…) e total de quilómetros percorridos. 
 
Ao longo do percurso temos várias paragens e por cada paragem deve-se arma-
zenar: número, nome, localização que é composta por rua e bairro. Mas quando 
um cliente aluga um autocarro e o seu motorista, esse percurso nãopercorre as 
paragens e recebe um número especial (zero). 
 
Para cada motorista deve-se armazenar as seguintes informações: número de 
BI, nome, endereço, números de telefones, data de entrada em serviço e os per-
cursos que os percursos que está habilitado a fazer. 
 
Na base de dados deve-se armazenar as informações das saídas dos autocarros 
da base, que são feitos em três turnos: 6 horas da manhã, 14 horas e a última 
saída é feita as 22 horas. 
 
Para cada saída de um autocarro, que podem ser muitas num único dia, deve-
se armazenar a seguinte informação: data, turno, condutor, número do auto-
carro, percurso atribuído, quilómetros do autocarro. 
 
Quando o autocarro regressa a base, recolhe-se as seguintes informações: data, 
turno, condutor, número do autocarro, quilómetros do autocarro. 
 
2.8 Leituras Recomendadas 
 
Para aprofundar os assuntos abordados neste capítulo, recomendados que o 
leitor consulte os seguintes livros: 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Capítulo 7- Modelagem de Dados usando o Modelo Enti-
dade-Relacionamento (ER), tradução da 6º edição americana São Paulo, 
Pearson Addison Wesley, 2011. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 37 
 
 Guimarães C. C.,- Fundamentos de Banco de Dados: Modelagem, Projeto 
e Linguagem SQL, Capítulo 2 – Modelagem de Dados, 1ª Edição, Editora 
da UNICAMP, 2003 
 
 Heuser C. A.;- Projeto de Banco de Dados, 6ª Edição, Instituto de Infor-
mática da UFRGS, Capítulo 2- Abordagem Entidade-Relacionamento e 
Capitulo 3- Construindo Modelo ER, Porto Alegre, Bookman, 2009. 
 
 Rob P., Coronel C.;- Sistema de banco de Dados: Projeto, implementação 
e Administração, Capítulo 4- Modelagem de Entidade e Relacionamento, 
tradução da 8ª edição americana Edição, Cengage Learning, 2010. 
 
 Setzer W., Silva F. S. C.;- Banco de Dados: Aprenda o que são, Melhore 
seu Conhecimento, Construa os seus, Capítulo 2- O modelo conceitual de 
entidades e relacionamentos, 1ª edição, São Paulo, Edgar Blucher, 2001 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 38 
 
 
3 
Capítulo 
Modelo de Entidade e Relacionamento 
Estendido 
 
“um projectista de Bases de Dados necessita de ter um bom conhecimento do minimundo que está a ser 
modelado para que possa tomar as decisões corretas!” 
 
 - Ciferri Cristina- 
 
3.1 Introdução 
 
O Modelo de Entidade e Relacionamento (ER) estudado no capítulo anterior 
possui os recursos suficientes para modelar um projecto de bases de dados para 
aplicações tradicionais, que envolvem o processamento de dados no comércio 
e na indústria. 
 
Contudo, este modelo de dados sofreu muitas evoluções para responder a 
modelagem de aplicações que envolvem as novas tecnologias de informação, 
que necessitam de requisitos mais complexos. 
 
Para modelar esses requisitos, foram desenvolvidos conceitos adicionais, que 
estão incorporados no Modelo de Entidade e Relacionamento Estendido (EER –
Extended Entity Relation), que estudaremos a seguir. 
 
3.2 Relacionamentos Ternário 
 
No capítulo anterior estudamos os relacionamentos binários. Vimos que um re-
lacionamento R entre os conjuntos de entidades A e B, a cardinalidade de A em 
R mostra quantas ocorrências de B podem estar associadas a cada ocorrência 
de A, e a cardinalidade de B com R, mostra quantas ocorrências de A podem 
estar associadas a cada ocorrência de B. 
 
Para os relacionamentos ternários o conceito de cardinalidade de um relaciona-
mento não é uma extensão trivial do conceito de cardinalidade nos relaciona-
mentos binários. 
 
Nos relacionamentos ternários, a cardinalidade refere-se a pares de entidades, 
ou seja, um relacionamento R entre os conjuntos de entidades A, B e C, a cardi-
nalidade A e B dentro do relacionamento R mostra quantas ocorrências de C 
podem estar associadas a um par de ocorrências de A e B. 
 
Vamos clarificar este conceito com um exemplo, proposto por Carlos Heuser 
[2009]. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 39 
 
 
 
Este relacionamento mostra que: 
 
A cardinalidade “1” na linha que liga o retângulo que representa o conjunto de 
entidades DISTRIBUIDOR ao losângulo distribuição, mostra que cada par de 
ocorrências (cidade, produto) está associado a no máximo um distribuidor. Isso 
quer dizer que é concedido a exclusividade a um distribuidor em distribuir vários 
produtos em várias cidades. 
 
A cardinalidade n na linha que liga o retângulo que representa o conjunto de 
entidades CIDADE ao losângulo distribuição, mostra que cada par de 
ocorrências (produto, distribuidor) está associado a mais do uma cidade. Isso 
quer dizer que numa determinada cidade, um distribuidor pode distribuir mais do 
que um produto. 
 
Para terminar, na cardinalidade n na linha que liga o retângulo que representa o 
conjunto de entidades PRODUTO ao losângulo distribuição, mostre que cada 
par de ocorrências (cidade, distribuidor) está associado a mais do que um 
produto. Isso quer dizer que um produto pode ser distribuído por apenas um 
distribuidor em várias cidades. 
 
Esta interpretação, nos permite concluir que um relacionamento ternário não é 
equivalente a três relacionamentos binários. 
 
3.2.1 Cardinalidade dos Relacionamentos 
 
UM-para-UM-para-UM (1:1:1) 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 40 
 
 
Este relacionamento modela uma relação entre os conjuntos de entidades TÉC-
NICO, PROJECTO e NOTEBOOK, e possui a seguinte interpretação: um técnico 
utiliza apenas um notebook para cada projecto. Cada NoteBook é utilizado por 
um técnico num determinado projecto. Observe que um técnico pode trabalhar 
em mais do que um projecto, mas em cada projecto tem de necessariamente 
utilizar diferentes NoteBooks. 
 
UM-para-MUITOS-para-UM (1:N:1) 
 
 
 
Este relacionamento modela uma relação entre os conjuntos de entidades 
PROJECTO, FUNCIONÁRIO e LOCAL, e possui a seguinte interpretação: cada 
funcionário atribuído a um projecto trabalha em apenas um lugar para esse 
projecto. Em um determinado local um funcionário trabalha em apenas um 
projecto. Num determinado projecto que está a ser desenvolvido num local, 
trabalham vários funcionários. 
 
UM-para-MUITOS-para-MUITOS (1:N:N) 
 
 
 
Este relacionamento modela uma relação entre os conjuntos de entidades 
GERENTE, ENGENHEIRO e PROJECTO, e possui a seguinte interpretação: 
cada engenheiro que trabalha num determinado projecto tem apenas um 
gerente. Cada gerente de um projecto pode gerir mais do que um engenheiro. 
Em cada projecto podemos ter mais do que um engenheiro que é gerido por 
apenas um gerente. 
 
MUITOS-para-MUITOS-para-MUITOS (N:N:N) 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 41 
 
 
 
Este relacionamento modela uma relação entre os conjuntos de entidades 
FUNCIONÁRIO, PROJECTO E HABILIDADE, e possui a seguinte interpretação: 
cada funcionário de uma empresa, utilizam muitas habilidades para qualquer 
projecto que desenvolvem. Num determinado projecto participam muitos 
funcionários que utilizam muitas habilidades. 
 
3.3 Especialização e Generalização 
 
No mundo real, existem alguns conjuntos de entidades que para além de possuir 
algumas propriedades comuns a outras entidades, possuem propriedades 
específicas que os caracterizam. 
 
Vejamos um exemplo: considere o conjunto de entidade FUNCIONÁRIO. Todo 
o funcionário tem os seguintesatributos: código do funcionário, nome, endereço 
e telefones. 
 
Mas um funcionário pode ser um gerente, um engenheiro, um técnico ou um 
secretário, e todos esses funcionários, para além de possuírem os atributos 
descritos anteriormente, possuem os atributos específicos que caracterizam a 
sua profissão, como por exemplo: os engenheiros possuem certificações e os 
secretários falam diversas línguas. 
 
Para modelar problemas com essas características utiliza-se uma técnica de 
modelagem, denominada por especialização. 
 
A especialização é um relacionamento que permite relacionar uma entidade 
genérica, chamada de superclasse, que possui os atributos comuns a todos os 
elementos dessa classe, e um conjunto de entidades especializadas, chamadas 
de entidade subclasse, que possuem atributos específicos. 
 
No exemplo anterior o conjunto de entidade FUNCIONÁRIO é uma entidade 
superclasse, enquanto que os conjuntos de entidades, GERENTE, 
ENGENHEIRO, TÉCNICO e SECRETÁRIO, são as entidades subclasse. 
 
No Diagrama de Entidade e Relacionamento (DER), a especialização pode ser 
representada por uma circunferência com uma letra no interior, notação utilizada 
por Elmasri [2011] que adoptamos nestas notas, mas existem outras notações, 
como um triangulo investido, utilizada por Silberschatz [2012]. Essa letra mostra 
o tipo de relacionamento entre os conjuntos de entidades subclasse, e pode ser 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 42 
 
“d” se as entidades subclasse forem mutuamente exclusivas, ou “o” se elas se 
sobrepõem. 
 
Por exemplo, no diagrama 
 
 
 
O conjunto de elementos das entidades subclasse são mutuamente exclusivas, 
pelo facto de não existir numa universidade um estudante que está matriculado 
ao mesmo tempo num curso de graduação (licenciatura) e num curso de pós-
graduação (mestrado ou doutoramento), enquanto que no diagrama: 
 
 
 
O conjunto de elementos das entidades subclasse se sobrepõem, porque 
podemos ter uma pessoa que pratica ao mesmo tempo, mais do que um 
desporto. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 43 
 
Associado ao conceito de especialização está a ideia da herança de 
propriedades. Herdar as propriedades significa que cada ocorrência da entidade 
subclasse para além dos atributos específico, possui os atributos da entidade 
superclasse. Desse modo cada elemento do conjunto de entidades FUTEBOL 
possui os atributos: nome, sexo, numero do BI e posição. 
 
Para além disso, a especialização pode ser classificada como total ou parcial. 
Esta classificação está relacionada com a obrigatoriedade de cada ocorrência 
da entidade superclasse ocorrer nas entidades subclasse. 
 
Na especialização total, denotada por t, cada elemento do conjunto de entidade 
superclasse ocorre em pelo mesmos um elemento do conjunto de entidades 
subclasse. Como exemplo temos a classificação de clientes para pagar 
impostos. Segundo o ministério das finanças qualquer cliente é uma pessoa 
física (singulares) ou uma pessoa jurídica (empresas). 
 
Na especialização parcial, denotada por p, cada elemento do conjunto de 
entidade superclasse, pode não correr em pelo menos um elemento do conjunto 
das entidades subclasse. 
 
A Generalização é funcionalmente interpretada como o processo inverso a es-
pecialização, no qual se identificam as características comuns que passarão a 
caracterizar uma nova entidade superclasse com base nas características das 
entidades subclasse originais. 
 
Enquanto a especialização define os conjuntos das entidades subclasse a partir 
do conjunto de entidade superclasse, ou seja, um processo de cima para baixo 
(top_down), a generalização define o conjunto de entidade, superclasse a partir 
dos conjuntos de entidades subclasse, ou seja num processo inverso (Botton-
Up). 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 44 
 
 
Vamos analisar este conceito com um exemplo proposto por Elmasri [2011]. Os 
conjuntos de entidades CARRO e CAMIÃO podem ser descritas pelos seguintes 
diagramas: 
 
 
Como essas entidades possuem muitos atributos comuns, podemos criar uma 
entidade genérica, que possui todos os atributos comuns, e especificar os 
conjuntos de CARRO e CAMIÃO com apenas os atributos específicos, ou seja: 
 
 
 
3.4 Herança 
 
No mundo real existem problemas em que a especialização ou a generalização 
são aplicadas de forma sucessiva. Esse conceito recebe o nome de nome de 
Herança, e vamos analisa-lo com dois exemplos. 
 
 
O primeiro, proposto por Silberschat [ 2021]. No diagrama: 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 45 
 
 
 
Temos a entidade ESPECIAL que retrata os clientes que têm uma conta bancaria 
com um certo valor, e por esse facto, têm alguns privilégios. Um dos privilégios 
é que apenas esses clientes possuem um cartão de crédito desde que o seu 
saldo seja superior a um determinado valor mínimo. Para além disso, esses 
clientes herdam todas as propriedades dos clientes que possuem uma conta 
corrente, logo têm direito a um cartão multicaixa. 
 
Os clientes que possuem uma conta corrente herdam os atributos dos clientes 
que possuem uma conta bancária, então possuem um número de conta e um 
saldo. 
 
Como os clientes que possuem uma conta especial herdam os atributos dos 
clientes que possuem uma conta corrente, e os clientes que possum uma conta 
corrente herdam os atributos dos clientes que possuem uma conta bancária, 
então por transitividade os clientes que possuem uma conta especial herdam 
todos os atributos dos clientes que têm uma conta bancária. 
 
Isso nos permite concluir que os clientes que possuem uma conta especial 
possuem os seguintes atributos: número de conta, valor do saldo, número do 
cartão multicaixa, número do cartão de credito, e um valor limite para o saldo 
que lhe permite gozar dos privilégios clientes deste ranking. 
 
O segundo, proposto por por Elmasri [2011]. No diagrama: 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 46 
 
 
 
 
Temos uma Universidade, onde uma pessoa pode ser um funcionário, um ex-
estudante ou um estudante. Mas, podemos ter pessoas que são ao mesmo 
tempo funcionários, ex-estudantes ou estudantes, logo estamos em presença de 
um conjunto de entidades subclasse que se sobrepõem. 
 
Contudo, podemos temos alguns estudantes, normalmente os bons estudantes, 
que são requisitados para monitores. Esses estudantes fazem parte da entidade 
subclasse ALUNOCOLABORADOR que se relaciona com as entidades 
superclasse FUNCIONÁRIO e ESTUDANTE. 
 
Observe que este diagrama possui uma hierarquia de especialização. Com 
excepção da entidade ALUNOCOLABORADOR que se relaciona com duas 
entidades superclasse. 
 
Conclusão: a aplicação sucessiva deste tipo de modelagem, um conjunto de 
entidade subclasse pode ser especializado em vários conjuntos de entidades 
subclasses, que ao mesmo tempo, tornam-se conjuntos de entidades 
superclasses e uma entidade subclasse. 
 
Observação: na especialização e na generalização, as entidades subclasse não 
possuem um atributo chave, esse atributo é herdado da entidade superclasse. 
Para além disso, neste tipo de relacionamento temos uma cardinalidade de um-
para-um. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 47 
 
 
 
3.5 União 
 
Mas existem algunsproblemas no mundo real que é possível modelar um único 
relacionamento superclasse/subclasse com mais do que uma entidade 
superclasse, em que a entidade superclasse representa uma coleção de 
elementos que são um subconjunto da união de tipos de entidades diferentes, 
denominadas por subclasse de tipo União. 
 
Vamos clarificar este conceito com mais um exemplo também proposto por 
Elmasri [2011]. 
 
Suponhamos que temos três tipos de entidades: PESSOA, BANCO e 
EMPRESA. 
 
Para registrar qualquer automóvel, o proprietário automóvel pode ser uma 
pessoa, um banco (se o automóvel tiver sido adquirido por crédito e o cliente 
ainda não saldou a dívida), ou uma empresa. Logo, para modelar essa realidade 
é necessário criar uma entidade que vai herdar as propriedades das três 
entidades anteriores. 
 
A forma mais correcta de modelar essa realidade consiste em criar uma entidade 
PROPRIETÁRIO que é a união das entidades: PESSOA, BANCO e EMPRESA. 
 
No modelo de Entidade e Relacionamento Estendido essa entidade é ligada as 
entidades superclasse com uma circunferência com a letra U no seu interior. 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 48 
 
 
3.6 Agregação 
 
Um relacionamento é uma associação entre entidades. Pelos conceitos que 
estudamos, o Modelo de Entidade e Relacionamento não é capaz de associar 
dois relacionamentos entre si. 
 
Mas existem alguns problemas reais, que um relacionamento se associa a outros 
relacionamentos. 
 
Vamos clarificar este conceito com um exemplo foi proposto por Ramakrishnan 
[2008]. Suponhamos que temos um conjunto de projectos e que cada projecto 
pode ser financiado por um ou vários departamentos. Mas todo o departamento 
que financia um projecto pode nomear um funcionário para acompanhar a forma 
como o financiamento está a ser utilizado. 
 
Por uma simples interpretação do texto, vemos que temos três conjuntos de 
entidades: DEPARTAMENTO, PROJECTO e FUNCIONÁRIO. Como no texto 
não existem substantivos que caracterizam essas entidades, não temos como 
extrair os seus atributos. Mas vamos supor que cada entidade possui apenas 
dois atributos: o código e o nome. Agora vamos extrair os relacionamentos 
existentes neste problema. O verbo financiar mostra que existe um 
relacionamento entre os conjuntos de entidades DEPARTAMENTO e 
PROJECTO, com uma cardinalidade de muitos-para-muitos. Mas como modelar 
o verbo controlar? Só temos duas hipóteses. 
 
A primeira consiste em associar o conjunto de entidade FUNCIONÁRIO ao 
conjunto de entidade DEPARTAMENTO. Com esse relacionamento obtemos 
apenas as informações dos funcionários que foram nomeados para cada 
departamento. 
 
A segunda consiste em associar conjunto de entidade FUNCIONÁRIO ao 
conjunto de entidade FINANCIAMENTO. Com esse relacionamento obtemos 
apenas as informações dos funcionários que vão controlar os financiamentos. 
 
Então para obter as informações dos funcionários que foram nomeados para 
controlar cada projecto que os departamentos financiam, devemos relacionar o 
conjunto de entidade FUNCIONÁRIO aos conjuntos de entidades 
DEPARTAMENTO e PROJECTO, ou seja, a relação financiar. 
 
Logo, para modelarmos esse problema, necessitamos de um novo recurso 
denominado por agregação, ou entidade associativa, cujo diagrama 
descrevemos em seguida. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 49 
 
 
 
Definição: uma agregação é um relacionamento que está identificado com um 
retângulo tracejado que permite relacionar-se com um outro relacionamento. 
 
3.7 Exercícios Resolvidos 
 
3.5.1- Uma empresa de aluguer de viaturas, possui automóveis e camionetas de 
carga para alugar. Para cada veículo alugado deve ser armazenado, o número 
da placa, o número do chassis, cor, modelo e marca do autocarro. 
 
Para além disso, existe na empresa uma tabela para classificar os veículos. Por 
exemplo: 
 
Um veículo do tipo A3, corresponde a automóveis pequenos, de quatro portas, 
com ar-condicionado 
 
Um veículo do tipo C4 corresponde a camionetas com capacidade de carga até1 
tonelada. 
 
O tipo de veículo define o tamanho (pequeno, medio ou grande), o número de 
portas e os acessórios disponíveis, como ar-condicionado, radio, GPS e cambio 
automático. 
 
Mas para as camionetas o tipo de veículo define a capacidade de carga da 
camioneta, e a dimensão (largura e altura) da sua carroceria. 
 
Para alugar um veículo, um cliente faz uma reserva por telefone ou pelo Site da 
Empresa, onde define as datas de inicio e término do aluguel, o tipo de veiculo 
que deseja alugar, a filial onde vai retirar o veículo, e a filial onde o vai entregar. 
Somente se deve relacionar o veículo ao cliente quando este for levantado. 
 
Esta empresa possui uma grande rede de lojas, e para cada loja pretende-se 
armazenar o nome, o código da loja, o endereço e os telefones de contacto. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 50 
 
 
Para os clientes que desejam alugar os veículos, deve-se armazenar, o nome, o 
sobrenome, data de nascimento, endereço, número do telemóvel, e número de 
imposto predial (NIF). 
 
Resolução: uma possível solução, para este problema consiste nos seguintes 
passos: 
 
Primeiro Passo: extracção das entidades e dos seus atributos 
 
FILIAL (Numero, Nome, {Telefone}, Endereço (Casa, Rua, Bairro, Cidade)) 
VEÍCULO (Placa, Chassi, Marca, Cor, Modelo) 
CLIENTE (NIF, Nome, Data de nascimento, {Telefone}) 
RESERVA (DataInicio, DataFim) 
 
Segundo Passo: extracção das especializações\generalizações 
 
Entidade Superclasse 
 
TIPO_VEICULO (TipoCodigo) 
 
Entidade Subclasse 
 
CAMIONETA (Dimensão (Largura, Altura), Tipo-de-carga) 
AUTOMOVEL (Tamanho, NumPortas, Ar-condicionado, Radio, gps, Cambio) 
 
Terceiro Passo: extracção dos Relacionamentos, respectivos atributos e cardi-
nalidade. 
 
contém (FILIAL, VEICULO, DataInicio, Datafim) N:N 
entregou (FILIAL, RESERVA) 1 :N 
retirou (FILIAL, RESERVA) 1:N 
alugou(VEICULO, RESERVA, DatRetirada, DatEntregaPrevista,DatEntrega) 1:N 
Faz (CLIENTE, RESERVA)1:N 
tem (RESERVA, TIPO_VEICULO) 1:N 
Possui (VEÍCULO, TIPO_VEICULO) 1:N 
 
Logo, estamos em condições de desenhar o diagrama de Entidade e Relacio-
namento estendido. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 51 
 
 
3.5.2-Pretende-se desenvolver uma base de dados para a polícia de transito, e 
para o efeito, foi feito um levantamento de requisitos que apurou o seguinte mi-
nimundo. 
 
A Brigada de Trânsito situada junto ao Hipermercado Jumbo, pretende construir 
uma base de dados para melhorar a sua operacionalidade no processamento de 
infracções ao código de estrada. Está base de dados deve armazenar informa-
ções relativas aos veículos, como seja: a matrícula, a marca, o modelo, o propri-
etário actual e a respectiva data de aquisição. 
 
Para os proprietários devem ser armazenados as seguintes informações: o nú-
mero do Bilhete de Identidade, o nome, a morada, e o número de contribuinte. 
 
Também pretende-se que a base de dados deva armazenar informações relati-
vas aos condutores, como seja: o número do Bilhete de Identidade, o nome, a 
endereço, o número da carta de condução, as infracções ao código de estrada 
por si cometidas, assim como uma pontuação que deve ser agravada à medida 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 52 
 
que o condutor comete novas infracções. As infracções são catalogadas por ti-
pos: ligeira, grave emuito grave, e a cada categoria de infracção, está associada 
uma pontuação de 1, 2 e 5 pontos. 
 
Uma infracção é cometida por um condutor. Associado a cada infracção devem 
ficar registados a data, o local, um breve resumo da ocorrência, e o agente que 
registou a infracção. Para os agentes devem ser guardadas as seguintes infor-
mações: número do Bilhete de Identidade, o nome, o endereço e o número de 
agente da polícia. 
 
Resolução: uma possível solução, para este problema consiste nos seguintes 
passos: 
 
Primeiro Passo: extracção dos conjuntos de entidades e seus atributos 
 
TIPO_INFRACÇÃO (Categoria, Pontuação) 
 
Segundo Passo: extracção dos conjuntos de Entidades fortes e fracas e 
respectivos atributos 
 
Entidades Fortes: 
 
VEICULO (Matricula, Marca, Modelo) 
TIPO_INFRACÇÃO (Categoria, Pontuação) 
 
Entidades Fracas: 
 
INFRACÇÃO (Data, Local, Descrição) 
 
Terceiro Passo: extracção das Especializações e respectivos atributos 
 
Entidade Superclasse 
PESSOA (BI, Nome, Endereço (Rua, Casa, Bairro)) 
 
Entidade Subclasse 
 
PROPRIETÁRIO(NumContribuinte) 
CONDUTOR(NumCarta) 
POLICIA(NumAgente) 
 
Quarto Passo: extracção dos Relacionamentos, respectivos atributos e cardina-
lidade. 
 
Possuir (PROPRIETÁRIO, VEÍCULO) 1:N 
Cometeu (CONDUTOR, VEICULO,INFRACÇÃO) N:1:N 
Registou (POLÍCIA, INFRACÇÃO) 1:N 
É_Do_Tipo (TIPO_INFRACÇÃO, INFRACÇÃO) 1:N 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 53 
 
Logo, estamos em condições de apresentar o diagrama de Entidade e Relacio-
namento 
 
 
3.5.3- Um banco comercial pretende criar uma base de dados para informatizar 
o seu funcionamento. Para esse efeito foi feito um levantamento de requisitos, 
que apurou o seguinte minimundo. 
 
O banco comercial está organizado em agencias. Cada agencia está localizada 
em uma determinada cidade, e é identificada pelo seu código, nome e endereço. 
O banco controla os movimentos das suas agencias. 
 
Os clientes do banco são identificados pelos seus códigos internos. Para cada 
cliente, o banco pretende armazenar: nome, número do bilhete de identidade, 
sexo, endereço, data de nascimento, e números de telefone. Os clientes que 
possuem contas no banco podem pedir empréstimos. Um cliente pode ter um 
gestor de conta, ou um trabalhador do banco pode fazer a função do seu gestor. 
Isso quer dizer que se um cliente trabalhar no banco ele pode ser o seu gestor. 
 
Os trabalhadores do banco podem ser identificados por seus números de 
funcionários. Para além disso, a administração do banco pretende armazenar o 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 54 
 
nome, o número do telefone, o nome dos descendentes, o grau de parentesco, 
as datas de aniversário, o número do funcionário que é o seu gerente. 
 
A administração do banco também pretende controlar a data de admissão do 
funcionário, e com isso saber o seu tempo de serviço. 
 
O banco possui dois tipos de conta. A conta de poupança e conta corrente. As 
contas podem ter mais do que um cliente (conta conjunta), e um cliente pode ter 
mais do que uma conta. Cada conta de poupança possui uma taxa de juros 
mensais e o banco pretende controlar os juros que os clientes têm direito. Para 
além disso, o banco pretende controlar a movimentação (depósitos, retiradas, 
transferências) feitos pelos clientes nas suas contas correntes. 
 
Um empréstimo pode ser feito por uma agencia bancária específica e pode ser 
solicitada por um ou por mais clientes. Um empréstimo é identificado por um 
único número, um valor, o número de prestações e o valor de cada prestação. 
Mas para cada empréstimo o banco pretende controlar os pagamentos das 
prestações. 
 
Resolução: uma possível solução, para este probela, pode ser descrito pelos 
seguintes passos 
 
Primeiro Passo: extracção das Entidades e seus atributos 
 
BANCO (CodBanco, Nome) 
CLIENTE(CodCliente, Nome, BI, Endereço (Rua, Bairro, Cidade), {Telefone}, 
 DataNascimento) 
 
Segundo Passo: extracção das Entidades Fortes e Fracas e seus atributos 
 
Entidades Fortes 
 
AGENDA (NomeAgencia, Endereço (Rua, Bairro, Cidade), {Telefone})) 
FUNCIONARIO (CodFunc, Nome, {Telefone}} 
 
Entidades Fracas 
 
EMPRESTIMO (NumEmprestimo, Valor, TotPrestações, ValPrestacao) 
DEPENDENTE (Nome, GrauPatentesco, DataAniversario) 
 
Terceiro passo: extração das generalizações, especializações e seus atributos 
 
Entidade Superclasse 
 
CONTA (NumConta) 
 
Entidades Subclasses 
 
CONTA_POUPANÇA (TaxJuros, Saldo) 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 55 
 
CONTA_CORRENTE (Saldo, ValorDescoberto) 
 
Quarto passo: extracção dos Relacionamentos, respectivos atributos e sua car-
dinalidade. 
 
Controla (BANCO, AGENCIA, DataAbertura) 1:N 
possui (AGENCIA, CLIENTE), 1:N 
Chefia (FUNCIONARIO, FUNCIONARIO, papel (Gerente, Funcionário)), 1:N; 
Contém (AGENCIA, CONTA) 1:N 
abre (CLIENTE, CONTA, DatAbertura), N:1 
Pode-Ser (FUNCIONARIO, CLIENTE), 1:1 
Trabalha (AGENCIA, FUNCIONARIO), 1:N 
solicita (CLIENTE, EMPRESTIMO, DataPedido) 1:N 
Paga (CLIENTE, EMPRESTIMO, DataPagamento, NumeroPrestação) N:N 
movimenta (CLIENTE, CONTA CORRENTE, DataMovimento, valor) N:N 
juros (CLIENTE, CONTA POUPANÇA, DataJuro, valor), N:N 
depende_de (FUNCIONARIO, DEPENDENTES),1:N 
 
Logo, estamos em condições de desenhar o diagrama de entidade e relaciona-
mento. Mas, a para absorção de conhecimentos, deixamos essa actividade 
como exercício. 
 
3.6 Exercícios Propostos 
 
3.6.1-Para abrir o futuro aeroporto internacional Agostinho Neto, a IATA 
(Associação Internacional de Transportes Aéreos), necessita que seja concebida 
uma base de dados para organizar a informação dos aviões que irão utilizar as 
estruturas desse aeroporto. 
 
Cada avião tem um número de matricula, um modelo específico e uma bandeira 
(angolana, portuguesa, espanhola, etc). 
 
O aeroporto pode acolher um certo número de modelos de aviões, e cada 
modelo tem um código de modelo (ex. B-777, A320), o número de lugares, e o 
peso. 
 
Para os técnicos que trabalham no aeroporto pretende-se armazenar: o número 
do Bilhete de Identidade, nome, endereço, números dos telefones, certificado 
internacional, data de emissão. 
 
Cada técnico é perito num ou mais modelos de aviões, vários técnicos podem 
ser peritos em modelos iguais, e supervisionados por um técnico que é o chefe 
da equipa. 
 
Os controladores aéreos necessitam de fazer um exame médico por ano. Para 
cada controlador pretende-se armazenar: o numero do BI, nome, números de 
telefone, e a data do seu exame mais recente. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 56 
 
Todos os empregados do aeroporto (incluindo os técnicos) pertencem a um 
sindicato e pagam mensalmente as suas quotas. Para eles é necessário 
armazenar: o número do Bilhete de Identidade, número de membro do sindicato, 
a data de ingresso no sindicado e data do pagamento da última quota. 
 
Para o sindicato, é necessário armazenar: nome e a data de fundação. 
 
O Departamento de manutenção de aeronaves, realiza periodicamente, um certo 
número de testes para verificar o estado dos aviões. Cada teste tem um número 
atribuído pela Associação Nacional de Aeroportos (ANA), o nome do teste e 
pontuação recebida. A IATA exige que o aeroporto mantenha informação sobre 
cada vez que um avião é sujeito a um determinado teste. Para cada teste é 
necessário armazenar: data de manutenção, número de horas gastas pelo 
técnico, pontuação obtida pelo avião, e o técnico que realizou a manutenção. 
 
3.6.2- A Faculdade de Engenhariaficou com a responsabilidade de desenvolver 
uma base de dados para automatizar as matriculas dos estudantes na UCAN. 
 
Cada estudante é identificado por um número. Para além disso, ele possui um 
BI, um nome, uma data de nascimento, vários números de telefones e está 
matriculado num único curso. 
 
Cada disciplina é identificada por um código, um nome, um ano, um semestre, 
uma carga horária semestral, e está inserida numa grelha curricular de um curso. 
 
Um estudante pode matricular-se a várias disciplinas desde que tenham pré-
requisito para fazê-las (ex: para matricular-se a fundamentos de Programação II 
é necessário que tenha feito fundamentos de programação I). Se a matricula de 
um estudante for aceite pelo sistema deve ser armazenar a data que o estudante 
efectou essa matricula. 
 
Uma disciplina pode ser ministrada em mais do que um curso (ex: fundamentos 
de programação I é ministrada no curso de Informática e no curso de 
Telecomunicações). 
 
Cada curso pertence a uma faculdade (ex: Informática é da Faculdade de 
Engenharia) e é identificada por: código, nome, regime (diurno ou pós-laboral), 
número de semestres. Cada Faculdade é identificada por um código e um nome. 
Mas, também se pretende armazenar a data que o curso começou a funcionar. 
 
Todas as disciplinas dos cursos são semestrais. Quando se oferece uma 
disciplina é necessário que existe um docente disponível para ministra-la. Para 
os docentes, pretendemos armazenar: código interno, BI, nome, telefones, grau 
académico (licenciado, mestre ou doutor) e uma categoria (professor e 
assistente). Mas, ao ser oferecido uma disciplina podemos ter outros docentes a 
ministra-la. A Faculdade possui dois tipos de docentes: os professores e os 
assistentes. Os primeiros são os regentes das disciplinas enquanto os segundos 
dão apenas as aulas de laboratório. Quando o estudante efectua uma matricula 
o sistema deve mostrar o nome do regente e o(s) nome(s) dos assistentes. Mas 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 57 
 
a faculdade pode oferecer a mesma disciplina em várias turmas (ex: turma A, B, 
C…), e nessa altura o sistema deve mostrar os professores que irão ministrar as 
disciplinas em cada turma. 
 
3.6.3- Uma pequena empresa de táxis aéreos pretende informatizar o seu sis-
tema de reservas de passagem. Este sistema funcionará com uma base de da-
dos centralizada que poderá ser acedida pelos funcionários no interior da em-
presa ou no exterior. 
 
Para cada funcionário, o sistema deve armazenar as seguintes informações: có-
digo interno, número do BI, primeiro nome, último nome, endereço, números de 
telefones, emails e data de admissão na empresa. 
 
Para cada passageiro, o sistema deve armazenar as seguintes informações: nú-
mero do BI, primeiro nome, último nome, endereço, números de telefones e 
emails. 
 
Para cada reserva o sistema deve armazenar as seguintes informações: código 
da reserva que é gerado automaticamente, número do BI do passageiro, código 
do voo, data e hora da viagem. 
 
Para cada aeronave o sistema deve armazenar as seguintes informações: ma-
tricula, marca, modelo, total de lugares. 
 
Um voo é identificado por um código, possui uma origem, um destino do voo e 
escalas se houver. Por exemplo, o voo DT594 sai de Luanda com destino a Ben-
guela e tem uma escala no Sumbe. 
 
Muitas vezes ao fazer uma reserva, os clientes querem saber qual é o tipo de 
aeronave que será utilizado. 
 
Para garantir a operacionalidade da companhia, está possui um horário mensal 
onde para cada voo estão programadas: dia, hora de partida, hora de chegada, 
destino, escalas se houver, tipo de avião, estado do voo que pode ser aberto, 
encerrado ou cancelado. 
 
Se o voo estiver no estado aberto, os clientes podem fazer as suas reservas e 
estas têm um prazo de validade se o cliente não feito o pagamento. Durante esse 
prazo de validade essas reservas não podem ser canceladas. Se o cliente fizer 
o pagamento a reserva é confirmada e o sistema reserva um lugar no avião. 
 
A base de dados deve garantir que o voo será encerrado, ou que o cliente não 
poderá fazer mais reserva, quando o número de reservas confirmadas for igual 
ao número de lugares do avião. 
 
A base de dados também deve notificar aos clientes, através dos seus emails se 
um determinado voo foi cancelado 
 
3.7 Leituras Recomendadas 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
 Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 58 
 
 
Para aprofundar os temas tratados neste capítulo, recomendados que o leitor 
consulte um dos seguintes livros: 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Capítulo 8- O modelo de Entidade Relacionamento Esten-
dido (EER), Tradução da 6ª edição americana, São Paulo, Pearson Addi-
son Wesley, 2011. 
 
 Heuser C. A.;- Projeto de Banco de Dados, 6ª Edição, Instituto de Infor-
mática da UFRGS, capítulo 2: Abordagem Entidade-Relacionamento e 
capitulo 3- Construindo Modelo ER, Porto Alegre, Bookman, 2009. 
 
 Ramakrishnan R., Gehrke J.;- Sistema de Gerenciamento de Banco de 
Dados, Tradução da 3ª edição americana, Capítulo 2- Introdução ao Pro-
jeto de Banco de Dados, McGraw-Hill, 2008. 
 
 Rob P., Coronel C.;- Sistema de banco de Dados: Projeto, implementação 
e Administração, Capítulo 6- Modelagem Avançada, tradução da 8ª edi-
ção americana Edição, Cengage Learning, 2010. 
 
 Silberschatz A., Korth F. K, Sudarshan S.;- Sistema de Banco de Dados, 
tradução da 5ª edição Parte2 Projeto de Banco de Dados, Capítulo 6 – 
Projeto de Banco de Dados e o Modelo E-R, Rio de Janeiro, Elsevier, 
2012 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 59 
 
 
4 
Capítulo 
Modelo Relacional 
 
“O objectivo elementar de um projecto de bases de dados é possibilitar ao utilizador obter informações 
exactas em um limite de tempo aceitável, de forma a executar a sua tarefa dentro de uma organização” 
 
- Teorey & Fry - 
 
4.1 Introdução 
 
O modelo relacional foi proposto pelo matemático e cientista da computação bri-
tânico, Edgar Frank Codd, pesquisador da IBM, que em 1970 publicou um artigo 
com o título “A Relational Model of Data for Large Shared Data Banks", na re-
vista ACM (Association for Computing Machinery), Vol. 13, no. 6, pp. 377-387. 
 
Este modelo é muito simples, e sua construção baseia-se no conceito de relação 
matemática, enquanto que a sua base teórica, baseia-se na teoria dos conjuntos 
e na lógica matemática de primeira ordem. 
 
Neste capítulo iremos abordar as características elementares desse modelo e 
de suas restrições. 
 
4.2 Conceitos 
 
O modelo relacional representa uma base de dados como um conjunto de tabe-
las relacionadas entre si. O termo tabela, é a denominação mais utilizado para 
os produtos comerciais, mas no mundo académico utiliza-se o termo relação. 
 
Definição: uma tabela é um conjunto bidimensional, onde cada linha (tupla) re-
presenta uma entidade ou um relacionamento, e cada coluna representa um atri-
buto. Cada linha é composta por uma série de campos (que na terminologia aca-
démica é valor do atributo) 
 
No exemplo a seguir, a tabela armazena os dados dos empregados de uma em-
presa. 
 
Cod Empregado Nome Endereço Data Nascimento 
100101 Manuel Silva Avenida da liberdade, prédio 32, prenda 21- 06-1970 
200724 Carlos Alberto Av. Combatentes, casa 1600, São Paulo 12-02-2010 
700231 Katia Rafael Rua de massangano, casa 125, cruzeiro 21-05-2002 
170912 Quissua Dias Avenida 1 de janeiro, casa 75, cassequel 27-04-2009 
 
http://www.acm.org/
https://pt.wikipedia.org/wiki/Association_for_Computing_Machinery
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para usoexclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 60 
 
No cabeçalho dessa tabela temos os nomes dos atributos, nas colunas os valo-
res que esses atributos podem receber (domínio) nas linhas (tuplas) os dados 
de cada empregado (em termos académicos, os atributos de cada tupla). 
 
Propriedades das tabelas: as linhas de uma tabela possuem as seguintes pro-
priedades: 
- Não estão ordenadas; 
- Não podemos ter duas ou mais linhas com os mesmos conteúdos; 
 
enquanto que as colunas de uma tabela: 
 - todas as colunas têm um nome; 
- Os seus valores são atômicos, ou seja, não podem ser compostos; 
- Os seus valores são monovalorados, logo só possuem um único valor; 
 
A tabela anterior não está em conformidade com as essas propriedades, porque 
na coluna endereço representa um atributo composto. Para normaliza-la, ou 
seja, adequa-la ao modelo relacional temos de decompô-la em várias colunas, 
uma para cada atributo simples. 
 
Cod Empregado Nome Rua casa bairro Data Nascimento 
100101 Manuel Silva Avenida da Liberdade 32 Prenda 21- 06-1970 
200724 Carlos Alberto Avenida Combatentes 85 São Paulo 12-02-1992 
700231 Katia Rafael Rua Massangano 125 Cruzeiro 21-05-1985 
170912 Quissua Dias Avenida 21 janeiro 75 Gamek 27-04-2009 
 
Vejamos mais um exemplo, a tabela a seguir, mostra os endereços dos empre-
gados de uma empresa. 
 
Cod Empregado Nome Telefone 
100101 Manuel Silva 932-223-756 / 912- 212-767 
200724 Carlos Alberto 912- 732-457 
700231 Katia Rafael 923- 567- 621 / 912- 723-912 
170912 Quissua Dias 921-20-27-72 
 
Está tabela não está em conformidade com as propriedades do modelo relacio-
nal, porque na coluna telefone representa um atributo multivariado. Para ade-
qua-la ao modelo relacional temos de fragmenta-lo em vários colunas, uma para 
cada telefone. 
 
Cod Empregado Nome Telefone Unitel Telefone Movicel 
100101 Manuel Silva 932-223-756 912- 212-767 
200724 Carlos Alberto 912- 732-457 
700231 Katia Rafael 923-567-621 912- 723-912 
170912 Quissua Dias 921-20-27-72 
 
4.3 Chave Primária 
 
Definição: uma chave primária (PK) é representada por uma coluna ou uma 
combinação de colunas cujos valores são únicos em toda a tabela. Em outros 
termos, uma coluna ou uma combinação de colunas, cujos valores distinguem 
uma linha das restantes linhas da tabela. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 61 
 
Por exemplo, na tabela de empregados 
 
 
Cod Empregado Nome Rua casa bairro Data Nascimento 
100101 Manuel Silva Avenida da Liberdade 32 Prenda 21- 06-1970 
200724 Carlos Alberto Avenida Combatentes 85 São paulo 12-02-1992 
700231 Katia Rafael Rua massangano 125 Cruzeiro 21-05-1985 
 Chave primária 
 
Enquanto que na tabela de dependentes 
 
Cod Empregado Nome dependente Grau parentesco Data Nascimento 
100101 Osvaldo Silva filho 01- 01-2005 
100101 Hernami Silva sobrinha 16-07-2010 
100101 Karine santos enteada 14-08-2012 
700231 Djamila Carina filho 21-12-2015 
 Chave primária 
 
A chave primária é a concatenação do código de empregado pelo nome do de-
pendente. 
 
Definição: uma chave primária (PK) pode ser uma concatenação de várias co-
lunas de uma tabela, desde que essa concatenação ocorra uma e apenas uma 
vez na tabela e seja mínima. 
 
4.4 Chave Estrangeira 
 
Definição: uma chave estrangeira (FK) pode ser representada por uma coluna 
ou uma coleção de várias colunas de uma tabela, cujos valores aparecem como 
chave primária de uma outra coluna. 
 
Por exemplo, suponhamos que temos a uma tabela com os departamentos de 
uma empresa de distribuição alimentar: 
 
 
Cod Departamento Nome Departamento Telefone serviço Email institucional 
01 compras 923 724 028 compras@ve.co.ao 
02 vendas 923 724 029 vendas@ve.co.ao 
03 contabilidade 923 724 022 contab@ve.co.ao 
04 Pessoal 923 724 027 pessoa@ve.co.ao 
05 Informática 923 724 011 Info@ve.co.ao 
 Chave primária 
 
A tabela de empregados dessa empresa possui os seguintes atributos 
 
Cod empregado Nome empregado Telefone 
Empregado 
Cod. Departa-
mento 
Categoria profis-
sional 
100720 Wilson Carlos Monteiro 912 721 072 01 Assistente 
170001 Rebeca da Graça Martins 923 031 712 02 caixa 
1800042 Luana Soares Castro 921 514 222 02 caixa 
170320 Edmilson André Alfredo 912 720 072 03 Contabilista 
140923 Cristina dos santos 923 025 021 05 Programador 
170912 Quissua Dias 923 777 228 05 Help-desk 
 Chave primária Chave estrangeira 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 62 
 
 
Na tabela anterior, a coluna código de empregado, representa a chave primária, 
enquanto que a coluna código do departamento representa a chave estrangeira. 
 
Mas uma base de dados está bem projectada, quando não possui informação 
redundante, e o seu armazenamento ocupa a menor quantidade de bytes possí-
vel. Observe que na tabela anterior, a coluna categoria profissional é uma cadeia 
de caracteres que ocupa uma determinada quantidade de bytes. Se nessa base 
de dados, estiverem contidos os dados dos trabalhadores de uma empresa mul-
tinacional, ela certamente irá ter muita informação redundante e com isso irá 
gastar muitos recursos de memória desnecessários. Como podemos evitar essa 
redundância de informação e optimizar os recursos de memória para armazenar 
a tabela. 
 
A solução mais correcta, e que satisfaz as boas prácticas de desenho de bases 
de dados, consiste em declarar uma tabela com as categorias profissionais. 
 
Cod categoria Nome categoria 
01 Assistente 
02 Contabilista 
03 Caixa 
04 Eletricista 
05 Gerente 
06 Programador 
07 Help-desk 
 Chave primária 
 
Substituir na tabela de empregados, o nome da categoria profissional pelo res-
pectivo código. 
 
Desse modo, essa tabela possui duas chaves estrangeiras: o código do depar-
tamento e o código da categoria profissional. 
 
Cod empre-
gado 
Nome empregado Telefone 
empregado 
Cod. Departa-
mento 
Cod. Categoria 
profissional 
100720 Wilson Carlos Monteiro 912 721 072 
170001 Rebeca da Graça Martins 923 031 712 02 03 
1800042 Luana Soares Castro 921 514 222 02 03 
170320 Edmilson André Alfredo 912 720 072 03 02 
140923 Cristina dos Santos 923 025 021 01 01 
170912 Quissua Dias 923 777 228 05 07 
 Chave primária chave estrangeira chave estrangeira 
 
Observação: Não se pode ter numa tabela um valor de uma chave estrangeira 
que não esteja contida numa outra tabela como chave primária. 
 
Para garantir a consistência de uma base de dados, a existência de uma chave 
estrangeira, deve satisfazer as seguintes regras: 
 
1ª- Para incluir uma linha(tupla) de uma tabela com uma chave estrangeira(FK) 
é necessário garantir que essa chave já tenha sido incluída como chave primária 
(PK) de uma outra tabela; 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 63 
 
2ª- Para alterar o conteúdo de uma chave estrangeira (FK), é necessário garantir 
que esse valor esteja contido numa outra tabela como chave primária; 
 
3º- Para excluir uma chave primária (PK) de uma tabela, é necessário garantir 
que todas as ocorrências dessa chave nas restantes tabelas, onde ela é referen-
ciada como chave estrangeira(FK) tenham sido excluídas. 
 
A existência de uma chave estrangeira pode levarmos a crer que ela sempre faz 
referencia a uma chave primária de uma outra tabela. Mas na verdade uma 
chave estrangeira pode fazer referencia a uma chave primária que está contidana mesma tabela. 
 
Por exemplo a tabela a seguir mostra que os empregados Wilson, Rebeca e 
Edmilson são subordinados da funcionária Cristina, e que a funcionária Cristina 
é subordinada da funcionária Quissua. 
 
Cod empre-
gado 
Nome empregado Telefone 
Empregado 
Cod. Departa-
mento 
Cod. Gerente 
100720 Wilson Carlos Monteiro 912 721 072 01 140923 
170001 Rebeca Martins 923 031 712 02 140923 
1800042 Luana Soares Castro 921 514 222 02 170912 
170320 Edmilson André Alfredo 912 720 072 03 140923 
140923 Cristina dos santos 923 025 021 05 170912 
170912 Quissua Dias 923 777 228 05 - 
 Chave primária Chave estrangeira Chave estrangeira 
 
4.5 Chave Candidata 
 
Uma chave candidata é uma coluna ou uma concatenação de colunas que po-
dem ser utilizadas como chave para aceder à uma linha (tupla) da tabela. Por 
exemplo, na tabela de empregados 
 
Cod empre-
gado 
Nome empregado Telefone 
Empregado 
Cod. INSS Cod. Ca-
tegoria 
Telefone 
Pessoal 
100720 Wilson Carlos Monteiro 912 721 072 272470 01 912327627 
170001 Rebeca Martins 923 031 712 697271 03 933561297 
1800042 Luana Soares Castro 921 514 222 192824 03 912728420 
170320 Edmilson André Alfredo 912 720 072 574529 02 923745777 
140923 Cristina dos santos 923 025 021 439727 06 933456819 
170912 Quissua Dias 923 777 228 319746 07 912345867 
 chave primária chave candidata chave candidata 
 
as colunas número de telefone pessoal e número do INSS são chaves 
candidatos. 
 
4.6 Domínio de um Atributo 
 
Quando uma tabela é definida, para cada atributo deve ser declarado o conjunto 
de valores que esse atributo poderá receber. Esse conjunto de valores é deno-
minado por domínio de um atributo. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 64 
 
Por exemplo, na tabela de empregados, o nome do empregado deve ser decla-
rado como cadeia com 20 caracteres, enquanto que o número de telefone um 
conjunto com 9 dígitos. 
 
O domínio de um atributo é um tipo de dados elementar. No modelo relacional 
temos os seguintes tipos de dados elementares: inteiro, real, caracter, data, hora, 
etc. Para além desses tipos de dados elementos, alguns atributos podem rece-
ber valores nulos (NULL em Inglês). 
 
Observação: nos SGBD todas as colunas que compõem uma chave primária 
devem ter um valor obrigatório. 
 
4.7 Restrições de Integridade 
 
Uma restrição de integridade é uma regra que serve para garantir a consistência 
de uma base de dados, e é fornecida pelo SGBD. As restrições de integridade 
possuem as seguintes classificações: 
 
1º- Integridade de domínio: através dessa restrição, define-se os valores que 
uma coluna (atributo) deve receber; 
 
2º- Integridade Vazio: através deste tipo de restrição, define-se se os campos de 
uma coluna (atributo) podem receber um valor nulo; 
 
3º- Integridade Chave: através deste tipo de restrição, define-se se os valores de 
uma chave primária e uma chave estrangeira devem ser únicos; 
 
4º- Integridade Referencial: através deste tipo de restrição, define-se que os va-
lores dos campos que aparecem numa chave estrangeira devem estar contidos 
numa chave primária. 
 
4.8 Esquema de uma Base de Dados 
 
Um Esquema da Base de Dados é uma representação gráfica ou textual de um 
modelo de dados. Embora a representação gráfica apresenta inúmeras vanta-
gens, nestas notas iremos resolver os nossos problemas com uma notação tex-
tual, que é uma variante da notação utilizada proposta por Heuser[2009]. 
 
Recomendação: para desenhar-se projectos de modelagem de Bases de Dados 
em ambientes profissionais, deve-se utilizar uma ferramenta gráfica. 
 
Embora existam no mercado muitas ferramentas gráficas (ferramentas CASE), 
aconselhamos que utilize a ferramenta draw.io porque ser gratuita e muito fácil 
de ser utilizada. 
 
Agora vamos nos concentrar, através de um exemplo, na apresentação de um 
esquema de base de dados relacional, com a notação que iremos utilizar nestas 
notas. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 65 
 
A tabela DEPARTAMENTO 
 
Cod Departamento Nome Departamento Telefone Serviço Email institucional 
01 compras 923 724 028 compras@ve.co.ao 
02 vendas 923 724 029 vendas@ve.co.ao 
03 contabilidade 923 724 022 contab@ve.co.ao 
04 Pessoal 923 724 027 pessoa@ve.co.ao 
05 Informática 923 724 011 Info@ve.co.ao 
 Chave primaria 
 
é representada pelo seguinte esquema relacional 
 
DEPARTAMENTO (CodDepto, NomeDepto, TelDepto, EmailDepto) 
PK (CodDepto) 
 
e corresponde ao seguinte diagrama de Entidade e Relacionamento 
 
 
 
 
enquanto que tabela DEPARTAMENTO 
 
Cod Departamento Nome Departamento Telefone serviço Email institucional 
01 compras 923 724 028 compras@ve.co.ao 
02 vendas 923 724 029 vendas@ve.co.ao 
03 contabilidade 923 724 022 contab@ve.co.ao 
04 Pessoal 923 724 027 pessoa@ve.co.ao 
05 Informática 923 724 011 Info@ve.co.ao 
 Chave primária 
 
e a tabela EMPREGADO 
 
Cod empregado Nome empregado Telefone 
empregado 
Cod. Departa-
mento 
Categoria profis-
sional 
100720 Wilson Carlos Monteiro 923 724 028 01 Assistente 
170001 Rebeca da Graça Martins 923 724 029 02 caixa 
1800042 Luana Soares Castro 923 724 022 02 caixa 
170320 Edmilson André Alfredo 923 724 028 03 Contabilista 
140923 Cristina dos santos 923 724 022 05 Programador 
170912 Quissua Dias 923 724 028 05 Help-desk 
 Chave primária Chave estrangeira 
 
são representadas pelo esquema relacional 
 
DEPARTAMENTO (CodDepto,NomeDepto,TelDepto,EmailDepto) 
PK (CodDepto) 
 
EMPREGADO (CodEmp, NomeEmp, TelEmp, CodDepto,Categoria) 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 66 
 
PK (CodEmp) 
FK (CodDep) REFERENTE DEPARTAMENTO(CodDepto) 
 
e correspondem ao seguinte Diagrama de Entidade e Relacionamento 
 
 
 
Mas existem alguns casos reias, quando utilizamos entidades fracas, que a 
chave estrangeira é obtida através da concatenação de vários campos. 
 
Por exemplo: A tabela EMPREGADO 
 
Cod Empregado Nome Rua casa bairro Data Nascimento 
100101 Manuel Silva Avenida da Liberdade 32 Prenda 21- 06-1970 
200724 Carlos Alberto Avenida Combatentes 85 São paulo 12-02-1992 
700231 Katia Rafael Rua massangano 125 Cruzeiro 21-05-1985 
 Chave primária 
 
e a tabela DEPENDENTE 
 
Cod Empregado Nome dependente Grau parentesco Data Nascimento 
100101 Osvaldo Silva filho 01- 01-2005 
100101 Hernami Silva sobrinha 16-07-2010 
100101 Karine santos enteada 14-08-2012 
700231 Djamila Carina filho 21-12-2015 
 Chave primária 
 
são representadas pelo esquema relacional 
 
EMPREGADO (CodEmp, NomeEmp, Rua, Casa, Bairro, DataNasc) 
PK (CodEmp) 
 
DEPENDENTE (CodEmp, NomeDepend, GrauParente, DataNasc) 
PK (CodEmp,NomeDepend) 
FK (CodEmp) REFERENTE EMPREGADO(CodEmp) 
 
e correspondem ao seguinte diagrama de Entidade e Relacionamento 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 67 
 
 
 
4.9 Leituras Recomendadas 
 
Para aprofundar os temas tratados neste capítulo, recomendados que o leitor 
consulte um dos seguintes livros: 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Capítulo 3 - O Modelo Relacional e as restrições em Banco 
de Dados Relacionais, Tradução da 6ª edição americana, São Paulo, 
Pearson Addison Wesley, 2011. 
 
 Heuser C. A.;- Projeto de Bancode Dados, 6ª Edição, Instituto de Infor-
mática da UFRGS, capítulo 4- Abordagem Relacional, Porto Alegre, Book-
man, 2009. 
 
 Ramakrishnan R., Gehrke J.;- Sistema de Gerenciamento de Banco de 
Dados, Capítulo 3: O Modelo Relacional, Tradução da 3ª edição ameri-
cana, São Paulo, McGraw-Hill, 2008. 
 
 Rob P., Coronel C.;- Sistema de banco de Dados: Projeto, implementação 
e Administração, Capítulo 3 – Modelo de Banco de Dados Relacional, tra-
dução da 8ª edição americana Edição, Cengage Learning, 2010. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 68 
 
 
5 
Capítulo 
Conversão de Modelos 
 
“Uma base de dados representa algum aspecto do mundo real, às vezes chamado de minimundo ou 
de universo de discurso (UoD – Universe of Discourse).” 
 - Elmasri & Navathe - 
 
5.1 Introdução 
 
Neste capítulo veremos como se converte um Diagrama de Entidade e Relacio-
namento para um esquema de um Base de Bados Relacional, que na literatura 
da Ciência de Computação denomina-se por projecto lógico. 
 
Para efectuar essa conversão, veremos um conjunto de regras, baseadas nas 
experiencias acumuladas de muitos autores, que mostram como se deve imple-
mentar esse projecto lógico, para que se possa obter uma base de dados relaci-
onal eficiente. 
 
Para efectuar essa conversão, utilizaremos a seguinte notação: a chave primária 
(PK) será assinalado um traço, enquanto que a chave estrangeira (FK) com a 
letra em bold. 
 
5.2 Entidade Forte 
 
Dado uma entidade forte E com atributos a1, a2, …, an. Para converter esta 
entidade para o modelo relacional, necessitamos de uma tabela, com mesmo 
nome da entidade forte, que possui n colunas distintas que irão armazenar os 
valores dos n atributos dessa entidade. O atributo chave passa a ser a chave 
primária dessa tabela. 
 
Por exemplo: 
 
 
que corresponde ao esquema relacional 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 69 
 
EMPREGADO (CodEmpregado, NomeEmpregado) 
PK (CodEmpregado) 
 
 
5.3 Entidade com Atributos Compostos 
 
Dado um conjunto de entidade E com n atributos a1, a2, a3, …,an, e seja aj um 
atributo composto, para 1≤ j ≤ n. Para converter está entidade para o modelo 
relacional, necessitamos de apenas uma tabela, com o mesmo nome da 
entidade E, e o seu número de colunas deve ser igual ao número de atributos 
simples do conjunto de entidade E. 
 
Por exemplo: 
 
 
 
que corresponde ao esquema relacional 
 
ESTUDANTE (CodEstudante, NomeEstudante, Rua, Casa, Bairro) 
PK (CodEstudante) 
 
5.4 Entidades com Atributos Multivalorados 
 
Dado um conjunto de entidade E com atributos a1, a2, a3, …, an, e seja aj um 
atributo multivalorado, para 1≤ j≤ n. Para converter está entidade para o modelo 
relacional, necessitamos de duas tabelas. A primeira denominada por E, possui 
n-1 colunas distintas para armazenar os valores atributos a1, a2, a3, …, aj-1, 
aj+1,…,an; A segunda denominada por F, possui apenas duas colunas, uma para 
armazenar o atributo chave do conjunto de entidade E, e outra para armazenar 
cada o valor de uma ocorrência do atributo multivalorado cj. 
 
Por exemplo: 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 70 
 
 
 
 
que corresponde ao esquema relacional 
 
EMPREGADO (CodEmpregado, NomeEmpregado) 
PK (CodEmpregado) 
 
TELEFONE (CodEmpregado, Telefone) 
FK (CodEmpregado) REFERENTE EMPREGADO(CodEmpregado) 
 
5.5 Entidade Fraca 
 
Dado um conjunto de entidade forte E1 com chaves a1, a2,…., an, que se relaci-
ona com um conjunto de entidade fraca E2 com atributos b1,b2,…,bk. Para con-
verter a entidade fraca para o modelo relacional, independentemente da cardi-
nalidade dessa relação, necessitamos de uma tabela com n+k colunas distintas, 
que irão armazenar os valores das n chaves da entidade forte E1, e os valores 
dos k atributos da entidade fraca E2. 
 
Por exemplo: 
 
 
 
 
que corresponde ao esquema relacional 
 
EMPREGADO (CodEmpregado, NomeEmpregado) 
PK (CodEmpregado) 
 
DEPENDENTE (CodEmpregado, NomeDependente, Sexo) 
PK (CodEmpregado, NomeDependente) 
FK (CodEmpregado) REFERENTE EMPREGADO (CodEmpregado) 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 71 
 
Observação: a chave primária da entidade fraca será composta pela chave local 
e a chave primária da entidade forte que a subordina. 
 
Vamos aprofundar esse assunto com um exemplo onde se aplica o conceito de 
entidade fraca de forma sucessiva. 
 
 
 
que corresponde ao esquema relacional 
 
PROVINCIA (CodProvincia, NomeProvincia) 
PK (CodProv) 
 
MUNICIPIO (CodProvincia, CodMunicipio, NomeMunicipio) 
PK (CodProvincia,CodMunicipio) 
FK (CodProvincia) REFERENTE PROVINCIA (CodProvincia) 
 
COMUNA (CodProvincia, CodMunicipio,CodComuna, NomeComuna) 
PK (CodProvincia,CodMunicipio, CodComuna) 
FK (CodProvincia, CodMunicipio) REFERENTE MUNICIPIO(CodProvincia, 
CodMunipio) 
 
 
5.6 Relacionamentos 1:1 
 
Dado um conjunto de entidade E1 com atributos a1, a2, a3,…,an, que se relaciona 
com conjunto de entidade E2 com atributos b1,b2,b3,…,bk, com cardinalidade 
Um-para-Um. Para converter este relacionamento necessitamos de duas 
tabelas. A primeira denotada por E1, possui n colunas distintas para conter os 
valores dos n atributos da entidade E1; a segunda denominada por E2, possui 
k+1 colunas distintas, para conter os valores dos k atributos da entidade E2 mais 
o valor do atributo chave da entidade E1. 
 
Por exemplo: 
 
 
 
que corresponde ao esquema relacional 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 72 
 
EMPREGADO (CodEmpregado, NomeEmpregado) 
PK (CodEmpregado) 
 
DEPARTAMENTO (CodDepto, NomeDepto, CodEmpregado) 
PK (CodDepto) 
FK (CodEmpregado) REFERENTE EMPREGADO(CodEmpregado) 
 
5.7 Relacionamentos 1:1 com atributo 
 
Dado um conjunto de entidade E1 com atributos a1, a2, a3,…,an, que se relaciona 
com conjunto de entidade E2 com atributos b1,b2,b3,…,bk, com cardinalidade 
Um-para-Um, e supomos que nesse relacionamento temos um atributo r. Para 
converter este relacionamento para o modelo relacional, necessitamos de duas 
tabelas. A primeira denotada por E1, possui n colunas distintas para conter os 
valores dos n atributos da entidade E1; a segunda denominada por E2, possui 
k+2 colunas distintas, para conter os valores dos k atributos da entidade E2, o 
valor do atributo chave da entidade E1, e o valor do atributo r desse 
relacionamento. 
 
Por exemplo: 
 
 
 
que corresponde ao esquema relacional 
 
PESSOA (NumBI, Nome) 
PK (NumBI) 
 
CARTA (NumCarta, DataEmissao, Validade, Categoria, NumBI, DataEntrega) 
PK (NumCarta) 
FK (NumBI) REFERENTE PESSOA (NumBI) 
 
 
5.8 Relacionamentos 1:n 
 
Dado um conjunto de entidade E1 com atributos a1, a2, a3,…,an, que se relaciona 
com conjunto de entidade E2 com atributos b1,b2,b3,…,bk, com cardinalidade 
Um-para-Muitos. Para converter este relacionamento necessitamos de duas 
tabelas. A primeira denotada por E1, possui n colunas distintas para conter os 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 73 
 
valores dos n atributos da entidade E1; a segunda denominada por E2, possui 
k+1 colunas distintas, para conter os valoresdos k atributos da entidade E2 mais 
o valor do atributo chave da entidade E1. 
 
Por exemplo: 
 
 
 
que corresponde ao esquema relacional 
 
FACULDADE (CodFaculdade, NomeFaculdade) 
PK (CodFaculdade) 
 
CURSO (CodCurso, NomeCurso, CodFaculdade) 
PK (CodCurso) 
FK (CodFaculdade) REFERENTE FACULDADE (CodFaculdade) 
 
5.9 Relacionamentos 1:N com atributo 
 
Dado um conjunto de entidade E1 com n atributos a1, a2, a3, …, an que se 
relaciona com um conjunto de entidade E2 com k atributos b1,b2, b3,..,bk, com 
cardinalidade Um-para-Muitos, e supomos que nesse relacionamento temos um 
atributo r. Para converter esse relacionamento para o modelo relacional, 
necessitamos de duas tabelas. A primeira denotada por E1, possui n colunas 
distintas para armazenar os valores dos n atributos da entidade E1; a segunda 
denotada por E2, possui k+2 colunas distintas, para armazenar os valores dos k 
atributos da entidade E2, mais o valor do atributo chave da entidade E1, e o valor 
do atributo r desse relacionamento. 
 
 
Por exemplo: 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 74 
 
que corresponde ao esquema relacional 
 
DEPARTAMENTO (CodDepartamento, NomeDepartamento) 
PK (CodDepartamento) 
 
EMPREGADO (CodEmpregado, NomeEmpregado, CodDepartamento, DataInicio) 
PK (CodEmpregado) 
FK (CodDepartamento) REFERENTE DEPARTAMENTO (CodDepartamento) 
 
5.10 Relacionamentos N:N 
 
Dado um conjunto de entidade E1 com atributos a1, a2, a3, ... ,an, que se relaciona 
com um conjunto de entidade E2 com atributos b1,b2, b3,…,bk, com cardinalidade 
Muitos-para-Muitos. Para converter este relacionamento para o modelo 
relacional, necessitamos de três tabelas. A primeira denotada por E1, possui n 
colunas distintas para armazenar os valores dos n atributos da entidade E1; a 
segunda denotada por E2, possui k colunas distintas para armazenar os valores 
dos k atributos da entidade E2, a terceira denotada por denotada por E3, possui 
apenas duas colunas, uma para armazenar os valores do atributo chave da 
entidade E1 e outra para armazenar os valores do atributo chave da E2. 
 
Por exemplo: 
 
 
 
que corresponde ao esquema relacional 
 
MEDICO (CodMedico, NomeMedico) 
PK (CodMedico) 
 
PACIENTE (CodPaciente, NomePaciente) 
PK (CodPaciente) 
 
CONSULTA (CodMedico, CodPaciente) 
FK (CodPaciente) REFERENTE PACIENTE (CodPaciente) 
FK (CodMedico) REFERENTE MEDICO (CodMedico) 
 
5.11 Relacionamentos N:N com Atributo 
 
Dado um conjunto de entidade E1 com n atributos a1, a2, a3, …, an que se 
relaciona com um conjunto de entidade E2 com k atributos b1,b2, b3,...,bk, com 
cardinalidade Muitos-para-Muitos, e suponhamos que nesse relacionamento 
temos um atributo r. Para converter esse relacionamento para o modelo 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 75 
 
relacional, necessitamos de três tabelas. A primeira denotada por E1, possui n 
colunas distintas para armazenar os valores dos n atributos da entidade E1; a 
segunda denotada por E2, possui k colunas distintas para armazenar os k 
atributos da entidade E2; a terceira denotada por E3, possui apenas três colunas 
distintas. Uma para armazenar os valores do atributo chave da entidade E1, 
outra para armazenar os valores do atributo chave da entidade E2, e uma 
terceira para armazenar os valores do atributo desse relacionamento. 
 
Por exemplo: 
 
 
 
que corresponde ao esquema relacional 
 
EMPREGADO (CodEmpregado, NomeEmpregado) 
PK (CodEmpregado) 
 
PROJECTO (CodProjecto, NomeProjecto) 
PK (CodProjecto) 
 
DESENVOLVE (CodProjecto, CodEmpregado, TotalHoras) 
FK (CodProjecto) REFERENTE PROJECTO (CodProjecto) 
FK (CodEmpregado) REFERENTE EMPREGADO (CodEmpregado) 
 
 
5.12 Auto- Relacionamentos 1:1 
 
Dado um conjunto de entidade E1 com atributos a1, a2, a3,…,an, que relaciona-
se com ele mesmo, com cardinalidade Um-para-Um. Para converter este 
relacionamento para o modelo relacional, necessitamos de uma tabela 
denominada por E1 com n+1 colunas distintas para armazenar os n valores dos 
atributos da entidade E1, mais o valor do atributo chave que faz o outro papel. 
 
Por exemplo: 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 76 
 
 
 
que corresponde ao esquema relacional 
 
PESSOA (CodPessoa, NomePessoa, CodConjuge) 
PK (CodPessoa) 
FK (CodConjuge) REFERENTE PESSOA(CodPessoa) 
 
5.13 Auto- Relacionamentos 1:N 
 
Dado um conjunto de entidade E1 com atributos a1, a2, a3,…,an, que relaciona-
se com ele mesmo, com cardinalidade Um-para-Muitos. Para converter este 
relacionamento para o modelo relacional, necessitamos de uma tabela 
denominada por E1 com n+1 colunas distintas para armazenar os n valores dos 
atributos da entidade E1, mais o valor do atributo chave que faz o outro papel. 
 
Por exemplo: 
 
 
 
que corresponde ao esquema relacional 
 
EMPREGADO (CodEmpregado, NomeEmpregado, CodSupervidor) 
PK (CodEmpregado) 
FK (CodSupervidor) REFERENTE EMPREGADO(CodEmpregado) 
 
5.14 Auto- Relacionamentos N:N 
 
Dado um conjunto de entidade E1 com atributos a1, a2, a3,…,an, que relaciona-
se com ele mesmo, com cardinalidade Muitos-para-Muitos. Para converter este 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 77 
 
relacionamento para o modelo relacional, necessitamos de duas tabelas. A 
primeira denotada por E1, possui n colunas distintas para armazenar os valores 
dos n atributos da entidade E1; a segunda denotada por E2, possui duas colunas 
distintas para armazenar os valores do atributo chave da entidade E1 e os 
valores do atributo chave da entidade E2. 
 
Por exemplo: 
 
 
 
que corresponde ao esquema relacional 
 
PRODUTO (CodProduto, NomeProduto) 
PK (CodProduto) 
 
COMPOSICAO (CodProduto, CodComposicao) 
FK (CodProduto) REFERENTE PRODUTO (CodProduto) 
FK (CodComposicao) REFERENTE PRODUTO (CodProduto) 
 
Observação: é sempre possível, mas não recomendável, converter os relacio-
namentos do tipo 1:1 ou 1:N com a mesma regra de conversão dos relaciona-
mentos do tipo M:M, ou seja, criar uma nova uma tabela para representar o re-
lacionamento. No entanto, essa opção só deve ser utilizada quando se sabe que 
a cardinalidade do relacionamento pode ser alterada no futuro. 
 
5.15 Relacionamentos com grau maior de que dois 
 
Dado um conjunto de entidade E1 com atributos a1, a2, a3, …, an, que se 
relaciona com um conjunto de entidade E2 com atributos b1,b2, b3,…,bk, que por 
sua vez se relaciona com um conjunto de entidade E3 com atributos 
c1,c2,c3,…,cm. Para converter este relacionamento para o modelo relacional, 
independentemente da cardinalidade, necessitamos de quatro tabelas. A 
primeira, denotada por E1 possui n colunas distintas para armazenar os valores 
dos n atributos da entidade E1; a segunda denotada por E2, possui k colunas 
distintas para armazenar os valores dos k atributos da entidade E2; a terceira 
denotada por E3, possui m colunas distintas para armazenar os valores dos m 
atributos da entidade E3; e a quarta denotada por E4, possui apenas três 
colunas, uma para armazenar os valores do atributo chave da entidade E1, outra 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 78 
 
para armazenar os valores do atributo chave da E2, e uma última para 
armazenar os valores do atributo chave da E3. 
 
Por exemplo: 
 
 
 
que corresponde ao esquema relacional 
 
PACIENTE (CodPaciente, NomePaciente) 
PK (CodPaciente) 
 
MEDICAMENTO (CodMedicamento, NomeMedicamento)PK (CodMedicamento) 
 
MEDICO (CodMedico, NomeMedico) 
PK (CodMedico) 
 
CONSULTA (CodPaciente, CodMedico, CodMedicamento) 
FK (CodPaciente) REFERENTE PACIENTE (CodPaciente) 
FK (CodMedicamento) REFERENTE MEDICAMENTO (CodMedicamento) 
FK (CodMedico) REFERENTE MEDICO(CodMedico) 
 
5.16 Especialização e Generalização 
 
Dada um conjunto de entidade genérica (supertipo) E com atributos a1, a2, a3, 
…,an, que está relacionado com n-1 entidades especializadas (subtipo) E2, , E3; 
…, En com um determinado número de atributos. Para converter esse relaciona-
mento para o modelo relacional, necessitamos de uma tabela E1 com n colunas 
distintas para armazenar os valores dos n atributos do conjunto de entidade ge-
nérica. Para cada conjunto de entidade especializada, necessitamos de uma ta-
bela, com um número de linhas igual ao número de colunas dessa entidade es-
pecializada. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 79 
 
Por exemplo: 
 
 
 
 
que corresponde ao seguinte esquema relacional 
 
CONTA (NumConta, Saldo) 
PK (NumConta) 
 
PRAZO (NumConta, TaxaJuro) 
FK (NumConta) REFERENTE CONTA (NumConta) 
 
CORRENTE (NumConta, CartaoMulticaixa) 
FK (NumConta) REFERENTE CONTA (NumConta) 
 
 
Observação: este esquema pode ser utilizado para qualquer tipo de especiali-
zação (total, parcial, disjunta, sobreposta). 
 
 
5.17 Exercícios Resolvidos 
 
Exemplo1: O modelo de entidade e relacionamento: 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 80 
 
 
corresponde ao seguinte esquema relacional. 
 
EMPREGADO (NumBI, Proprio, Familia, DataNasc, Rua, Casa, bairro, Sexo, Salario, 
DataInicio, CodSup, CodDep) 
PK (NumBI) 
FK (CodSup) REFERENTE FUNCIONARIO (CodFunc) 
Fk (CodDep) REFERENTE DEPARTAMENTO (CodDep) 
 
DEPARTAMENTO(CodDep, NomDep, Rua, Porta, Andar,Predio) 
PK (CodDep) 
 
PROJETO(CodProj, Nome, Rua, Casa, Bairro, CodDep) 
PK (CodProj) 
FK (CodDep) REFERENTE DEPARTAMENTO(CodDep) 
 
CONTROLA (NumBI, CodProj, Horas) 
FK (NumBI) REFERENTE FUNCIONARIO (NumBI) 
FK (CodProj) REFERENTE PROJETO (CodProj) 
 
DEPENDENTE (NumBI, NomeDependente, sexo, DataNasc, Parentesco) 
PK (NumBI, NomeDependente) 
FK (NumBI) REFERENTE FUNCIONARIO (NumBI) 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 81 
 
 
5.18 Exercícios Propostos 
 
5.18.1- Dado o Diagrama de Entidade e Relacionamento 
 
 
 
Escreva o correspondente esquema relacional 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 82 
 
5.18.2- Dado o Diagrama de Entidade e Relacionamento 
 
 
 
 
escreva o correspondente esquema relacional 
 
 
 
 
 
 
 
 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 83 
 
5.19.3-Dado o Diagrama de entidade e relacionamento 
 
 
 
 
Escreva o correspondente esquema relacional 
 
 
 
 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 84 
 
5.19.4-Dado o Diagrama de entidade e relacionamento 
 
 
 
Escreva o correspondente esquema relacional 
 
5.20 Leituras Recomendadas 
 
Para aprofundar os assuntos abordados neste capítulo, recomendados que o 
leitor consulte os seguintes livros: 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Capítulo 9: Projecto de um banco de dados Relacional, por 
mapeamento ER e EER para Relacional, tradução da 6ª edição ameri-
cana, São Paulo, Pearson Addison Wesley, 2011. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 85 
 
 
 Heuser C. A.;- Projeto de Banco de Dados, 6ª Edição, Instituto de Infor-
mática da UFRGS, capítulo 2: Abordagem Entidade-Relacionamento e 
capitulo 3- Construindo Modelo ER, Porto Alegre, Bookman, 2009. 
 
 Ramakrishnan R., Gehrke J.;- Sistema de Gerenciamento de Banco de 
Dados, Tradução da 3ª edição americana, Capítulo 2- Introdução ao Pro-
jeto de Banco de Dados, McGraw-Hill, 2008. 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 86 
 
 
6 
Capítulo 
Normalização 
 
“O objectivo do projecto de uma base de dados relacional é gerar um conjunto de esquemas relacionais 
é gerar um conjunto de esquemas relacionais, que nos permita guardar informações sem as 
redundâncias desnecessária, apesar de nos permitir recuperar a informação facilmente.” 
 
- Korth & Silberschatz - 
 
6.1 Introdução 
 
Para que uma base de dados reflita de forma eficiente à realidade do mundo 
exterior, é necessário corrigir alguns erros que foram geradas nas fases do de-
senvolvimento do projecto conceitual e/ou do projecto lógico. Essas depurações 
devem ser feitas para que as operações de inserção, remoção, alteração, modi-
ficação e consulta possam ser realizadas de forma eficiente. 
 
O processo de normalização foi criado em 1972, por E.F. Codd, e caracteriza-se 
pela aplicação de uma série de testes a um esquema relacional para verificar se 
ele satisfaz a uma determinada formal normal. Inicialmente Codd propôs três 
formas normais: 1FN, 2FN e 3FN, que serão objecto de estudo nestas notas. 
Mais tarde, Boyce e Codd definiram uma 3FN mais forte, que é denotada na 
literatura da ciência de computação por FNBC. Essas formas baseiam-se na 
análise das dependências funcionais. As restantes formas normais, a 4FN e 5FN, 
baseiam-se na análise de dependências multivaloradas e dependências de jun-
ção que não se enquadram no escopo destas notas. 
 
6.2 Critérios de Qualidade 
 
Para aferirmos a qualidade de um modelo relacional, devemos considerar os se-
guintes pontos: 
 
Lógico ou conceptual: como é que os utilizadores interpretam o significado das 
tabelas e dos seus atributos. Do ponto de vista lógico, um bom modelo deve 
permitir que os utilizadores compreendam claramente o significado dos dados e 
que os possam manipular correctamente. 
 
Implementação: como é que as tuplas (linhas) das tabelas são armazenadas e 
manipulados fisicamente na Base de Dados. Do ponto de vista da implementa-
ção, um bom modelo deve garantir uma maior eficiência nas operações de 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 87 
 
acesso aos dados, minimizar o espaço necessário para guardar as tuplas das 
tabelas, e evitar a informação redundante e supérflua 
 
6.3 Regras para uma boa Base de Dados 
 
Regra 1: Não misture atributos de tipos de entidades diferentes no esquema de 
uma base relacional. 
 
Por exemplo, o esquema relacional 
 
EMPDEP (NumBI, NomeEmp, Endereco, DataNasc, NumeDep, NomDep) 
PK (NumBI) 
 
viola essa regra por misturar atributos de entidades diferentes. A solução 
consiste em criar duas tabelas. Uma para os atributos dos empregados, outra 
para os atributos dos departamentos, e liga-las através da chave primária e da 
chave estrangeira. 
 
EMPREGADO (NUmBI, NomeEmp, Endereço, DataNasc) 
PK (NumBI) 
 
DEPARTAMENTO (NumDep, NomeDep, NumBI) 
PK (NumDep) 
FK (NumBI) REFERENTE EMPREGADO(NumBI) 
 
Regra 2: os esquemas de bases de dados relacionais devem ser projectados de 
forma a evitar as anomaliasnas operações de inserção, exclusão ou modifica-
ção. 
 
Por exemplo: no esquema relacional EMPDEP, que mostramos na regra ante-
rior, apresenta as seguintes anomalias: 
 
Inserção: não se pode inserir um novo departamento, a não ser que se insira um 
empregado que trabalha nesse departamento. 
 
Inserção: ao inserir um empregado é necessário garantir que os valores dos atri-
butos NomeDep e GerenteBI estejam em conformidade com os restantes em-
pregados desse departamento. 
 
Remoção: se removermos um departamento, teremos de remover todas as tu-
plas que contêm os empregados desse departamento. 
 
Alteração: se alterarmos o nome de um departamento, teremos de alterar o nome 
desse departamento para todas as tuplas dos empregados que nele trabalham. 
 
Observação: Não é uma boa práctica de desenho de Bases de Dados, mistu-
rar atributos que pertencem a diferentes entidades do mundo real, na mesma 
tabela. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 88 
 
Regra 3: num esquema relacional, evitar colocar atributos que podem ter valores 
nulos (NULL) numa grande parte das tuplas de uma tabela. 
 
Por exemplo, se apenas 5% dos empregados de um departamento tiverem um 
gabinete pessoal, não faz sentido incluir um atributo na tabela EMPREGADO 
para armazenar esses gabinetes. A solução correcta seria criar uma nova tabela, 
com a chave primária da tabela EMPREGADO e o atributo número do gabinete. 
 
GABINETE (NumBI, NumGabinete) 
FK (NumBI) REFERENTE EMPREGADO(NumBI) 
 
Regra 4: evitar relacionamentos entre trabelas que não sejam feitas pela chave 
primária e a chave estrangeira. 
 
6.4 Dependências Funcionais 
 
O processo de normalização para a primeira, a segunda, a terceira forma normal, 
e para a forma normal de Boyce-Codd, baseiam-se nos conceitos de 
dependência funcional entre os atributos de uma tabela. 
 
A dependência funcional é um dos conceitos mais importantes na teoria do 
projecto de esquemas de bases de dados relacionais, porque é um método 
formal que analisa a qualidade das tabelas que uma base de dados possui. 
 
Definição: Dada uma tabela R, e dois sub-conjuntos X e Y não vazios de atribu-
tos de R, dizemos que Y depende funcionalmente de X, ou que, X determina Y, 
se: 
X → Y ≡ ∀r1,r2 ∈ R, r1[X] = r2[X] ⟹ r1[Y] = r2[Y] 
 
Por exemplo, dado o esquema relacional. 
 
FUNCIONARIO (NumBI, Nome, Avaliação, SalarioHora, HorasTrabalhadas) 
PK(NumBI) 
 
e seja 
 
NBI Nome Avaliação SalarioHora Horasrabalhadas 
00123LA01 Manuel Correia 8 1500,00 8 
00154MA99 Célia Cruz 6 1000,00 7 
00751LA04 Margarida Soares 5 800,00 10 
00425LU01 Katia dos Santos 8 1500,00 6 
00976MA05 Steve Dias 4 500,00 6 
00412KK01 Luisa António 7 1200,00 8 
00723MO00 Quissua Tamo 3 200,00 5 
 
Uma instância de dados associada a esse esquema relacional. 
 
Por uma simples inspecção aos dados, facilmente se observa que o salário hora 
é determinado pela avaliação do trabalhador. Queremos com isso dizer, que tra-
balhadores que têm a mesma avaliação têm o mesmo salário hora. Por exemplo, 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 89 
 
os trabalhadores Manuel Correia e Katia dos Santos têm uma avaliação de 8 
pontos, logo têm uma salário hora de 1500,00 Kwanzas. Isso nos permite con-
cluir que o atributo salarioHora é dependente funcional do atributo Avaliação, e 
denotamos esse facto por: 
 
 Avaliação → SalarioHora 
 
Definição: Dada uma tabela R, e seja K uma chave primária, então os restantes 
atributos de R são funcionalmente dependentes de K, porque nunca teremos 
duas tuplas distintas com r1[K] = r2[K] 
 
Definição: Dada uma tabela R. Dizemos que temos uma Dependência Funcional 
Completa, se essa tabela possuir uma chave primária com mais de um atributo, 
e os restantes atributos têm de ser identificados pela totalidade da chave e não 
apenas por uma parte dela. 
 
6.5 Processo de Normalização 
 
O processo de normalização analisa os esquemas relacionais com base nas de-
pendências funcionais e nas chaves primárias, com o objectivo de minimizar por 
um lado as redundâncias, e por outro, as anomalias nas operações de inserção, 
exclusão e modificação. 
 
6.5.1 Primeira Forma Normal 1FN 
 
Definição: um esquema relacional está na primeira forma normal, quando todos 
os seus atributos forem atômicos, em outros termos, um esquema relacional está 
na 1FN se não possui atributos multivalorados nem atributos compostos. 
 
Vamos mostrar através de um exemplo, como se realiza a conversão de um es-
quema relacional para a 1FN. Dado o esquema relacional: 
 
FATURA (NumFat, TFatura, NIF, Nomcliente, Endereco, {Telefone}) 
PK (NumFat) 
 
Para converter este esquema relacional para a 1FN, temos de eliminar os atri-
butos multivalorados, e proceder a decomposição dos atributos compostos. Para 
decompor os atributos compostos basta: 
 
FACTURA (NumFat, TFatura, NIF, NomCliente, Rua, Casa, Bairro, Cidade, {Te-
lefone}) 
PK (NumFat) 
 
Para eliminar os atributos multivalorados, temos de fragmentar a tabela FAC-
TURA em duas. Uma que contêm os atributos da factura e outra que contêm os 
atributos dos números dos telefones dos clientes. Essas tabelas estão ligadas 
pelo número de contribuinte (NIF). 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 90 
 
FACTURA (NumFat, TFatura, NIF, NomCliente, Rua, Casa, Bairro, Cidade, NIF) 
PK (NumFat) 
FK (NIF) REFERENTE TELEFONE (NIF) 
 
TELEFONE (NIF, NumTelefone) 
PK (NIF) 
 
Observação: durante o processo de normalização para a Primeira Forma Nor-
mal, as tabelas são normalmente fragmentadas em várias tabelas. 
 
6.5.2 Segunda Forma Normal 2FN 
 
Definição: um esquema relacional está na segunda forma normal, quando está 
na 1FN, e todos os seus atributos não chave dependem funcionalmente da tota-
lidade da chave primária. 
 
Com essa definição queremos dizer que para verificar se um esquema relacional 
está na 2FN, basta verificar se ele não possui atributos compostos, atributos 
multivalorados, e para além disso, não temos nenhum atributo não chave que 
depende funcionalmente de uma parte da chave primária. 
 
Logo, o teste de verificação da 2FN só se aplica a esquemas relacionais que 
possuem uma chave primária com mais do que um atributo (superchave). 
 
A conversão desse esquema relacional para a 2FN consiste em eliminar os atri-
butos compostos, eliminar os atributos multivalorados e eliminar os atributos que 
têm uma dependência funcional com uma parte da chave primária; 
 
Vamos clarificar este conceito com um exemplo. Dado o esquema relacional. 
 
 
FACTURA (NumFat, TFatura, NIF, NomCliente, Rua, Casa, Bairro, Cidade, NIF) 
PK (NumFat) 
FK (NIF) REFERENTE TELEFONE (NIF) 
 
TELEFONE (NIF, NumTelefone) 
PK (NIF) 
 
ITENSFAT (NumFat, CodProd, NomProd, Qtd, Preço, imposto, total) 
PK ( NumFat, CodProd) 
FK (NumFat) REFERENTE FACTURA(NumFat) 
 
Como as tabelas FATURA e TELEFONE não têm atributos multivalorados, nem 
atributos compostos, e não possuem uma superchave, já se encontram na 2FN. 
A nossa análise deve restringir-se a tabela ITENSFAT. 
 
A tabela ITENSFAT não possui atributos compostos nem atributos multivalora-
dos, logo encontra-se na 1FN. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 91 
 
 
Mas o atributo NomProd varia em função do atributo CodProd. Queremos com 
isso dizer, que se tivermos duas linhas (tuplas) com o mesmo código do produto 
nessas linhas teremos o mesmo nome do produto. Logo, o atributo NomProd 
depende funcionalmente de uma parte da chave primária. Isso nos permite con-cluir que essa tabela não satisfaz a definição de dependência funcional total, e 
como consequência, não está na 2FN. 
 
Para converter essa tabela para a 2FN teremos de fragmenta-la em duas. Uma 
que contêm os atributos referentes a tabela ITENSFAT e outra que contêm os 
atributos referente a tabela PRODUTO. 
 
FACTURA (NumFat, TFatura, NIF, NomCliente, Rua, Casa, Bairro, Cidade, NIF) 
PK (NumFat) 
FK (NIF) REFERENTE TELEFONE (NIF) 
 
TELEFONE (NIF, NumTelefone) 
PK (NIF) 
 
PRODUTO (CodPro, NomPro, …..) 
PK (CodPro) 
 
ITENSFAT ( NumFat, CodProd, Qtd, Preço, imposto, total) 
PK ( NumFat, CodProd) 
FK (NumFat) REFERENTE FACTURA(NumFat) 
 
6.5.3 Terceira Forma Normal 3FN 
 
Definição: um esquema relacional está na terceira forma normal, quando está 
na 2FN, nenhum atributo não-chave depende por transitividade da chave primá-
ria 
 
 
Antes de examinarmos o processo de normalização para a 3FN, vamos estudar 
as propriedades. 
 
Regras de inferência de Armstrong (1974): 
Regra Reflexiva: Se X ⊇ Y então X → Y (ou X → X). 
Regra Aditiva: Se X → Y então XZ → YZ (ou se X → Y então XZ → Y). 
Regra Transitiva: Se X → Y e Y → Z então X → Z. 
 
Agora vamos analisar a situação do esquema relacional que estamos a imple-
mentar. 
 
Na tabela FATURA é possível obter a partir dos valores do número da factura os 
valores dos números dos contribuintes (NIF), e a partir dos valores dos números 
dos contribuintes (NIF) podemos obter os valores dos nomes dos clientes e seus 
endereços. Então pela 3ª regra de Armstrong, podemos obter a partir dos valores 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 92 
 
das facturas os valores dos nomes dos clientes e seus endereços. Essa regra 
nos permite concluir que tabela FATURA possui uma dependência transitiva, e 
não está na 3FN. 
 
Para convertê-la para a 3FN temos de fragmenta-la em duas tabelas. Uma com 
os atributos da tabela FACTURA e outra com os atributos da tabela CLIENTE. 
Essas tabelas devem ser ligadas pelo número de contribuinte(NIF). Mas ao criar 
a tabela CLIENTE vamos associa-la a tabela TELEFONE através do número de 
contribuinte, de tal forma que um cliente possa ter mais do que um telefone. 
 
FACTURA (NumFat, TFatura, NIF) 
PK (NumFat) 
FK (NIF) REFENTE CLIENTE(NIF) 
 
CLIENTE (NIF, NomCliente, Rua, Casa, Bairro, Cidade) 
PK (NIF) 
 
TELEFONE (NIF, NumTelefone) 
FK (NIF) REFENTE CLIENTE(NIF) 
 
PRODUTO (CodPro, NomPro, …..) 
PK (CodPro) 
 
ITENSFAT (NumFat, CodProd, Qtd, Preço, imposto, total) 
PK ( NumFat, CodProd) 
FK (NumFat) REFERENTE FACTURA(NumFat) 
 
Agora vamos analisar a tabela ITENSFAT. Nesta tabela, o atributo total é calcu-
lado com base na expressão: 
 
 Total = Preço * Quantidade - (Preço * Quantidade) * Imposto; 
 
Logo, estamos em presença de um atributo que depende de outros atributos da 
mesma tabela que não são atributos chave. Logo essa tabela tem uma depen-
dência transitiva e não está na 3FN. Para converter para a 3FN temos de eliminar 
esses atributos, obtendo o esquema relacional. 
 
FACTURA (NumFat, TFatura, NIF) 
PK (NumFat) 
FK (NIF) REFENTE CLIENTE(NIF) 
 
CLIENTE (NIF, NomCliente, Rua, Casa, Bairro, Cidade) 
PK (NIF) 
 
TELEFONE (NIF, NumTelefone) 
FK (NIF) REFERENTE CLIENTE(NIF) 
 
PRODUTO (CodPro, NomPro, …..) 
PK (CodPro) 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 93 
 
 
ITENSFAT ( NumFat, CodProd, Qtd, Preço, imposto) 
PK (NumFat, CodProd) 
FK (NumFat) REFERENTE FACTURA(NumFat) 
 
6.6 Exercícios Propostos 
 
6.6.1- Dado um esquema relacional de um plano de voo de uma companhia de 
aviação. Normalize esse esquema. 
 
PLANOVOO (CodAviao, Modelo, Companhia, Datapartida, Aeroportopartida, 
dataChegada, AeroportoChegada, AeroportoAlternante, Duracao, {Tripula-
cao (CodTripulante, Nome, {Telefone}, cargo, Endereco (Rua, Casa, Bairro, Ci-
dade)}) 
 
6.6.2- Dado um esquema relacional de um Departamento Académica de uma 
Universidade. Normalize esse esquema. 
 
ALUNO (CodAluno, CodDepto, NomeDepto, NomeAluno, SiglaDepto, CodOri-
entador, NomeOrientador, {FoneOrientador}, CodCurso, NomeCurso, data-
Matricula, GrauDoCurso, NomeGrauCurso) 
 
6.6.3- Dado um esquema relacional para uma firma do sector Comercial, que 
possui alguns vendedores. Normalize esse esquema. 
 
VENDEDOR (CodVendedor, NomeVendedor, SexoVendedor, {Cliente (Nome 
Cliente, {Tefefone}, endereço (Rua, Casa, Bairro, Cidade)}) 
 
6.6.4- Dado um esquema relacional de uma empresa de gestão de projectos. 
Normalize essa tabela. 
 
PROJECTO (NumProj, NomeProj, TipoProj, LocalProj (rua, casa, bairro, 
cidade), {Empregados ( CodEmp, NomeEmp, Funcao, salarioBase, Subsídio, 
Horasextras, desconto, salarioliquido)}, {Supervidor (CodSupervisor, 
NomeSupervisor)}) 
 
6.6.5- Dado um esquema relacional de uma matricula de um estudante. 
Normalize esse esquema. 
 
MATRICULA (CodAluno, CodTurma, CodDisciplina, CargaHoraria, Semestre, 
Ano, NomeDisciplina, NomeAluno, NomeTurma, TipoDisciplina, DataNasc, 
LocalNasc, Numsala, NotaFrequencia, NotaExame, DataFrequencia, 
dataExame, Numfaltas, Capacidade, Media) 
 
6.7 Leituras Recomendadas 
 
Para aprofundar os temas tratados neste capítulo, recomendados que o leitor 
consulte um dos seguintes livros: 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 94 
 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Capítulo 15- Fundamentos de dependências funcionais e 
normalização para bancos de dados relacionais, Tradução da 6ª edição 
americana, São Paulo, Pearson Addison Wesley, 2011 
 
 Heuser C. A.;- Projeto de Banco de Dados, Capítulo 6- Engenharia re-
versa de arquivos e normalização, 6ª Edição, Instituto de Informática da 
UFRGS, Porto Alegre, Bookman, 2009. 
 
 Ramakrishnan R., Gehrke J.;- Sistema de Gerenciamento de Banco de 
Dados, Capítulo 19- Refinamento, Sintonização e formas normais, Tradu-
ção da 3ª edição americana, McGraw-Hill, 2008. 
 
 Rob P., Coronel C.;- Sistema de banco de Dados: Projeto, implementação 
e Administração, Capítulo 5- Normalização das Tabelas do Banco de Da-
dos, tradução da 8ª edição americana Edição, Cengage Learning, 2010. 
 
 
 
Introdução as Técnicas de Desenvolvimento de Algoritmos 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 95 
 
 
7 
Capítulo 
Álgebra e Calculo Relacional 
 
“A redundância é a raiz de todos os males que estão associados aos esquemas das bases de dados 
relacionais” 
 
- Ramakishnan & Gehrke - 
 
7.1 Introdução 
 
 
7.3 Álgebra Relacional 
 
 
7.3 Calculo Relacional 
 
 
 
7.4 Leituras Recomendadas 
 
Para aprofundar os temas tratados neste capítulo, recomendados que o leitor 
consulte um dos seguintes livros: 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Capítulo 6: Álgebra e Calculo Relacional, tradução da 6ª 
edição americana, São Paulo, Pearson Addison Wesley, 2011. 
 
 Ramakrishnan R., Gehrke J.;- Sistema de Gerenciamento de Banco de 
Dados, Capítulo 4- Álgebra e Calculo Relacional, Tradução da 3ª edição 
americana, São Paulo, McGraw-Hill, 2008. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 96 
 
 
8 
Capítulo 
SQL- Criação de Tabelas 
 
“A linguagem SQL pode ser considerada como um dos principais motivos para o sucesso das bases de 
dados comerciais. Como ela tornou-se um padrão para esse tipo de bases de dados, os programadores 
não precisam de preocupar-se com a migração das suas aplicaçõespara outros sistemas de bases de 
dados.” 
 
- Elmasi & Navathe - 
 
8.1 Introdução 
 
A linguagem SQL (Structured Query Language) foi desenvolvida com base no 
trabalho de E. F. Codd[2]. A sua primeira versão, denominada por SEQUEL 
(Structured English Query Language), foi desenvolvida pela IBM no início da dé-
cada de 70 para um projecto de pesquisa denominado por System-R. 
 
Em 1979, a empresa Relational Software Inc, hoje Oracle Coorporation, lançou 
a primeira versão comercial dessa linguagem, com o nome SQL (Structured 
Query Language), que se estabeleceu como a linguagem padrão utilizada para 
as bases de dados relacionais. 
 
Em 1986, a ANSI (American National Standards Institute) e a ISO (International 
Organization for Standardization) publicaram o primeiro padrão dessa lingua-
gem, e posteriormente foram lançadas algumas versões, para aperfeiçoar esse 
padrão. 
 
SQL-86; (ANSI) 
SQL-89: publicação de um padrão estendido para linguagem em 1989; 
SQL-92; 
SQL-99; 
SQL-2003 (XML); 
SQL-2008; 
SQL-2011 ISO/IEC 9075:2011 (16/12/2011). 
 
Apesar da linguagem SQL ser a linguagem mais comum entre as várias lingua-
gens de consulta, ela não deve ser vista com uma simples linguagem de con-
sulta, mas como uma linguagem de manipulação de Bases de Dados. 
 
Dentre das várias versões publicadas, as mais difundidas são a SQL ANSI de 
1986, SQL-92 e o SQL99 que incorpora mais recursos como triggers, procedu-
res, objetos e recursividade. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 97 
 
Embora cada fabricante possui o seu SGBD (Sistema Gerador de Base de Da-
dos) que contém uma linguagem nativa SQL, a verdade é que essas linguagens 
mantêm o mesmo padrão. Isso permite a portabilidade das aplicações, ou seja, 
a migração de uma aplicação que roda num SGBD para outro, efectuando pe-
quenos ajustes. 
 
Observação: Os Sistemas Geradores de Bases de Dados Relacionais, geral-
mente implementam a linguagem ANSI SQL e partes da SQL-92 e SQL-99. 
 
 
8.2 Linguagem de Definição de Dados (DDL) 
 
Na linguagem SQL, a criação de uma Base de Dados é feita pelo subconjunto 
DDL- Data Defini Language, que possui os seguintes comandos: CREATE, 
DROP, ALTER e TRUNCATE. 
 
8.2.1 Criação de uma Base de Dados 
 
Embora a maior parte dos Sistemas de Gestão de Bases de Dados Relacionais 
(SGBDR), disponibilizem utilitários que permitem criar as Bases de Dados, como 
por exemplo o PgAdmin no Postgres, é possível criar uma Base de Dados, a 
partir de um comando muito simples, cuja sintaxe resumida descrevemos a 
seguir: 
 
CREATE DATABASE nome_da_Base_Dados 
 
Embora os ambientes de administração da Base de Dados serem muito 
amigáveis, existem algumas situações que é necessário efectuar a criação de 
uma Base de Dados, a partir de um arquivo de comandos em SQL, que na 
literatura da Ciência de Computação dá-se o nome e Script. 
 
8.2.2 Eliminação de uma Base de Dados 
 
Para removermos uma Base de Dados devemos utilizar o comando DROP 
DATABASE, que elimina todas as tabelas, e as estruturas associadas a essa 
Base de Dados, cuja sintaxe resumida descrevemos em seguida. 
 
DROP DATABASE nome_da_Base_Dados 
 
É importante salientar que nem todos os Sistemas de Gestão de Bases de Dados 
disponibilizam este comando. Contudo, o leitor deverá prestar a atenção que se 
executar este comando, a Base de Dados será eliminada de forma permanente. 
 
8.2.3 Criação de uma Tabela 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 98 
 
Para criarmos uma tabela numa Base de Dados, devemos utilizar o comando 
CREATE TABLE, cuja sintaxe resumida descrevemos em seguida. 
 
CREATE TABLE nome_da_tabela 
( 
 nome_coluna1 tipo1, 
 nome_coluna2 tipo2, 
 …. 
 nome_colunan tipon, 
); 
 
onde 
 tipoi é o tipo é dados que a coluna ou o atributo irá armazenar. 
 
Em qualquer linguagem de programação os nomes criados pelos programadores 
são chamados de identificadores. 
 
Definição: na linguagem SQL, os identificadores estão sujeitos as seguintes 
regras: 
1º- Começam por uma letra; 
2º- Os restantes caracteres são letras ou números; 
3º- O carácter de separação (underscore) é permitido; 
4º- as letras que compõem um identificador não possuem acentos; 
5º- Um identificador não pode ter mais do que 30 caracteres; 
6º- Um identificador não pode ser uma palavra reservada. 
 
Definição: também podemos definir uma tabela como um conjunto de registros, 
em que cada registro é formado por um conjunto de campos. 
 
Na linguagem SQL, os dados podem ser classificados como: numéricos, 
temporais, lógicos e Texto. 
 
Valores Numéricos 
TINYINT 
SMALLINT 
INT 
 
BIGINT 
 
 
FLOAT 
 
DOUBLE 
 
DECIMAL(N, D) 
1 byte (Um número inteiro de -128 até 127) 
2 bytes (Um número inteiro de -32.768 até -32.767) 
4 bytes (Um número inteiro de -2.147.483.648 até -
2.147.483.647) 
8 bytes (Um número inteiro de -9.223372037×10¹⁸ até -
9.223372036×10¹⁸) 
4 bytes (Um número de ponto decimal de 1.2E-38 até 
3.4E+38 com 6 casas decimais) 
8 bytes (Um número de ponto decimal de 1.2E-38 até 
3.4E+38 com 15 casas decimais) 
N dígitos com D dígitos depois do ponto decimal 
 
Valores Temporais 
DATE 
TIME 
formato ‘AAAA-MM-DD’ 
formato ‘HH:MM: SS’ 8 bytes 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 99 
 
DATETIME 
TIMESTAMP 
formato ‘AAAA-MM-DD HH:MM: SS’ 8 bytes 
formato AAAAMMDDHHMMSS 
 
Valores Lógicos 
BOOLEAN TRUE e FALSE 
 
Sequencia de Texto 
CHAR(N) 
VARCHAR(N) 
TEXT 
string de comprimento fixo de N caracteres 
string de comprimento variável até N caracteres 
string de comprimento variável até 65 Kbytes 
 
Observação: nos SGBD temos o tipo de dados VARCHAR (N) para uma cadeia 
de caracteres de comprimento variável limitada. Mas no PostGreSQL não existe 
uma diferença de desempenho entre este tipo de dados e o tipo TEXT. Por esse 
facto, aconselha-se a utilizar o tipo de dados TEXT. 
 
Observação: nestas notas de aulas iremos utilizar a notação Camel Case, que 
possui a seguinte caracterização: 
1º- O primeiro carácter de cada palavra deve ser uma letra maiúscula os 
restantes são letras ou números em minúsculo; 
2º- Se o identificador for constituído por duas ou mais palavras, deve-se efectuar 
a junção das palavras e aplica-se a 1ª regra. 
 
Observação: na linguagem SQL as palavras reservadas são escritas com letras 
maiúsculas. 
 
Vamos consolidar estes conceitos com um exemplo muito simples: Dada a tabela 
de ESTUDANTE 
 
Coluna Tipo de dado tamanho 
CodAluno 
Nome 
Sobrenome 
Número do BI 
Sexo 
Data Nascimento 
Numérico inteiro 
Caracter 
Caracter 
Caracter 
Caracter 
data 
10 
8 
8 
12 
1 
padrão 
 
 
 
 
CREATE TABLE ESTUDANTE 
( 
 CodAluno INT, 
 Nome TEXT, 
 Sobrenome TEXT, 
 NumBI INT, 
 Endereco TEXT, 
 Sexo CHAR, 
 DatNasc DATE 
 ); 
 
Depois de criar uma tabela, o SGBDR emite a mensagem table create, se a 
tabela foi criada com sucesso, no caso contrário será apresentada uma 
mensagem de erro e a tabela não será criada. 
 
8.2.4 Mostrar a estrutura de uma Tabela 
 
Para mostrar na tela a estrutura de uma tabela, devemos utilizar o comando 
DESCRIBE, que possui a seguinte sintaxe: 
 
DESCRIBE nome_da_tabela 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 100 
 
 
Por exemplo: 
 
 DESCRIBE ESTUDANTE 
 
Veremos na tela a seguinte informação: 
 
Name Null ? Type 
-------------------------------------------------------------------------------------------------CodAluno INT 
Nome TEXT 
Sobrenome TEXT 
NumBI INT 
Endereco TEXT 
Sexo CHAR 
DatNasc DATE 
 
Como se pode observar todas as colunas da tabela são do tipo NULL, isso quer 
dizer, que quando o utilizador estiver a carregar dados nessa tabela, se 
porventura esquecer-se de digitar algum valor, o sistema configura 
automaticamente esse valor como NULL. 
 
8.2.5 Restrições 
 
As restrições são instruções que impõem algumas regras à manutenção dos 
dados. Essas regras determinam os valores que uma ou mais colunas podem 
receber. 
 
As restrições são chamadas de constraints e ficam armazenadas na Base de 
Dados. 
 
8.2.5.1 Valores nulos e não nulos 
 
Se na criação de uma coluna não for definida qualquer restrição (constraints) a 
indicar que essa coluna não pode receber valores nulos, então essa coluna irá 
receber por defeito o valor NULL. 
 
Para definirmos que uma coluna não pode receber valores nulos, devemos 
utilizar com sufixo do tipo de dados dessa coluna a restrição (constraints) NOT 
NULL. 
 
Por exemplo, para a tabela de ESTUDANTE devemos definir a restrição NOT 
NULL para os campos: 
 
CREATE TABLE ESTUDANTE 
( 
 CodAluno INT NOT NULL, 
 Nome TEXT NOT NULL, 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 101 
 
 Sobrenome TEXT NOT NULL, 
 NumBI INT NOT NULL, 
 Endereco TEXT, 
 Sexo CHAR NOT NULL, 
 DatNasc DATE NOT NULL 
 ); 
 
8.2.5.2 Chave Primária 
 
Toda a coluna que contêm a chave primária não deve conter a restrição 
(constraints) NOT NULL. A restrição PRIMARY KEY garante que essa coluna 
não pode receber valores nulos, e como boas prácticas de programação, ela 
deverá ser declarada na ultima linha da tabela. 
 
CREATE TABLE ESTUDANTE 
( 
 CodAluno INT, 
 Nome TEXT (8) NOT NULL, 
 Sobrenome TEXT(8) NOT NULL, 
 NumBI INT NOT NULL, 
 Endereco TEXT(50), 
 Sexo CHAR NOT NULL, 
 DatNasc DATE NOT NULL, 
 PRIMARY KEY (codAluno) 
 ); 
 
Se a chave primária possui mais do que um campo (atributo), ela deve ser 
declarada com a seguinte notação: 
 
 CREATE TABLE MUNICIPIO 
( 
 CodProvincia TINYINT, 
 CodMunicipio TINYINT, 
 PRIMARY KEY (codProvincia, CodMunicipio) 
 ); 
 
8.2.5.3 Valores limitados 
 
Para armazenar um determinado um conjunto de valores numa coluna, devemos 
utilizar a restrição (constraints) CHECK. Mas essa restrição, exige que seja 
omitida a declaração NOT NULL. 
 
CREATE TABLE ESTUDANTE 
( 
 CodAluno INT, 
 Nome TEXT NOT NULL, 
 Sobrenome TEXT NOT NULL, 
 NumBI INT NOT NULL, 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 102 
 
 Endereco TEXT, 
 Sexo CHAR CHECK ( sexo = ‘F’ OR sexo = ‘M’), 
 DatNasc DATE CHECK (datNac > 0), 
 PRIMARY KEY (codAluno) 
 ); 
 
8.2.5.4 Valores Únicos 
 
Para garantir que um determinado valor de uma coluna não possa repetir-se, ou 
seja, que ele ocorra uma e apenas uma vez, devemos utilizar a restrição 
(constraints) UNIQUE. Mas essa restrição só deve ser utilizada para os campos 
que indicam a presença de uma chave candidata, e para o efeito, a restrição 
NOT NULL deve ser omitida. 
 
CREATE TABLE Estudante 
( 
 CodAluno INT, 
 Nome TEXT NOT NULL, 
 Sobrenome TEXT NOT NULL, 
 NumBI INT UNIQUE, 
 Endereco TEXT, 
 Sexo CHAR CHECK ( sexo = ‘F’ OR sexo = ‘M’), 
 DatNasc DATE CHECK (DatNasc > 0) 
 PRIMARY KEY (codAluno) 
 ); 
 
Observação: todas as colunas que contém a constraints UNIQUE, são fortes 
candidatos de serem utilizados como chave de busca. 
 
8.2.5.5 Chave Estrangeira 
 
Acreditamos que o leitor já tenha conhecimento que as tabelas de uma base de 
dados ligam-se umas as outras através das chaves estrangeiras. 
 
A integridade referencial é utilizada para garantir a consistência de dados entre 
tabelas. Esta restrição permite a validação das chaves estrangeiras. Queremos 
com isso dizer que com base nessa restrição, não é permitido inserir valores 
numa chave estrangeira que não estejam definidos na tabela que contém a 
correspondente chave primária. Na linguagem SQL essa propriedade é 
garantida pela (constriant) REFERENCES 
 
Como boa práctica de programação, devemos fazer referencia a chave 
estrangeira, utilizando para o efeito a restrição (constraints) FOREIGN KEY, que 
deverá ser colocada na última linha da tabela. 
 
Por exemplo, dado o esquema relacional 
 
Curso (CodCurso, NomeCurso) 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 103 
 
PK (CodCurso) 
 
Estudante (codAluno, CodCurso, Nome, Sobrenome, NumBI, Endereco, Sexo, 
DatNasc) 
PK (CodAluno) 
FK (CodCurso) REFERENTE Curso (CodCurso) 
 
que é criado pelo seguinte script 
 
CREATE TABLE CURSO 
 ( 
 CodCurso CHAR (10), 
 NomeCurso TEXT NOT NULL, 
 PRIMARY KEY (codCurso) 
 ); 
 
 
CREATE TABLE ESTUDANTE 
( 
 CodAluno INT, 
 CodCurso INT, 
 Nome TEXT NOT NULL, 
 Sobrenome TEXT NOT NULL, 
 NumBI INT UNIQUE, 
 Endereco TEXT, 
 Sexo CHAR CHECK (sexo = ‘F’ OR sexo = ‘M’), 
 DatNasc DATE CHECK (DATNASC > 0), 
 PRIMARY KEY (codAluno), 
 FOREIGN KEY (CodCurso) REFERENCES CURSO(CodCurso) 
 ); 
 
No entanto, muitas vezes temos a necessidade de alterar ou de remover um 
valor de uma chave primária de uma tabela, e queremos que esse valor seja 
alterado ou removido em todas as tuplas das correspondentes chaves 
estrangeiras. 
 
Para realizar essa operação, devemos acrescentar à restrição (constraints) 
REFERENCES, à restrição ON UPDATE CASCADE, para o caso da alteração, 
ou a restrição ON DELETE CASCADE, para o caso da remoção, como 
mostrados a seguir: 
 
CREATE TABLE ESTUDANTE 
( 
 CodAluno INT, 
 CodCurso INT, 
 Nome TEXT NOT NULL, 
 Sobrenome TEXT NOT NULL, 
 NumBI INT UNIQUE, 
 Endereco TEXT, 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 104 
 
 Cexo CHAR CHECK ( sexo = ‘F’ OR sexo = ‘M’), 
 DatNasc DATE CHECK (DatNasc > 0), 
 PRIMARY KEY (codAluno, CodCurso), 
 FOREIGN KEY (CodCurso) REFERENCES CURSO(CodCurso) 
 ON DELETE CASCADE ON UPDATE CASCADE 
 ); 
 
Se pretendermos visualizar a estrutura desta tabela, basta digitar o comando: 
 
 DESCRIBE ESTUDANTE 
 
que veremos a tela a seguinte informação: 
 
NameNull ? Type 
------------------------------------------------------------------------------------------------- 
CodAluno NOT NULL INT 
CodCurso NOT NULL INT 
Nome NOT NULL TEXT 
Sobrenome NOT NULL TEXT 
NumBI NOT NULL INT 
Endereco TEXT 
Sexo NOT NULL CHAR 
DatNasc NOT NULL DATE 
 
Como se pode observar as colunas CodAluno, CodCurso, Nome, Sobrenome, 
NumBI, Sexo e DatNasc, são do tipo NOT NULL, isso quer dizer que, quando o 
utilizador estiver a carregar dados nessa tabela, ele é obrigado a inserir algum 
valor para essas colunas. 
 
8.2.5.6 Sinónimos de Restrições 
 
Para tornar o código mais fácil de ler e de compreender, a linguagem SQL, 
permite criar palavras sinónimos (Aliás) para fazer referencia as chaves 
primárias e secundárias. Essas palavras são utilizadas com a restrição 
CONTRAINT. 
 
CREATE TABLE ESTUDANTE 
( 
 CodAluno INT, 
 CodCurso INT, 
 Nome TEXT NOT NULL, 
 Sobrenome TEXT NOT NULL, 
 NumBI INT UNIQUE, 
 Endereco TEXT, 
 Sexo CHAR CHECK ( sexo = ‘F’ OR sexo = ‘M’), 
 DatNasc DATE CHECK (DATNASC > 0), 
 CONSTRAINT KeyP_Est PRIMARY KEY (codAluno, CodCurso), 
 CONSTRAINT Key_Cur FOREIGN KEY (CodCurso) 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 105 
 
 REFERENCES CURSO(CodCurso) 
 ON DELETE CASCADE ON UPDATE CASCADE 
 ); 
 
8.2.5.7 Campos com Auto Incremento 
 
Os Sistemas de Gestão de Bases de Dados (SGBD), possuem um tipo especial 
de dados, cujo valor é do tipo numérico, e tem a propriedade de auto 
incrementar-se. Esse tipo de dados é muito utilizado para a chave primária. No 
Posgres esse tipo de dados é definido pela palavra reservada SERIAL. Por 
exemplo, na tabela de cursos, a chave primária deveria ser sido declarada com 
esse tipo de dados. 
 
CREATE TABLE CURSO 
 ( 
 CodCurso SERIAL, 
 NomeCurso TEXT NOT NULL, 
 PRIMARY KEY (codCurso) 
 ); 
 
8.2.5.8 Valores por Defeito 
 
Para garantir que o valor de uma coluna seja o mesmo para todas as linhas da 
tabela, e que esse valor a partida seja conhecido, devemos utilizar a constraints 
DEFAULT, seguida do valor que pretendemos utilizar. 
 
Por exemplo, suponhamos que na tabela de cursos temos uma coluna com o 
grau do curso (no mundo real isto não é possível), e que nessa instituição de 
ensino só se ministra cursos de mestrado, 
 
CREATE TABLE CURSO 
 ( 
 CodCurso SERIAL, 
 NomeCurso TEXT NOT NULL, 
 Grau CHAR(3) DEFAULT ‘Msc’, 
 PRIMARY KEY (codCurso) 
 ); 
 
8.2.6 Alteração de Colunas nas Tabelas 
 
Para incluir uma nova coluna numa tabela, alterar o nome de uma coluna, e a 
alterar o tipo de dados de uma coluna, devemos utilizar o comando ALTER 
TABLE, que possui a seguinte sintaxe: 
 
 ALTER TABLE NomeDaTabela ADD NomeDaColuna tipoDeDados 
 
 ALTER TABLE NomeDaTabela MODIFY NomeDaColuna tipoDeDados 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 106 
 
 
 ALTER TABLE NomeDaTabela DROP NomeDaColuna 
 
Por exemplo, para adicionar na tabela de estudantes uma coluna para 
armazenar o número do email, e suponhamos que o estudante só queira declarar 
o email da escola, devemos executar o comando: 
 
ALTER TABLE ESTUDANTE ADD Email TEXT (30) 
 
Mas se quisermos alterar a coluna nome da tabela Curso, de tal forma que, essa 
coluna não possa armazenar valores nulos, devemos executar o comando: 
 
 ALTER TABLE CURSO MODIFY Nome NOT NULL 
 
Observação: essa alteração só será bem-sucedida, se nenhuma ocorrência 
dessa coluna tiver o valor NULL 
 
8.2.7 Apagar uma Tabela 
 
Para apagar (deletar) uma tabela de uma Base de Dados, devemos utilizar o 
comando DROP TABLE que possui a seguinte sintaxe: 
 
 DROP TABLE NomeDaTabela 
 
Observação: depois de executar-se o comando DROP TABLE, toda a estrutura 
da tabela e os respectivos dados, serão apagados e não podem ser recuperados 
 
8.2.8 Apagar os Dados de uma Tabela 
 
Para apagar (deletar) todos os dados de uma tabela devemos utilizar o comando 
TRUNCATE TABLE que possui a seguinte sintaxe: 
 
TRUNCATE TABLE NomeDaTabela 
 
O TRUNCATE TABLE remove todos os dados de uma tabela, mas não destrói 
a tabela, ao passo que, o comando DROP TABLE remove todos os dados de 
uma tabela, mas destrói a tabela. 
 
8.3 Exercícos Propostos 
 
8.3.1- Dado o seguinte esquema de uma Base de Dados. Escreva em Script em 
SQL para criar as tabelas desse esquema 
 
ACTOR (CodActor, Nome, DatNasc) 
PK (CodActor) 
 
DIRECTOR (CodDirector, Nome, DatNac) 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 107 
 
PK ( CodDirector) 
 
PRODUTOR (CodProdutor) 
PK (CodProdutor) 
 
FILME (CodFilme, Titulo, Ano, CodDirector) 
PK (CodFilme) 
FK (CodDirector) REFERENTE DIRECTOR (CodDirector) 
 
ACTUA ( CodActor, CodFilme, ano) 
FK (CodActor) REFERENTE ACTOR (CodActor) 
FK (CodFilme) REFERENTE FILME (CodFilme) 
 
PRODUZ (CodFilme, CodProdutor, valor) 
FK (CodFilme) REFERENTE FILME (CodFilme) 
FK (CodProdutor) REFERENTE PRODUTOR (CodProdutor) 
 
8.3.2- Dado o seguinte esquema relacional de uma Base de Dados. Escreva em 
Script em SQL para criar as tabelas desse esquema. 
 
TRIPULANTE (CodTripolante, Nome, Telefones, cargo) 
PK (CodTripo) 
 
TRIPULANTEVOO ( CodFolhaVoo, CodTripolante) 
PK (CodFolhaVoo, CodTripolante) 
FK (CodTripolante) REFERENCE TRIPULANTE (CodTripolante) 
 
VOO ( CodVoo, Destino, NumTripolantes, Duracao) 
PK (CodVoo) 
 
DATAVOO (CodVoo, DatPrev) 
PK (CodVoo, DatPrev) 
FK (CodVoo) REFERENTE VOO (CodVoo) 
 
8.3.3- Dado o seguinte esquema de uma Base de Dados. Escreva em Script em 
SQL para criar as tabelas desse esquema. 
 
FUNCIONARIO (CodFunc, Nome, SobreNome, DatNasc, Sexo, Salario, 
CodSupervisor, CodDepto) 
PK (CodFunc) 
FK (CodSupervisor) REFERENTE FUNCIONARIO (CodFunc) 
FK (CodDepto) REFERENTE DEPARTAMENTO (CodDepto) 
 
DEPARTAMENTO (CodDepto, Nome, CodGerente, DatFuncoes) 
PK (CodDepto) 
FK (CodGerente) REFRENTE FUNCIONARIO (CodFunc) 
 
LOCALIZACAO (CodDepto, Endereco) 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 108 
 
FK (CodDepto) REFERENCE DEPARTAMENTO (CodDepto) 
 
PROJECTO (CodProj, CodDepto, Nome, Endereco) 
PK (CodProj) 
FK (CodDepto) REFERENTE DEPARTAMENTO (CodDepto) 
 
TRABALHA (CodFunc, CodProj, NumHoras) 
PK (CodFunc, CodProj) 
FK (CodFunc) REFERENTE FUNCIONARIO (CodFunc) 
FK (CodProj) REFERENTE PROJECTO (CodProj) 
 
DEPENDENTE (CodFunc, Nome, Sexo, DatNasc, Parentesco) 
PK (CodFunc, Nome) 
FK (CodFunc) REFERENTE FUNCIONARIO (CodFunc)8.3.4- Dado o seguinte esquema de uma Base de Dados. Escreva em Script em 
SQL para criar as tabelas desse esquema. 
 
DISCIPLINA (CodDis, Nome) 
PK (CodDis) 
 
CURSO (CodCur, Nome) 
PK (CodCur) 
 
PREDIO (CodPred, rua bairro, cidade) 
PK (CodPred) 
 
CURRICULUM ( CodCur, CodDis, TipoDisc) 
FK (CodCur) REFERENTE CURSO (CodCur) 
FK (CodDis) REFERENTE DISCIPLINA (CodDis) 
 
SALA (CodPred, CodSal, capacidade, andar) 
PK (CodPred, CodSal) 
FK (CodPred) REFERENTE PREDIO(CodPred) 
FK (CodSal) REFERENTE SALA (CodSal) 
 
8.3.5- Dado o seguinte esquema relacional de uma Base de Dados. Escreva um 
Script em SQL para criar as tabelas desse esquema 
 
AUTOMOVEL (Matricula, Marca, Ano, CodComissao, CodLoja) 
PK (Matricula) 
FK (Marca) REFERENTE MARCA (CodMarca) 
FK (CodComissao) REFERENTE COMISSAO (CodComissao) 
 
AUTOMOVEISOCORRENCIA (Matricula, Numero, Data, Hora, Tipo, Descricao) 
PK (Matricula, Numero) 
FK (Matricula) 
 
PROPRIETARIO (CodDono, Nome, Rua, Bairro, Cidade) 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 109 
 
PK (CodDono) 
 
TELEFONEDONO (CodDono, NumTelefone) 
FK (CodDono) REFERENTE PROPRIETARIO (CodDono) 
 
EMAILDONO (CodDono, NumEmail) 
FK (CodDono) REFERENTE PROPRIETARIO (CodDono) 
 
LOJA (CodLoja, Nome, Rua, Bairro, Cidade) 
PK ( CodeLoja) 
 
TELEFONELOJA (CodLoja, NumTelefone) 
FK (CodLoja) REFERENTE PROPRIETARIO (CodLoja) 
 
EMAILLOJA (CodLoja, NumEmail) 
FK (CodLoja) REFERENTE PROPRIETARIO (CodLoja) 
 
COMISSAO (CodComissao, Descricao, valor) 
PK (CodComissao) 
 
8.4 Leituras Recomendadas 
 
Para aprofundar os temas abordados neste capítulo, recomendados que o leitor 
consulte os livros: 
 
 Luís D.;- SQL, Capítulo 12- Criação e Manutenção de Tabelas, 14ª Edi-
ção Actualizada, FCA, 2017 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Parte2: Modelo de Dados Relacional e SQL, Capítulo 4- 
SQL Básica, tradução da 6º edição americana São Paulo, Pearson Addi-
son Wesley, 2011. 
 
 Garcia-Molina, Ullman, Widom: Database Systems – The Complete Book, 
Part II Relational DataBase Programming, Chaper 6- The DataBase Lan-
guage SQL, Prentice-Hall, 2009. 
 
 Groff J. R., Wienberg P. N., Oppel A.;- The Complete Reference SQL, Part 
IV, DataBase Structure, 3th Edition, McGraw-Hill, 2010. 
 
 Ramakrishnan R., Gehrke J.;- Sistema de Gerenciamento de Banco de 
Dados, Capítulo 3- O Modelo Relacional, Tradução da 3ª edição ameri-
cana, São Paulo, McGraw-Hill, 2008. 
MAC0426 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 110 
 
 
9 
Capítulo 
SQL- Manipulação de Dados 
 
“a base da moderna tecnologia de bases de dados é, sem dúvida, o modelo relacional: essa é a base que 
faz da área uma ciência”. 
 
- Date - 
 
9.1 Introdução 
 
No capítulo anterior estudamos com bastante profundidade o módulo DDL da 
Linguagem SQL. 
 
Agora, vamos concentrar o nosso estudo no módulo DML dessa linguagem, e 
estudar de forma detalhada os comandos para inserir, alterar e remover os dados 
em uma tabela. 
 
9.2 Linguagem de Manipulação de Dados (DML) 
 
 
Na linguagem SQL, a manipulação de Dados é feita pelo subconjunto DML- Data 
Manipulation Language, que possui os seguintes comandos: INSERT, UPDATE 
e DELETE. 
 
 
9.3.1 Estudo de Caso 
 
Suponhamos que pretendemos criar uma Base de Dados para controlar as 
vendas de produtos de uma pequena papelaria. Essa Base de Dados deve 
controlar o cadastro dos clientes, a classificação dos produtos por família, o 
cadastro dos produtos, e o histórico das compras efectuadas pelos clientes. 
Também vamos supor que esse minimundo já foi descrito num modelo de dados, 
esse modelo de dados já foi convertido para o seguinte esquema relacional: 
 
CLIENTE (CodCli, Nome, Sobrenome, Sexo, DatNasc,Telefone) 
PK (CoCli) 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 111 
 
FAMILIA (CodFam, Descricao) 
PK (CodFam) 
 
PRODUTO (CodPro, Autor, Titulo, CodFam, PrCusto, PrVenda, QtdStock) 
PK (CodPro) 
FK (CodFam) REFERENTE FAMILIA (CodFam) 
 
HISTORICO (CodPro, CodCli, QtdVendida, DatVenda, PrCusto, PrVenda) 
FK(CodPro) REFERENTE PRODUTO (CodPro) 
FK (CodFam) REFERENTE FAMILIA(CodFam) 
 
Embora esse esquema relacional não está normalizado, ele serve para introduzir 
os conhecimentos que pretendemos abordar neste capítulo. Mas, para que 
possa visualizar as operações que vamos estudar, faça como exercício um Script 
para criar as tabelas da Base de dados. 
 
9.3.2 Inserção de Dados 
 
Para que a Base de Dados seja útil, é necessário carregar as suas tabelas com 
dados. Os dados são inseridos por linhas, uma linha de cada vez. Contudo é 
possível inserir mais do que uma linha, mas essa técnica foge ao escopo destas 
notas. 
 
Para inserir os dados numa uma nova linha, devemos utilizar o comando INSERT 
que possui a seguinte sintaxe: 
 
INSERT INTO NomeDaTabela VALUES (Valor1, Valor2 , …., Valorn); 
 
Por exemplo: Dado a tabela de Clientes 
 
Cocli Nome Sobrenome Sexo Data Nascimento Telefone 
1 Alberto Mogas M 2000-07-21 912303240 
2 Carlos Amaral M 1993-01-01 931414270 
3 Antónia Gurgel F 2002-05-31 921723425 
4 Stefano Catumbela M 1991-02-10 932721097 
5 Brigite Santos F 2002-05-31 933712934 
6 Sérgio Couto M 2000-07-01 933657143 
7 Eliane Caseiro F 2002-07-30 912717777 
8 Herlander Chalana M 1981-05-31 933924868 
9 Josemar da Silva M 1981-03-12 942712999 
 
Para inserir esses dados devemos executar os seguintes comandos: 
 
INSERT INTO CLIENTE 
 VALUES (1, ‘Alberto’,’Mogas’, ‘M’, ‘2000-07-21’,912300240); 
INSERT INTO CLIENTE 
 VALUES (2,’Carlos’,’Amaral’,’M’, ‘1993-01-01’,931414270); 
INSERT INTO CLIENTE 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 112 
 
 VALUES (3,’Antónia’,’Gurgel’, F’,’2002-05-31’, 921723425); 
 
Observe que os valores dos dados devem ser colocados na mesma ordem que 
as colunas da tabela foram definidas e separados por uma vírgula. 
 
Esta sintaxe apresenta como principal desvantagem o facto de ser necessário 
conhecer a ordem das colunas da tabela. Para evitar este problema podemos 
relacionar as colunas as suas variáveis, utilizando para o efeito, o comando IN-
SERT com a seguinte sintaxe: 
 
 
INSERT INTO NomeDaTabela (campo1, … , Campon) 
VALUES (valor1, … , valorn); 
 
Agora, vamos inserir mais alguns dados nessa tabela. 
 
INSERT INTO 
CLIENTE (CodCli, Nome, SobreNome, Sexo, DatNasc, Telefone) 
VALUES (4, ‘Stefano’, ‘Catumbela,’ M’, ‘1991-02-10’, 932721097); 
 
Muitos utilizadores consideram como uma boa práctica inserir os dados de uma 
tabela com esta versão do comando INSERT. Mas se não forem conhecidos os 
valores de todas as colunas, as colunas com valores desconhecidos podem ser 
omitidas, e, neste caso, essas colunas recebem um valor por defeito ou o valor 
nulo. 
 
Como os conceitos que iremos abordar nestas notas têm como base o esquema 
relacional desta pequena papelaria, solicitamos que efectua a inserção dos da-
dos das seguintes tabelas. 
 
Tabela de Família 
 
CodFamília Descrição 
1 Livros 
2 Vídeos 
3 Cd 
4 Revistas 
5 Canetas 
 
Tabela de Produto 
 
CodPro Autor Título codFa
m 
PrCusto Prvenda qtdStock 
1 Damas Luis Linguagem C 1 1500.00 2500.00 10 
2 Rangel José Estrutura de Dados em C 1 2750.00 4250.00 4 
3 Paulo Flores Coisas da Terra 3 150,00 200,00 25 
4 Tito Paris Dança ma mi Criola 3 200,00 270,00 7 
5 Damas Luis SQL 5 1750,00 3550,00 10 
6 Deitel e Deitel Como Programar em Java 1 5720,00 9640,00 0 
 
Fundamentos deBases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 113 
 
7 Bic 5 20,00 30,00 1000 
8 Teta Lando Eu vou Voltar 3 1500,00 2100,0 12 
9 Tito Paris Um Cria Ser Poeta 3 2000,00 2700,00 25 
10 Pepetela A geração da Utopia 1 1750,00 2560,00 12 
11 Pepetela O cão e o Caluandas 1 1750,00 2600,00 2 
12 Bonga Kaxexe 3 200,00 270,00 4 
 
Tabela do Histórico 
 
CodPro CodCli QtdVendida DatVenda PrCusto PrVenda 
1 1 1 2018-06-21 1500,00 2500,00 
1 2 2 2018-06-22 1500,00 2500,00 
1 5 1 2018-06-22 1500,00 2500,00 
2 3 1 2018-07-26 2750,00 4250,00 
2 4 1 2018-06-21 2750,00 4250,00 
3 1 2 2018-12-31 150,00 200,00 
3 5 1 2019-05-05 150,00 200,00 
3 7 4 2018-06-21 150,00 200,00 
4 7 1 2018-08-19 200,00 270,00 
4 2 3 2018-07-20 200,00 270,00 
5 6 2 2018-12-24 1750,00 3550,00 
7 3 3 2018-04-12 20,00 30,00 
7 5 4 2018-06-22 20,00 30,00 
7 7 2 2018-08-19 20,00 30,00 
10 2 1 2018-07-21 1760,00 2560,00 
10 1 2 2018-05-21 1760,00 2560,00 
11 7 1 2018-08-24 200,00 270,00 
 
Observação: para inserir um grande volume de dados, utilize o comando COPY. 
Este comando não é tão flexível quanto o comando INSERT, mas é mais efici-
ente. 
 
9.3.3 Actualização de Dados 
 
Na literatura da Ciência da Computação, a alteração dos dados armazenados 
nas tabelas é chamada de actualização. 
 
Para actualizar os dados de uma tabela devemos utilizar o comando UPDATE 
que possui a seguinte sintaxe: 
 
UPDATE NomeDaTabela 
SET NomeDaColuna1 = valor1, 
 . . . 
 NomeDaColunan = valorn, 
WHERE Condição; 
 
Exemplo: suponhamos o livro do autor Luís Damas, com o título SQL, sofreu a 
uma alteração de preço. O custo passou para 1500,00 Kwanzas, enquanto que 
a venda está cifrada em 2500,00 kwanzas. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 114 
 
UPDATE PRODUTO 
SET PrCusto = 1500.00, 
 PrVenda = 2500.00 
WHERE autor = ‘Damas Luis’ AND Titulo = ‘SQL’; 
 
Toda tabela possui uma chave primária, que permite identificar um produto de 
forma inequívoca. Na tabela de PRODUTO, o CodPro é a chave primária, então 
podemos utilizar essa chave para fazer essa actualização. 
 
UPDATE PRODUTO 
SET PrCusto = 1500.00, 
 PrVenda = 2500.00 
WHERE CodPro = 5’; 
 
Já sabemos utilizar o comando UPDATE para actualizar os dados de uma única 
linha, mas é possível utilizar o mesmo comando para actualizar os dados de 
várias linhas. 
 
Exemplo: alterar em 25% o preço de venda de todos os artigos da família de 
livros. 
 
UPDATE PRODUTO 
SET PrVenda = Prvenda * 1.25 
WHERE CodFam = 1; 
 
Observação: se não for colocada a cláusula WHERE, essa actualização será 
efectuada para todas as linhas da tabela. 
 
9.3.4 Remoção de várias linhas 
 
Acreditamos que o leitor já sabe inserir dados numa numa tabela e modifica-los. 
Agora necessitamos de mostrar como podemos remover várias linhas de uma 
tabela que não são mais necessárias. 
 
Para remover as linhas de uma tabela devemos utilizar o comando DELETE, que 
possui a seguinte sintaxe: 
 
 DELETE FROM NomeDaTabela 
 WHERE Condição; 
 
De forma análoga ao comando UPDATE, o comando DELETE possui a cláusula 
WHERE que serve para restringir o conjunto de linhas que serão removidas. 
 
Exemplo: remover todos os produtos da tabela PRODUTO que pertencem a fa-
mília revista. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 115 
 
Sabemos que o código do produto que identifica as revistas é o número 4. Logo, 
podemos remover todos os artigos que pertence a essa família se executarmos 
o seguinte código: 
 
DELETE FROM PRODUTO 
 WHERE CodFam = 4; 
 
Mas a linguagem SQL, também permite que se remova uma única linha de uma 
tabela. 
 
Exemplo: remover da tabela HISTORICO, a compra do CD do Teta Lando que a 
cliente Brigite Santos fez no dia 24 de dezembro de 2018. 
 
Pela tabela de CLIENTE, a cliente Brigite Santos é identificada com o número 5, 
e pela tabela de PRODUTO, o CD do Teta Lando é identificado com o número 
8, então a remoção dessa linha na tabela HISTORICO pode ser feito com o se-
guinte código. 
 
 DELETE FROM HISTORICO 
 WHERE CodPro = 8 AND CodCli = 5 AND DatVenda = ‘2018-12-24’; 
 
9.4 Exercícios Propostos 
 
 
9.5 Leituras Recomendadas 
 
Para aprofundar os temas abordados neste capítulo, recomendados que o leitor 
consulte os livros: 
 
 Luís D.;- SQL, Capítulo 12- Criação e Manutenção de Tabelas, 14ª Edi-
ção Actualizada, FCA, 2017 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Parte2: Modelo de Dados Relacional e SQL, Capítulo 4- 
SQL Básica, tradução da 6º edição americana São Paulo, Pearson Addi-
son Wesley, 2011. 
 
 Garcia-Molina, Ullman, Widom: Database Systems – The Complete Book, 
Chaper 6- The DataBase Language SQL, Prentice-Hall, 2009. 
 
 Guimarães C. C.,- Fundamentos de Banco de Dados: Modelagem, Projeto 
e Linguagem SQL, 1ª Edição, Editora da UNICAMP, 2003 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 116 
 
 Groff J. R., Wienberg P. N., Oppel A.;- The Complete Reference SQL, Part 
III, Chaper 10- DataBase Update, 3th Edition, McGraw-Hill, 2010. 
 
 Ramakrishnan R., Gehrke J.;- Sistema de Gerenciamento de Banco de 
Dados, Capítulo 3: O Modelo Relacional, Tradução da 3ª edição ameri-
cana, São Paulo, McGraw-Hill, 2008. 
MAC0426 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 117 
 
 
10 
Capítulo 
SQL- Consultas Simples 
 
“A SAP e a Associação Alemã de Futebol (DFB) utilizaram o Big Data para tomar decisões inteligentes 
sobre táticas, condição física dos jogadores, prospecção, bem como gestão dos jogos na copa de mundo 
do Brasil” 
 
-SAP Blogs- 
 
 
10.1 Introdução 
 
Nos capítulos anteriores estudamos com alguma profundidade os módulos DDL 
e o DML da Linguagem SQL. Agora, vamos concentrar o nosso estudo no mó-
dulo DQL dessa linguagem. O nosso objectivo é estudar como se pode extrair 
informações úteis à sociedade a partir dos dados armazenados nas tabelas. 
 
Neste capítulo iremos estudar de forma muito superficial o comando para extrair 
informação em ou mais tabelas. 
 
10.2 Linguagem Consulta de Informação (DQL) 
 
Na linguagem SQL, a extração de informação das tabelas é feita pelo 
subconjunto DQL- Data Query Language, que possui o comando SELECT, 
embora, muito autores consideram que esse comando faz parte da DML - Data 
Manipulation Language. 
 
10.2.1 Extracção de informação numa Tabela 
 
Vamos dar continuidade ao nosso estudo com a extração da informação da Base 
de dados que criamos no capítulo anterior. Mas, para que o leitor posso conso-
lidar os seus conhecimentos, aconselhamos a inserir todos os dados das tabelas 
que descrevemos anteriormente. 
 
Para extrair a informação de uma tabela devemos utilizar o comando SELECT 
que possui a seguinte sintaxe: 
 
SELECT Campo1, Campo2, … , Campon 
FROM Tabela; 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 118 
 
 
Exemplo: visualizar toda a informação da tabela de clientes. 
 
Para visualizarmos o conteúdo de todas as linhas da tabela de clientes, basta 
executar a seguinte consulta: 
 
SELECT * 
FROM CLIENTE; 
 
O operador * seleciona automaticamente todas as colunas dessa tabela. 
 
Mas a maior parte das vezes, estamos interessados em visualizara informação 
de apenas algumas colunas de uma tabela. 
 
Exemplo: mostrar o nome, o sobrenome e a data de nascimento dos clientes que 
foram carregados na tabela de clientes. 
 
Esta consulta é chamada de Projeção, e pode ser feita pela seguinte consulta: 
 
SELECT Nome, Sobrenome, datNasc 
FROM CLIENTE; 
 
10.2.2 Restrições 
 
Para visualizar um conjunto de linhas que satisfazem uma determinada 
condição, devemos utilizar a cláusula WHERE no comando SELECT. 
 
 
SELECT Campo1, Campo2, … , Campon 
FROM Tabela 
 WHERE Condição; 
 
Mas para utilizar essa condição, temos de recorrer aos seguintes operadores. 
 
10.2.3 Operadores Aritméticos 
 
Os operadores aritméticos servem para realizar cálculos com campos do tipo 
numérico. 
Operador Descrição 
+ 
- 
* 
/ 
% 
adição 
subtração 
multiplicação 
divisão inteira 
Resto da divisão 
 
Exemplo: extrair da tabela de produtos, o preço de venda de todos os artigos 
com um aumento de 5%. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 119 
 
 
Para visualizarmos essa informação basta executar a seguinte consulta. 
 
SELECT CodPro, Autor, Titulo, PrVenda * 1.05 
FROM PRODUTO; 
 
 
10.2.4 Operadores Relacionais 
 
Os operadores relacionais servem para realizar comparações com os valores 
dos campos da tabela. 
 
Operador Descrição 
= 
> 
< 
>= 
<= 
<> 
igual a 
maior do que 
menor do que 
maior ou igual a 
menor ou igual a 
diferente de 
 
Exemplo: extrair da tabela de produtos os artigos que pertencem a família de 
livros. 
 
Sabemos que o código que identifica a família dos livros possui o valor 1. Então, 
para visualizar todos os artigos que pertence a essa família, basta executar a 
seguinte consulta: 
 
SELECT CodPro, Autor, Titulo, PrCusto, PrVenda, QtdStock 
FROM PRODUTO 
 WHERE CodFam = 1; 
 
Exemplo: extrair da tabela de produtos os artigos que não têm stock. 
 
Sabemos que qualquer artigo não possui stock quando a quantidade existente é 
igual a zeros. Então, para visualizar na tela esses artigos, basta executar a se-
guinte consulta: 
 
SELECT CodPro, Autor, Titulo, PrCusto, PrVenda 
FROM PRODUTO 
 WHERE Stock = 0; 
 
10.2.5 Operadores Lógicos 
 
Os operadores lógicos servem para realizar operações booleanas com campos 
da tabela. 
 
 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 120 
 
Operador Descrição 
AND 
OR 
NOT 
e 
ou 
não 
 
Exemplo: extrair da tabela de produtos os cd’s que têm um preço de custo 
superior a 570.00 Kz 
 
Sabemos pela tabela de produtos que o código da família dos Cd’s é igual a 3. 
Então, para visualizamos todos os cd’s cujo preço de custo é superior a 570,00 
Kz, basta executar a seguinte consulta: 
 
SELECT CodPro, Autor, Titulo, PrCusto, PrVenda, QtdStock 
FROM PRODUTO 
 WHERE CodFam = 3 AND PrCusto > 570,00; 
 
Exemplo: extrair da tabela de produtos os artigos que pertencem a família de 
CD’s ou a família das revistas. 
 
Sabemos pela tabela de produtos que o código da família dos Cd’s é igual a 3, 
e que o código da família das revistas é igual a 4. Então, para visualizamos tela 
todos os cd’s que pertencem a essas famílias, basta executar a seguinte con-
sulta: 
 
SELECT CodPro, Autor, Titulo, PrCusto, PrVenda, QtdStock 
FROM PRODUTO 
 WHERE CodFam = 3 OR CodFam = 4; 
 
10.2.6 Operador BETWEEN 
 
O operador BETWEEN permite especificar intervalos de valores. Apresentamos 
a seguir, a sintaxe desse operador no comando SELECT. 
 
SELECT Campo1, Campo2, … , Campon 
FROM Tabela 
 WHERE valor [NOT] BETWEEN limiteInferio AND limiteSuperior; 
 
Para que o leitor tenha uma melhor interpretação deste operador, vamos 
compará-lo aos operadores relacionais. 
 
A expressão: 
 
 valor BETWEEN limiteInferio AND limiteSuperior 
 
é equivalente a expressão 
 
 valor >= limiteInferio 1 AND valor <= limiteSuperior 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 121 
 
enquanto que a expressão: 
 
valor NOT BETWEEN limiteInferio AND limiteSuperior 
 
é equivalente a expressão 
 
valor < limiteInferio OR valor > limiteSuperior 
 
Exemplo: extrair os artigos cujo preço de custo está entre 750,00 Kz e 1500,00 
Kz kwanzas. 
 
Para visualizar essa informação basta executar a seguinte consulta: 
 
SELECT CodPro, Autor, Titulo 
FROM PRODUTO 
 WHERE PrCusto BETWEEN 750,00 AND 1500,00; 
 
que é equivalente à 
 
SELECT CodPro, Autor, Titulo 
FROM PRODUTO 
WHERE PrCusto >= 750,00 AND PrCusto <= 1500,00; 
 
10.2.7 Operador IN 
 
O operador IN permite que se verifique se um determinado campo c, está contido 
num determinado conjunto de elementos T, e retorna TRUE se o valor c for igual 
a algum elemento de T. Apresentamos a seguir, a sintaxe desse operador no 
comando SELECT. 
 
SELECT Campo1, Campo2, … , Campon 
FROM Tabela 
 WHERE valor [NOT] IN (valor1, valor2, … , valorn); 
 
Exemplo: extrair da tabela de produtos os artigos que possuem o código de 
família igual a 3 (CD) ou igual a 4 (revistas). 
 
Para visualizarmos essa informação, basta executar a seguinte consulta. 
 
SELECT CodPro, Autor, Título, PrCusto, PrVenda 
FROM PRODUTO 
 WHERE CodFam IN (3,4); 
 
que é equivalente a: 
 
SELECT CodPro, Autor, Titulo, PrCusto, PrVenda, QtdStock 
FROM PRODUTO 
 WHERE CodFam = 3 OR CodFam = 4; 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 122 
 
 
Exemplo: extrair da tabela de produtos os títulos dos CD’s do Tito Paris e do Teta 
Lando. 
 
Para visualizarmos essa informação, basta executar a seguinte consulta 
SELECT Titulo 
FROM PRODUTO 
 WHERE autor IN (‘Tito Paris’, ‘Teta Lando’); 
 
que é equivalente à: 
 
SELECT Titulo 
FROM PRODUTO 
 WHERE autor = ‘Tito Paris’ OR autor = ‘Teta Lando’; 
 
Observação: A Linguagem SQL distingue as letras maiúsculas das letras 
minúsculas. 
 
10.2.8 Operador LIKE 
 
A linguagem SQL disponibiliza recursos para efectuar a comparação de cadeias 
de caracteres strings. Para esse caso, as string’s são comparadas elemento por 
elemento em ordem alfabética ou lexicográfica, do inicio para o fim. 
 
O operador LIKE, realiza essa comparação desde que sejam utilizados os 
seguintes wildcards. 
 
Wildcards Significado 
% 
? 
- 
qualquer cadeia de caracteres com zero ou mais caracteres 
qualquer cadeia de caracteres 
qualquer cadeia de caracteres com zero ou um caracter 
 
Exemplo: extrair da tabela de clientes, todos os clientes cujo nome começa com 
a palavra Carlos. 
 
SELECT * 
FROM CLIENTE 
 WHERE Nome = ‘Carlos%a’; 
 
Exemplo: extrair da tabela CLIENTE, o autor, o título e a quantidade de artigos 
em stock, dos artigos que possuem um título que contém a posição ama. 
 
SELECT Autor, Titulo, QtdStock 
FROM PRODUTO 
 WHERE Titulo = ‘%ama%’; 
 
10.2.9 Eliminação das Repetições 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 123 
 
 
Ao executarmos um comando SELECT, muitas vezes aparecem linhas 
repetidas. Para eliminar essas linhas devemos utilizar como sufixo desse a 
palavra reservada DISTINCT, ou seja: 
 
 SELECT DISTINCT campo1, campo2, … , campon 
 FROM …. 
 
10.2.10 Realização de Cálculos 
 
Com a linguagem SQL permite que se crie campos que não pertencem à tabela 
e que possam conter valores que sejam obtidos por cálculos de alguns campos 
da tabela. 
 
Exemplo:mostre como ficariam os preços de venda de todos os cd’s se 
quiséssemos fazer um aumento de 20%. 
 
SELECT Titulo, Prvenda, (PrVenda * 1.2) NovoPreco 
FROM PRODUTO 
 WHERE CodFam = 2; 
 
10.2.10 Ordenação 
 
A ordenação das colunas de uma tabela pode ser feita pela cláusula ORDER 
BY. Esta cláusula, se existir, deve ser colocada na última linha do comando 
SELECT. 
 
SELECT Campo1, Campo2, … , Campon 
FROM Tabela 
 WHERE valor [NOT] IN ( valor1, valor2, … , valorn) 
 ORDER BY campo1 [ASC| DESC], … , campo1 [ASC| DESC]; 
 
onde 
 ASC indica que a ordenação será feita em ordem crescente; 
e 
 DESC que a ordenação será feita em ordem decrescente; 
 
Exemplo: extrair na tabela de clientes, o nome, sobrenome e o sexo de todos os 
clientes da papelaria, ordenados em ordem crescente por data de nascimento. 
 
Como por defeito a ordenação é feita em ordem crescente, então, para visualizar 
essa informação, basta executar a seguinte consulta: 
 
SELECT DISTINCT Nome, Sobrenome, Sexo 
FROM CLIENTE 
 ORDER BY datNasc; 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 124 
 
Exemplo: extrair os artigos que têm stock, cujo preço de venda está entre 150,00 
há 1000,00 kwanzas, ordenados em ordem decrescente pela quantidade de 
stock. 
 
Para visualizar essa informação, basta executar a seguinte consulta: 
 
SELECT DISTINCT Titulo, QtdStock 
FROM PRODUTO 
 WHERE QtdStock > 0 AND PrVenda BETWEEN 150,00 AND 1000,00 
 ORDER BY DESC QtdStock; 
 
Exemplo: extrair os artigos, cuja quantidade em stock é maior do que 500 
unidades, e cuja margem de lucro é superior a 10%. 
 
Para visualizar essa informação, basta executar a seguinte consulta. 
 
SELECT DISTINCT Titulo, QtdStock 
FROM PRODUTO 
 WHERE QtdStock > 500 AND (PrVenda – Prcusto) * 2 > 10 
 ORDER BY DESC QtdStock; 
 
Mas, muitas vezes temos de limitar o número de linhas que pretendemos 
visualizar, para esse efeito, devemos utilizar a palavra reservada 
 
LIMIT N; 
 
Esse limite é normalmente utilizado depois da Cláusula ORDER BY de forma a 
selecionar as n primeiras linhas que satisfazem um determinado critério de 
ordenação. 
 
Exemplo: mostrar os títulos dos 5 primeiros artigos diferentes, em ordem 
decrescente, com stock na papelaria. 
 
Para visualizar essa informação, basta executar a consulta. 
 
SELECT DISTINCT Titulo, QtdStock 
FROM PRODUTO 
 WHERE QtdStock > 0 
 ORDER BY DESC QtdStock LIMIT 5; 
 
10.2.11 Operações com Conjuntos 
 
O SQL incorpora algumas das operações com conjuntos, em que o resultado é 
um conjunto de linhas não duplicadas. 
 
Reunião: (Consulta1) UNION (Consulta2); 
Intersecção: (Consulta1) INTERSECT (Consulta2); 
Diferença: (Consulta1) EXCEPT (Consulta2); 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 125 
 
Mas também existem as versões destes operadores que não removem as linhas 
duplicadas. 
 
Reunião: (Consulta1) UNION ALL (Consulta2); 
Intersecção: (Consulta1) INTERSECT ALL (Consulta2); 
Diferença: (Consulta1) EXCEPT ALL (Consulta2); 
 
A operação de união de conjuntos entre duas tabelas A e B, mostra os elementos 
comuns a essas tabelas, ou seja, A U B. 
 
Mas só pode ser utilizada se essas tabelas tiverem os mesmos campos e esses 
campos estiverem na mesma ordem. 
 
Exemplo: mostrar nome dos autores que possuem artigos na secção de família 
de livros ou artigos da família de revistas. 
 
Para visualizar essa informação, basta interrogar na tabela PRODUTO, todos 
aos autores que têm artigos que são da família cujo código é igual a 1 ou artigos 
que são da família cujo código é igual a 5, ou seja: 
 
(SELECT Autor 
FROM PRODUTO 
WHERE CodFam = 1) 
UNION 
(SELECT Autor 
FROM PRODUTO 
WHERE CodFam = 5) 
 
Para desenvolver essa consulta, necessitamos de dois comandos SQL que es-
tão ligados pela cláusula UNION. Se existirem registros repetidos, a operação 
de união irá automaticamente elimina-lo. Isso quer dizer que essa consulta é 
equivalente à: 
 
SELECT DISTINCT Autor 
FROM PRODUTO 
WHERE CodFam = 1 OR CodFam = 5; 
 
A operação de diferença entre duas tabelas A e B, apesar de não ser implemen-
tada em alguns SGBD, mostra os elementos que pertencem a tabela A e não 
pertencem a Tabela B, ou seja, A − B. 
 
Exemplo: mostrar nome dos autores que não venderam artigos. 
 
Para visualizar na tela os autores que não venderam artigos, basta interrogar 
nas tabelas PRODUTO e HISTORICO, os autores que estão na tabela de PRO-
DUTO, têm stock, mas não possuem nenhuma ocorrência na tabela de Histórico, 
ou seja: 
 
(SELECT Autor 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 126 
 
FROM PRODUTO 
WHERE qtdStock > 0) 
EXCEPT 
(SELECT Autor 
FROM HISTORICO) 
 
A operação de intersecção entre duas tabelas A e B, mostra os elementos que 
estão nas duas tabelas, ou seja, A ∩ B. 
 
Exemplo: mostrar nome dos autores que venderam artigos. 
 
Para visualizar na tela os autores que venderam artigos, basta interrogar nas 
tabelas PRODUTO e HISTORICO, os autores que estão na tabela de PRO-
DUTO, têm stock, e possuem alguma ocorrência na tabela de Histórico, ou seja: 
 
(SELECT Autor 
FROM PRODUTO 
WHERE qtdStock > 0) 
INTERSECT 
(SELECT Autor 
FROM HISTORICO) 
 
10.2.12 Inserção de um conjunto de linhas 
 
Para copiar os dados de uma tabela para outra, podemos associar o comando 
INSERT com o comando SELECT, utilizando a seguinte sintaxe: 
 
INSERT INTO NomeDaTabela [(Campo1, Campo2, …, Campon)] 
SELECT … 
FROM Tabela 
WHERE Condição; 
 
Exemplo: suponhamos que foi criada a tabela de livros que possui os mesmos 
campos da tabela de produtos. Para copiar todos os livros da tabela produtos 
para a tabela de livros. 
 
Para visualizar essa informação, basta executar a seguinte consulta. 
 
 INSERT INTO LIVRO 
SELECT * 
FROM PRODUTO 
 WHERE CodFam = 1; 
 
Ou 
 
INSERT INTO LIVRO(CodPro,Autor,Titulo, CodFam, Prcusto, PrVenda, Stock) 
SELECT * 
FROM PRODUTO 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 127 
 
 WHERE CodFam = 1; 
 
10.3 Extracção de Dados em Várias Tabelas 
 
10.3.1 Conceitos 
 
Nas secções anteriores, vimos como extrair os dados de uma tabela. Mas muitas 
vezes temos a necessidade de extrair dados que estão contidos em várias 
tabelas. A esse tipo de extração dá-se o nome de junção (join). Mas para efectuar 
essa extracção, necessitamos de um critério que estabeleça a comparação entre 
as tabelas, e esse critério baseia-se na comparação da chave primária de uma 
tabela com a chave estrangeira de outra. Na Ciência da Computação, este tipo 
de junção recebe o nome de junção idêntica (Equi-join), e nestas notas, à iremos 
estudar de uma forma muito superficial, com a sintaxe da SQL/86. 
 
Uma junção (join) permite extrair com único comando SELECT à informação que 
está contida em várias tabelas, e possui à seguinte sintaxe: 
 
SELECT Campo1, Campo2, … , Campon 
FROM Tabela1, Tabela2, … , Tabelan 
 WHERE Condição; 
 
onde às várias tabelas são descritas na cláusula FROM, e à relação entre elas 
é descrita pela cláusula WHERE. 
 
10.3.2 Produto Cartesiano 
 
Entendemos por Produto Cartesiano (Cross-Join) a junção de várias tabelas sem 
qualquer restrição. 
 
Exemplo: determinar o produto cartesiano entre a tabela de clientes e a tabela 
de produtos. 
 
Para visualizar essa informação, basta executar a seguinte consulta. 
 
SELECT * 
FROM CLIENTE, PRODUTO; 
 
Essaconsulta vai mostrar a associação entre cada linha da tabela de clientes 
com todas as linhas da tabela de produtos. Se por exemplo, a tabela de clientes 
tiver 9 linhas e a tabela produtos tiver 10 linhas, o produto cartesiano terá 90 
linhas. Mas se invertemos a ordem dessas tabelas, o produto cartesiano terá o 
mesmo número de linhas, mas a ordem das colunas será diferente. 
 
10.3.3 Junção Natural 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 128 
 
A Junção Natural (Natural-Join) consiste na aglutinação de duas ou mais tabelas, 
com alguma restrição. Essa restrição é feita na cláusula WHERE, com a 
comparação da chave primária de uma tabela com a chave estrangeira da outra. 
 
Em termos de teoria de conjuntos, a Natural-Join, representa a intersecção de 
conjuntos, e é descrito pelo seguinte diagrama de Venn Euler: 
 
Mas se não mencionarmos no comando SELECT os campos que pretendemos 
visualizar, serão mostrados todos os campos das tabelas envolvidas, e teremos 
para esse caso, informações repetidas. 
 
Exemplo: dado o código de um artigo, mostrar o seu nome, o seu título e quantos 
exemplares foram vendidos. 
 
Em termos mais concretos, suponhamos o código do produto é igual a dois, 
queremos saber o nome do autor, os títulos das obras desse autor, e quantos 
exemplares foram vendidos. 
 
Vamos estruturar em primeiro lugar essa informação. O nome do autor e o título 
da obra estão na tabela de produtos, enquanto que, a quantidade vendida está 
na tabela de Histórico dos produtos. A tabela de produtos tem como chave 
primária o Código de Produto, enquanto que a Tabela histórico das vendas dos 
produtos esse código é uma chave estrangeira. Vamos aproveitar essa ligação 
para extrair essa informação: 
 
SELECT PRODUTO.Autor, PRODUTO.Titulo, HISTORICO.QtdVendida 
FROM PRODUTO, HISTORICO 
 WHERE PRODUTO.Codpro =HISTORICO.Codpro AND PRODUTO.CodPro = 2; 
 
Observe que o acesso a qualquer campo da tabela é feito pela notação: 
 
 NomeDaTabela.NomeDoCampo 
 
Vamos tornar a informação que visualizamos mais fácil de interpretar com a sua 
ordenação em ordem crescente de data de compra. Como acreditamos que o 
leitor não deverá ter qualquer dificuldade em estruturar a informação, 
apresentaremos apenas uma consulta que mostra essa informação. 
 
 
 
 
SELECT PRODUTO.Autor, PRODUTO.Titulo, HISTORICO.QtdVendida, 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 129 
 
 HISTORICO.DatVenda 
FROM PRODUTO, HISTORICO 
 WHERE PRODUTO.Codpro =HISTORICO.Codpro AND PRODUTO.CodPro = 2 
 ORDER BY HISTORICO.DatVenda; 
 
Exemplo: mostrar o nome, o sobrenome, e o número do telefone de todos os 
clientes que compraram os CD’s do Tito Paris e do Tela Lando, ordem crescente 
por data de compra. 
 
Mas antes de escrevermos essa consulta, vamos mais uma vez, estruturar a 
informação que será visualizada. Na tabela de clientes temos o nome, o 
sobrenome e o número de telefone, enquanto que, na tabela de produtos temos 
o autor e o título, e na tabela Histórico das vendas dos artigos temos a 
quantidade vendida e a data de venda. Vamos ligar essas tabelas pelas suas 
chaves. 
 
SELECT CLIENTE.Nome, CLIENTE.Sobrenome, CLIENTE.Telefone, 
 PRODUTO.Autor, PRODUTO.Titulo, HISTORICO.QtdVendida, 
 HISTORICO.DatVenda 
FROM CLIENTE, PRODUTO, HISTORICO 
 WHERE PRODUTO.Codpro = HISTORICO.Codpro AND 
 CLIENTE.Codcli = HISTORICO.Codcli AND 
 PRODUTO.CodFam = 1 AND 
 PRODUTO.Autor = ‘Tito Paris’ OR ‘Teta Lando’ 
 ORDER BY HISTORICO.DatVenda; 
 
Mas essa consulta não está de acordo com as boas prácticas de programação. 
Para tornar a consulta mais genérica, e de acordo com as boas práticas de 
programação, devemos incluir a tabela de família dos produtos. 
 
SELECT CLIENTE.Nome, CLIENTE.Sobrenome, CLIENTE.Telefone, 
 PRODUTO.Autor, PRODUTO.Titulo, HISTORICO.QtdVendida, 
 HISTORICO.DatVenda 
FROM CLIENTE, PRODUTO, HISTORICO, FAMILIA 
 WHERE PRODUTO.Codpro =HISTORICO.Codpro AND 
 CLIENTE.Codcli = HISTORICO.Codcli AND 
 FAMILIA.Descricao = ‘CD’ AND 
 PRODUTO.CodFam = FAMILIA.CodFam AND 
 PRODUTO.Autor = ‘Tito Paris’ OR ‘Teta Lando’ 
 ORDER BY HISTORIO.DatVenda 
 
Podemos utilizar a junção natural, para implementar a operação de intersecção 
entre duas tabelas. Vamos clarificar esse conceito com o exemplo estudado an-
teriormente. 
 
Exemplo: mostrar nome dos autores, o titulo do produto e as quantidades vendi-
das, ordenadas por data de venda. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 130 
 
Vamos estruturar a informação que será visualizada. Na tabela de produtos 
temos o código do produto, o nome do autor, o título do produto, e na tabela 
Histórico das vendas, temos o código do produto, e a quantidade vendida. 
Vamos ligar essas tabelas pelas suas chaves. 
 
SELECT PRODUTO.Autor, PRODUTO.Titulo, HISTORICO.QtdVendida, 
 HISTORICO.DatVenda 
FROM PRODUTO, HISTORICO 
 WHERE PRODUTO.Codpro = HISTORICO.Codpro AND 
 HISTORICO.QtdVendida > 0 
 ORDER BY HISTORIO.DatVenda 
 
10.3.4 Apelidos 
 
Nas consultas anteriores, escrevemos várias vezes o nome das tabelas. Para 
evitar essa redundância de código, devemos utilizar apelidos (aliás). Por 
exemplo, para o exemplo anterior, teremos: 
 
SELECT CLI.Nome, CLI.Sobrenome, CLI.Telefone, PRO.Autor, PRO.Titulo, 
 HIS.QtdVendida, HIS.DatVenda 
FROM CLIENTE AS CLI, PRODUTO AS PRO, HISTORICO AS HIS, 
 FAMILIA AS FAM 
 WHERE PRO.Codpro =HIS.Codpro AND CLI.Codcli = HIS.Codcli AND 
 FAM.Descricao = ‘CD’ AND PRO.CodFam = FAM.CodFam AND 
 PRO.Autor = ‘Tito Paris’ OR ‘Teta Lando’ 
 ORDER BY HIS.DatVenda 
 
Os apelidos (Aláis) devem ser utilizados para evitar por um lado, a repetição do 
nome das tabelas, e por outro, para melhorar a compreensão e legibilidade do 
código. 
 
É muito usual encontrar-se num Projecto de Base de Dados, campos de tabelas 
diferentes com os mesmos nomes. Por exemplo: 
 
DEPARTAMENTO (Nome, NumDep, CodChefe) 
PK (NumDep) 
 
PROJECTO (Nome, NumProj, Localização, NumDep) 
PK (NumProj) 
FK (NumDep) 
 
Como distinguir numa consulta, o campo Nome da Tabela de DEPARTAMENTO 
do campo Nome da tabela de PROJECTO. 
 
A solução consiste em utilizar um apelido (Aliás), que vai relacionar o Nome a 
respectiva tabela. 
 
10.3.5 Auto Junção 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 131 
 
 
Entende-se por Auto Junção (Auto-Join), a junção feita na mesma tabela, que 
alguns autores denominam por junção com recursividade. 
 
Para realizar essa junção devemos utilizar um apelido (Aliás) para indicar os 
papeis dos actores que participam nessa relação (tabela). 
 
Vamos consolidar esse conceito, com um exemplo muito simples. 
 
Dado o esquema relacional 
 
EMPREGADOS (CodEmp, CodChefe, Nome, SobreNome, Função,Salario) 
PK (CodEmp) 
FK (CodChefe) REFERENTE EMPREGADO(codEmp) 
 
cujo Script deixamos como exercício, e também deixamos como exercício o 
carregamento dos seguintes dados: 
 
CodEmp Nome SobreNome Função SalarioCodChefe 
1 
2 
3 
4 
5 
João 
Rui 
Télcio 
Rita 
Cliana 
Castro 
da Costa 
Vieira 
Sardinha 
Barros 
Administrador 
Director 
Técnico 
Técnico 
Director 
850.000,00 
500.000,00 
250.000,00 
250.000,00 
500.000,00 
 
1 
2 
2 
1 
 
Observe que o funcionário João Castro não possui nenhum gerente, enquanto 
que o funcionário Rui da Costa e a Funcionária Cliane Barros são subordinadas 
do funcionário João Castro. 
 
Exemplo: extrair o nome, o sobrenome de cada empregado, e o nome e o 
sobrenome do respectivo supervisor. 
 
Vamos utilizar os apelidos EMP para empregado e SUP para supervisor. Para 
visualizar essa informação, devemos executar a seguinte consulta. 
 
SELECT EMP.Nome, EMP.SobreNome, SUP.Nome, SUP.Sobrenome 
FROM EMPREGADO AS EMP, EMPREGADO AS SUP 
WHERE EMP.CodEmp = SUP.CodEmp 
ORDEY BY EMP.Nome; 
 
10.3.5 Junção Interna 
 
A junção Interna (Inner–join) tem por finalidade aglutinar duas ou mais tabelas, 
com base nas chaves primárias e secundárias. 
 
Em termos de teoria de conjuntos, a Inner-join, representa a intersecção de 
conjuntos, e é descrito pelo seguinte diagrama de Venn Euler: 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 132 
 
 
Exemplo: mostrar nome dos autores, o titulo do produto e as quantidades vendi-
das, ordenadas por data de venda. 
 
SELECT PRO.Autor, PRO.Titulo, HIS.QtdVendida, HIS.DatVenda 
FROM PRODUTO AS PRO INNER JOIN HISTORICO AS HIS 
 ON PRO.Codpro = HIS.Codpro AND HIS.QtdVendida > 0 
 ORDER BY HIS.DatVenda 
 
Exemplo: mostrar o código, o nome, título e preço de custo e venda de todos os 
livros carregadas na base de dados. 
 
Vamos estruturar a informação que será visualizada. Na tabela de produtos 
temos o código do produto, o nome do produto, o preço de custo, o preço de 
venda e o código da família do artigo, enquanto que, na tabela de famílias, temos 
o código da família e sua descrição. 
 
SELECT PRO. Codigo, PRO.titulo, PRO.Prcusto, PRO. Prvenda 
FROM PRODUTO AS PRO INNER JOIN FAMILIA AS FAM 
 ON PROD.Codfam = FAM:CodFam AND Fam:codFam = 1 
 
10.3.5 Outros Tipos de Junção 
 
 
 
Com base na figura anterior, o leitor poderá ter uma nação precisa dos vários 
tipos de junção que a linguagem SQL disponibiliza. Para aprofundar esse 
assunto recomendamos a obra de Groff [2010] ou Garcia-Molina [2009]. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 133 
 
 
 
10.4 Exercícios Propostos 
 
10.4.1- Dado o esquema relacional 
 
MOTORISTA (CodMot, Nome, Avaliação, Idade) 
AUTOCARRO (Matricula, Marca, Cor) 
RESERVA (Matricula, CodAuto, data) 
 
Desenvolva as seguintes consultas em SQL: 
 
1-Mostre os nomes e as idades de todos os motoristas. 
 
2-Mostre os nomes dos motoristas que possuem uma avaliação superior a 15 
valores. 
 
3-Mostre os nomes de todos os motoristas que conduziram o autocarro com a 
matricula LD2286. 
 
4-Mostre os códigos, e o nome de todos os motoristas que conduziram autocar-
ros de marca volvo. 
 
5-Mostre as idades dos motoristas cujos nomes começam e termina com a letra 
B e têm no mínimo três caracteres. 
 
6-Mostre os nomes de todos os motoristas que conduziram autocarros de marca 
volvo e autocarros de marca Scania. 
 
7-Mostre o código e o nome dos motoristas que conduziram autocarros de marca 
Volvo e não conduziram autocarros de marca Scania. 
 
8-Mostre os códigos e os nomes de todos os motoristas que têm uma avaliação 
entre 12 a 17 que conduziram o autocarro que possui a matricula LD2453. 
 
9-Mostre os códigos e os nomes dos motoristas que não conduziram autocarros 
de marca volvo e nem conduziram autocarros de marca volvo. 
 
10-Mostre os códigos e os nomes dos motoristas cujas avaliações são melhores 
do que as avaliações do motorista Silva. 
 
11-Mostre os nomes dos motoristas em ordenados em ordem decrescente por 
avaliação. 
 
12-Mostre o nome dos motoristas que conduziram todos os autocarros. 
 
10.4.2- Dado o seguinte esquema relacional 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 134 
 
AGENCIA (CodAgencia, nome, rua, cidade) 
PK (CodAgencia) 
 
EMPRESTIMO (NumEmprestimo, CodAgencia, total) 
PK (NumEmprestimo) 
FK (CodAgencia) REFERENTE AGENCIA (CodAgencia) 
 
DEVEDOR (CodCliente, NumEmprestimo) 
PK (CodCliente) 
FK (NumEmprestimo) REFRENTE EMPRESTIMO (NumEmprestimo) 
 
CONTA (NumConta, CodAgencia, Saldo) 
PK (NumConta) 
FK (CodAgencia) REFERENTE AGENCIA (CodAgencia) 
 
CLIENTE (CodCliente, NumConta) 
PK (CodCliente) 
FK (NumConta) REFERENTE CONTA (NumConta) 
 
Desenvolva as seguintes consultas em SQL: 
 
1- Mostre o nome por agencia, o nome de todos os clientes que solicitaram um 
empréstimo maior do que 200.000,00 Kwanzas. 
 
2- Mostre o nome dos clientes que já pagaram os seus empréstimos, e também 
mostre o valor desse empréstimo. 
 
3- Mostre o nome dos clientes que têm um empréstimo a pagar na agencia dos 
combates, ordenado em ordem ascendente pelo valor a pagar. 
 
4- Mostre o nome dos clientes que solicitaram um empréstimo ou que abriram 
uma conta na agencia da Baixa ou ambos. 
 
5- Mostre o nome de todos os clientes que têm a sua conta bancária sem saldo, 
mas têm um empréstimo a pagar. 
 
6- Mostre o nome de todos os clientes que pediram um empréstimo ao banco, 
mas não possuem uma conta bancaria. 
 
7- Mostre o nome de todas as agencias, seu endereço que possuem clientes 
com empréstimos para saldar, ordenado por ´numero de agencia. 
 
10.4.4- Dado o esquema relacional 
 
EMPREGADO (NumBI, Nome, SobreNome, DataNasc, Rua, Casa, bairro, Sexo, 
Salario, CodSup, CodDep, CodProf) 
PK (NumBI) 
FK (CodSup) REFERENTE FUNCIONARIO (CodFunc) 
FK (CodDep) REFERENTE DEPARTAMENTO (CodDep) 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 135 
 
FK (CodProf) REFERENTE PROFISSAO (CodProf) 
 
DEPARTAMENTO(CodDep, Nome, Rua, Casa, Bairro, DataGerente) 
PK (CodDep) 
 
PROFISSAO (CodProf, Descricao) 
PK (CodPro) 
 
 
PROJETO(CodProj, Nome, Rua, Casa, Bairro, Cidade, CodDep) 
PK (CodProj) 
FK (CodDep) REFERENTE DEPARTAMENTO(CodDep) 
 
TRABALHA_EM (NumBI, CodProj, HorasSemana) 
FK (NumBI) REFERENTE FUNCIONARIO (NumBI) 
FK (CodProj) REFERENTE PROJETO (CodProj) 
 
DEPENDENTE (NumBI, Nome, sexo, Datanasc, Parentesco) 
PK (NumBI, Nome) 
FK (NumBI) REFERENTE FUNCIONARIO (NumBI) 
 
Desenvolva as seguintes consultas em SQL: 
 
1- Mostre o número do número do BI, o nome e o sobrenome nome de todos os 
empregados. 
 
2- Mostre o número do BI dos empregados que trabalham no departamento 4, e 
cujo salário é superior a 100.000,00 Kwanzas. 
 
3-Mostre o nome dos empregados que trabalham no departamento de 4 e no 
departamento 6. 
 
4-Mostre o número do BI, o nome e o sobrenome dos empregados que têm de-
pendentes. 
 
5- Mostre o número do BI, o nome e o sobrenome dos empregados que traba-
lham nos projectos 4, 5 ou 6, ordenados em ordem crescente por número de 
BI. 
 
6-Em todos os projectos localizados na Cidade de Luanda, mostre o nome do 
projecto, e o nome e o sobrenome do respectivo gerente. 
 
7-Em Todos os projectos localizados nas cidades de Luanda e Malange, mostre 
o nome e o sobrenome dos empregados, e os respectivos salários com um au-
mento de 5%. 
 
8- Para todos os projectos realizados na cidade de Benguela, mostre o número 
do projecto, o nome do departamento que o controla, o endereço, e a data de 
aniversário do chefe desse departamento. 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católicade Angola Prof. Manuel Meneses 136 
 
 
9- Para todos os empregados da empresa, mostre o nome, o sobrenome, a 
profissão dos empregados que não têm dependentes, ordenados em ordem 
alfabética por nome. 
 
10- Para todos os empregados da empresa, mostre o nome, o sobrenome, a 
profissão dos empregados cujos dependentes têm o mesmo nome. 
 
11-Mostre o número do BI, nome, e o sobrenome dos empregados que traba-
lham no departamento 4, cujo salário é superior 200.000,00 Kwanzas, mas infe-
rior e 500.000,00 Kwanzas. 
 
12-Mostre o nome de todos os projectos que possuem a letra ‘m’ que estão a ser 
realizados pelo departamento 6. 
 
13- Mostre o número e o nome dos projectos que possuem a letra ‘m’ e a letra 
‘a’ que estão a ser realizados pelo departamento 4 ou pelo departamento 4, or-
denados em ordem decrescente de nome do departamento. 
 
14-Mostre o nome de todos os empregados que não possuem supervisor. 
 
14-Mostre em ordem alfabética o nome dos empregados que trabalham no de-
partamento de informática, cujo salário é superior a 1500,00 euros. 
 
15- Mostre o valor do salário máximo dos empregados que trabalham no depar-
tamento de Informática e o nome e sobrenome desses empregados. 
 
16- Mostre o número do BI dos empregados que trabalham no departamento de 
Informática ou que supervisionam um empregado que trabalha nesse departa-
mento. 
 
17- Mostre o número do BI, o nome e o sobrenome, dos empregados que traba-
lham no mesmo departamento da empregada Katila Cunha, que possui o BI nº 
4875LA546, e que trabalham o mesmo número de horas. 
 
10.5 Leituras Recomendadas 
 
Para aprofundar os temas abordados neste capítulo, recomendados que o leitor 
consulte os livros: 
 
 Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos 
e aplicações, Parte2: Modelo de Dados Relacional e SQL, Capítulo 4- 
SQL Básica, tradução da 6º edição americana São Paulo, Pearson Addi-
son Wesley, 2011. 
 
 Garcia-Molina, Ullman, Widom: Database Systems – The Complete Book, 
Part II Relational DataBase Programming, Chaper 6- The DataBase Lan-
guage SQL, Prentice-Hall, 2009. 
 
 
Fundamentos de Bases de Dados: Notas de Aula 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Meneses 137 
 
 Guimarães C. C.,- Fundamentos de Banco de Dados: Modelagem, Projeto 
e Linguagem SQL, 1ª Edição, Editora da UNICAMP, 2003 
 
 Groff J. R., Wienberg P. N., Oppel A.;- The Complete Reference SQL, Part 
III Chaper 3- Simples Queries, 3 th Edition, McGraw-Hill, 2010. 
 
 Ramakrishnan R., Gehrke J.;- Sistema de Gerenciamento de Banco de 
Dados, Chaper 5: SQL: Consultas, Restrições, Gatilhos, Tradução da 3ª 
edição americana, São Paulo, McGraw-Hill, 2008. 
 
Introdução as Técnicas de Desenvolvimento de Algoritmos 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Menezes 138 
 
 
 
 
Referências Bibliográficas 
 
 
 
1. Chen P. P.;- The entity relationship model: toward a unified view of data, 
ACM Transactions on Database Systems, n. 1, p. 9-37, mar. 1976. 
 
2. Codd E. F.;-A relational model of data for large share data banks, 
Communications of the ACM, v. 13-16, p. 377-387, 1970. 
 
3. Damas L.;- SQL, 14ª Edição actualizada, Capítulo 4- Normalização, FCA, 
2017 
 
4. Date C. J;- Introdução a Sistemas de Banco de Dados, tradução da 8ª 
edição americana, LTC, 2004 
 
5. Elmasri R., Navathe S. B.;- Sistemas de Banco de Dados - Fundamentos e 
aplicações, tradução da 6ª edição americana, São Paulo, Pearson Addison 
Wesley, 2011. 
 
6. Filipe F. N. R.;- Projeto e implementação de Banco de Dados, 3ª edição, 
Érica, São Paulo, 2014. 
 
7. Garcia-Molina, Ullman J. D., Widom J.: Database Systems – The Complete 
Book, Department of Computer Science, Stanford University, Prentice-Hall, 
2009 
 
8. Guimarães C. C.,- Fundamentos de Banco de Dados: Modelagem, Projeto 
e Linguagem SQL, 1ª Edição, Editora da UNICAMP, 2003 
 
9. Groff J. R., Wienberg P. N., Oppel A.;- The Complete Reference SQL, 3 th 
Edition, McGraw-Hill, 2010. 
 
10. Heuser C. A.;- Projeto de Banco de Dados, 6ª Edição, Instituto de 
Informática da UFRGS, Porto Alegre, Bookman, 2009. 
 
11. Medeiros L. F.;- Banco de Dados princípios e prática, 1ª Edição, 
InterSaberes, Curitiba, Brasil, 2012. 
 
12. PostgreSQL global development group: Manuais do PostgreSQL, 
http://www.postgresql.org/docs, 
 
http://www.postgresql.org/docs
Introdução as Técnicas de Desenvolvimento de Algoritmos 
 
Para uso exclusivo dos alunos da Faculdade de Engenharia de Universidade Católica de Angola Prof. Manuel Menezes 139 
 
13. Pressman R. S., Maxim B. R.;- Engenharia de Software uma Abordagem 
Profissional, 8ª Edição, AMGH Editora, Porto Alegre, Brasil, 2016. 
 
14. Ramakrishnan R., Gehrke J.;- Sistema de Gerenciamento de Banco de 
Dados, Tradução da 3ª edição americana, São Paulo, McGraw-Hill, 2008. 
 
15. Rob P., Coronel C.;- Sistema de banco de Dados: Projeto, implementação 
e Administração, tradução da 8ª edição americana Edição, Cengage 
Learning, 2010. 
 
16. Setzer W., Silva F. S. C.;- Banco de Dados: Aprenda o que são, Melhore 
seu conhecimento, Construa os seus, 1ª edição, São Paulo, Edgar Blucher, 
2001 
 
17. Setzer W.;- Dado, Informação, Conhecimento e Competência, 
Departamento de Ciências de Computação, Instituto de Matemática 
Estatística, Universidade de São Paulo, 2015 ( 
www.ime.usp.br/~vwsetzer/dado-info.html) 
 
18. Silberschatz A., Korth F. K, Sudarshan S.;- Sistema de Banco de Dados, 
tradução de 5ª edição americana, Rio de Janeiro, Elsevier, 2012 
 
19. Sommerville I.;- Engenharia de Software, 9ª Edição, Pearson, São paulo, 
Brasil, 2011. 
 
20. Teorey T.; Lightstone S.; Nadeau T.; Jagadish H. V.;- Projeto e Modelagem 
de Banco de Dados, tradução da 4ª edição americana Elsevier, 2006 
http://www.ime.usp.br/~vwsetzer/dado-info.html
"O carácter de um homem não está na sua cara, altura, cor 
da pele, força ou posição social. Está rara qualidade só existe 
em homens justos, dignos, que honram as suas raízes, e acima 
de tudo, têm o seu valor. Nada nem ninguém pode comprar 
um homem íntegro e honesto” 
 
- Joaquim Bardosa - 
O que pode encontrar no livro: 
 
 Dado e Informação; 
 Sistema de Gestão de Base de Dados; 
 Fases para Desenho de uma Base de Dados 
 Modelo de Entidade e Relacionamento; 
 Modelo de Entidade e Relacionamento Estendido; 
 Modelo Relacional; 
 Conversão de Modelos; 
 Normalização; 
 Calculo e Álgebra Relacional; 
 Introdução à linguagem SQL; 
 
Manuel Soares de Menezes, é professor auxiliar do 
Departamento de Informática da Faculdade de Engenharia 
da Universidade Católica de Angola. Sua actividade de 
pesquisa tem sido dedicada a Análise e Síntese de Algoritmos. 
 
msoaresdemenezes@ucan.edu 
mailto:msoaresdemenezes@ucan.edu

Mais conteúdos dessa disciplina