Buscar

Modelagem de Banco de Dados Relacional

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 129 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 129 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 129 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIDADE II
Modelos 
de Bancos 
de Dados 
Relacionais
Everton Gomede
Modelagem e Projeto de Banco de
Dados Relacional
Imagine como transformar a especi�cação de um problema do mundo real em um
projeto de banco de dados. Isso pode ser feito utilizando o modelo Entidade-
Relacionamento (E-R) que vamos estudar.
Ao �nal desta aula, você será capaz de:
ter uma visão geral do processo de design;
entender o modelo de relacionamento entre entidades;
aprender sobre restrições em bancos de dados.
Visão Geral do Processo de Design
Aula 01
Introdução
2
A tarefa de criar um aplicativo de banco de dados é complexa, envolvendo design do
esquema do banco de dados, design dos programas que acessam e atualizam os dados
e o design de um esquema de segurança para controlar o acesso aos dados. As
necessidades dos usuários desempenham um papel central no processo de design. O
design de um ambiente de aplicativo de banco de dados completo que atenda às
necessidades de uma organização que está sendo modelada requer atenção a um
amplo conjunto de questões. Esses aspectos do uso esperado do banco de dados
in�uenciam as opções de design nos níveis físico, lógico e de visualização (ELMASRI;
NAVATHE, 2016).
Fases de Design
Para pequenas aplicações, pode ser viável, para um designer de banco de dados que
entende os requisitos desta aplicação, decidir diretamente sobre as relações a serem
criadas, seus atributos e restrições nas relações. No entanto, esse estilo de design
tona o processo difícil para aplicativos do mundo real, já que estes geralmente são
altamente complexos. Muitas vezes, ninguém entende as necessidades completas de
dados de um aplicativo. O designer de banco de dados deve interagir com os usuários
do aplicativo para entender tais necessidades da aplicação, representá-las de uma
forma que possa ser entendida pelos usuários e, em seguida, traduzi-la para os
requisitos do modelo de dados. Um modelo de dados de alto nível atende ao designer
de banco de dados com uma estrutura conceitual na qual se pode especi�car, de
maneira sistemática, os dados e requisitos dos usuários do banco de dados, além de
uma estrutura de banco de dados que atenda aos requisitos.
A fase inicial do design do banco de dados tem como objetivo caracterizar as
necessidades dos usuários do banco de dados em potencial. O designer de banco
de dados precisa interagir com especialistas de domínio e usuários para realizar
esta tarefa. O resultado desta fase é uma especi�cação dos requisitos do
usuário. Geralmente, esta especi�cação pode ser feita textualmente ou via
técnicas mais apropriadas (SILBERSCHATZ et al., 2019).
Em seguida, o designer escolhe um modelo de dados e, aplicando os conceitos do
modelo de dados escolhido, traduz esses requisitos em um esquema conceitual
para o banco de dados. O esquema desenvolvido nesta fase de projeto
conceitual fornece uma visão geral detalhada do problema que está sendo
resolvido. O modelo entidade-relacionamento, que estudaremos no restante
desta unidade é tipicamente usado para representar o design conceitual.
Declarado em termos do modelo entidade-relacionamento, o esquema
especi�ca as entidades que são representadas no banco de dados, o atributo
3
das entidades, as relações entre as entidades e as restrições nas entidades e
relacionamentos. Normalmente, a fase de projeto conceitual resulta na criação
de um diagrama entidade-relacionamento que fornece um grá�co de
representação do esquema. O designer revisa o esquema para con�rmar que
todos os requisitos de dados estão, de fato, satisfeitos e não estão em con�ito
um com os outros. Ele também pode examinar o design para remover quaisquer
recursos redundantes. Seu foco, neste momento, está em descrever os dados e
seus relacionamentos, em vez de especi�car detalhes de armazenamento
(ELMASRI; NAVATHE, 2016).
Um esquema conceitual totalmente desenvolvido também indica as exigências
funcionais da instituição. Em uma especi�cação de requisitos funcionais, os
usuários descrevem os tipos de operações (ou transações) que serão executadas
em os dados. Exemplos de operações incluem modi�cação ou atualização de
dados, pesquisa para e recuperar dados especí�cos e excluir dados. Nesta fase
de design conceitual, o projetista pode revisar o esquema para garantir que ele
atenda aos requisitos.
O processo de passar de um modelo de dados abstrato para a implementação
do banco de dados prossegue em duas fases �nais de projeto.
Na fase de design lógico, o projetista mapeia o modelo conceitual de alto nível
para o modelo de dados de implementação do sistema de banco de dados que
será usado. O modelo de dados de implementação é tipicamente o modelo
relacional modelo de dados e esta etapa, normalmente, consiste em mapear o
esquema de�nido usando o modelo de entidade-relacionamento em um
esquema de relação.
Finalmente, o designer usa o esquema de banco de dados especí�co do sistema
resultante na fase subsequente chamada de projeto físico, na qual as
características físicas do banco de dados são especi�cadas. Esses recursos
incluem a forma de arquivo ou organização e escolha de estruturas de índices
(SILBERSCHATZ et al., 2019).
O esquema físico de um banco de dados pode ser alterado com relativa facilidade
após a aplicação construída. No entanto, as alterações no esquema lógico são
geralmente mais difíceis de realizar, pois elas podem afetar várias consultas e
atualizações por meio do código do aplicativo. Portanto, é importante realizar o
4
banco de dados na fase de design com cuidado, antes de criar o restante do aplicativo
de banco de dados (ELMASRI; NAVATHE, 2016).
Alternativas de design
Uma parte importante do processo de design do banco de dados é decidir como
representar os vários tipos de “coisas” como pessoas, lugares, produtos e transações.
Usamos o termo entidade para nos referir a qualquer item distintamente
identi�cável. Em um banco de dados universitário, exemplos de entidades incluiriam
professores, alunos, departamentos, cursos e ofertas de cursos. As várias entidades
estão relacionadas uns com os outros em uma variedade de maneiras, todas as quais
precisam ser capturadas no banco de dados desenhar. Por exemplo, um aluno
frequenta um curso, enquanto um professor ensina um curso; ensinar e frequentar
ATENÇÃO
O modelo físico de um banco de dados se refere à tradução do modelo lógico em
uma linguagem de de�nição de dados. Nesse modelo, o tipo de dados, tamanhos,
restrições e demais elementos são considerados.
Fonte: 14.13.1 On-line... (s.d.).
5
são exemplos de relacionamentos entre entidades. Ao projetar um esquema de
banco de dados, devemos evitar duas grandes armadilhas:
1. redundância: um design ruim pode repetir informações. Por exemplo, se armazenar o
identi�cador do curso e o título de um curso com cada oferta de curso, o título seria
armazenado de forma redundante (ou seja, várias vezes, desnecessariamente) com cada
oferta de curso. Bastaria armazenar apenas o identi�cador do curso com cada oferta de
curso e associar o título ao identi�cador do curso apenas uma vez, em uma entidade
curso. Redundância também pode ocorrer em um esquema relacional. Na Universidade,
o exemplo que usamos até agora, temos uma relação com as informações da seção e
uma relação separada com a informação do curso. Suponha que em vez disso temos uma
relação única onde repetimos todas as informações do curso (curso id, título, nome do
departamento, créditos) uma vez para cada seção (oferta) do curso. Claramente, as
informações sobre os cursos seriam armazenadas de forma redundante. O maior
problema com essa representação redundante de informações é que as cópias de uma
informação podem se tornar inconsistentes se as informações forem atualizadas sem
tomar precauções para atualizar todas as cópias da informação. Por exemplo, ofertas
diferentes de um curso podem ter mesmo identi�cador de curso, mas podem ter títulos
diferentes. Dessa forma, não �caria claro o curso a ser selecionado. Idealmente, ainformação deve aparecer exatamente em um lugar;
2. incompletude: um mau design pode fazer certos aspectos da empresa difícil ou
impossível de modelar. Por exemplo, suponha que, como no caso anterior, tínhamos
apenas entidades correspondentes à oferta de cursos, sem uma entidade
correspondente aos cursos. Equivalente, em termos de relações, suponha que temos
uma relação única em que repetimos todas as informações do curso mação uma vez
para cada seção que o curso é oferecido. Seria, então, impossível representar
informações sobre um novo curso, a menos que é oferecido. Podemos tentar nos
contentar com o projeto problemático e os valores nulos para as informações da seção.
Tal solução não é apenas desinteressante, mas pode ser impedida por restrições de
chave primária.
Evitar projetos ruins não é su�ciente. Como um exemplo simples, considere um
cliente que compra um produto. A venda deste produto é uma relação entre o cliente
e o produto? Alternativamente, a venda em si é uma entidade que está relacionada
tanto ao cliente quanto para o produto? Esta escolha, embora simples, pode fazer
uma importante diferença em que aspectos da empresa podem ser bem modelados.
Considerando que precisa fazer escolhas como essa para um grande número de
entidades e relacionamentos em uma empresa do mundo real, não é difícil ver que o
design do banco de dados pode ser um problema desa�ador (ELMASRI; NAVATHE,
2016).
6
INFOGRÁFICO INTERATIVO
Para consultar o Infográ�co Interativo, 
acesse a versão digital deste material
SAIBA MAIS
Projetos de bancos de dados é uma área de grande relevância para a construção
de aplicações de software. Geralmente, são a base ou a estrutura de dados dessas
aplicações.
Fonte: Takai, Italiano e Ferreira (2005).
7
O Modelo de Relacionamento Entre
Entidades
O modelo de dados entidade-relacionamento (E-R) foi desenvolvido para facilitar o
projeto de um banco de dados, permitindo a especi�cação de um esquema
corporativo que representa a estrutura lógica de um banco de dados. O modelo E-R é
muito útil no mapeamento dos signi�cados e interações de empresas do mundo real
em um esquema conceitual. Devido a essa utilidade, muitas ferramentas de design de
banco de dados utilizam conceitos do modelo E-R. O modelo de dados E-R emprega
três conceitos básicos: conjuntos de entidades, conjuntos de relacionamentos e
atributos. O modelo E-R também possui uma representação diagramática associada,
o diagrama E-R, que estudaremos mais adiante neste capítulo. Em nossos estudos,
vamos utilizar uma ferramenta conhecida como MySQL Workbench.
SAIBA MAIS
O MySQL Workbench é uma excelente ferramenta para administração e projetos
de bancos de dados baseados no MySQL.
Para saber mais, acesse: http://bit.ly/2JuQtyM.
8
http://bit.ly/2JuQtyM
Conjuntos de Entidades
Uma entidade é uma “coisa” ou “objeto” no mundo real que se distingue de todos os
outros objetos. Por exemplo, cada pessoa em uma universidade é uma entidade. Uma
entidade tem um conjunto de propriedades que podem ser exclusivos identi�car a
mesma. Por exemplo, uma pessoa pode ter uma propriedade CPF cujo valor identi�ca
exclusivamente essa pessoa. Assim, o valor 110.120.130-90 para o CPF da pessoa
identi�ca de forma única uma pessoa na universidade. Da mesma forma, cursos
podem ser pensados como entidades, e ID do curso identi�ca exclusivamente uma
entidade de curso em uma universidade. Uma entidade pode ser concreta, como uma
pessoa ou um livro, ou pode ser abstrata, como um curso, uma oferta de curso ou uma
reserva de voo (ELMASRI; NAVATHE, 2016).
No processo de modelagem usamos o termo entidade sem referir-se a um conjunto
particular de entidades individuais. Uma entidade é representada por um conjunto
de atributos. Atributos são descritivos propriedades possuídas por cada membro de
um conjunto de entidades. A designação de um atributo para um conjunto de
entidades expressa que o banco de dados armazena informações semelhantes sobre
cada entidade no conjunto de entidades; no entanto, cada entidade pode ter seu
próprio valor para cada atributo. Possíveis atributos do conjunto de entidades
professor são ID, nome, nome do departamento e salário. Na vida real, haveria outros
atributos, como rua, número, número do apartamento, estado, código postal e país.
Possíveis atributos do conjunto de entidades do curso são id do curso, título, nome do
departamento e créditos. Cada entidade tem um valor para cada um dos seus
atributos. Por exemplo, uma determinada entidade professor pode ter o valor 100
para ID, o valor “JOAO” para NOME, o valor “COMPUTACAO” para o nome do
DEPARTAMENTO e o valor "5000" para o SALARIO.
O atributo ID é usado para identi�car professores com exclusividade, pois pode
existir mais de um com o mesmo nome. No Brasil, muitas empresas acham
conveniente usar o número do CPF social de uma pessoa como atributo cujo valor
identi�ca exclusivamente a mesma. Em geral, a empresa teria que criar e atribuir um
identi�cador único para cada professor. Um banco de dados inclui uma coleção de
conjuntos de entidades, cada um contendo qualquer número de entidades do mesmo
tipo. A Figura 1 mostra parte de uma universidade banco de dados que consiste em
dois conjuntos de entidades: professor e aluno. Para manter a �gura simples, apenas
alguns dos atributos dos dois conjuntos de entidades são mostrados. Um banco de
dados para uma universidade pode incluir vários outros conjuntos de entidades. Por
exemplo, além de acompanhar os professores e os alunos, a universidade também
possui informações sobre os cursos, que são representados pelo curso conjunto da
9
entidade com identi�cação do curso de atributos, título, nome do departamento e
créditos. Em um ambiente real, uma universidade banco de dados pode manter
dezenas de conjuntos de entidades.
Relacionamento entre entidades
Um relacionamento é uma associação entre várias entidades. Considere os dois
conjuntos de entidades professor e aluno da Figura 1. Nós de�nimos o
relacionamento “orienta” para denotar a associação entre professores e estudantes.
A Figura 2 mostra essa associação. Como outro exemplo, considere os dois conjuntos
de entidades aluno e seção. Podemos de�nir que o conjunto de relacionamento leva a
denotar a associação entre um aluno e as seções do curso em que o aluno está
matriculado. Um relacionamento posição em um esquema E-R representa uma
associação entre as entidades nomeadas em uma empresa do mundo real que está
sendo modelada. Como os conjuntos de entidades que participam de um
relacionamento são geralmente distintos, os papéis estão implícitos e geralmente
não precisam ser especi�cados. No entanto, eles são úteis quando o signi�cado de
um relacionamento precisa de esclarecimento. Tal é o caso quando a entidade de�ne
que um conjunto de relacionamento não é distinto; ou seja, o mesmo conjunto de
entidades participa de um relacionamento de�nido mais de uma vez, em diferentes
funções. Neste tipo de conjunto de relacionamento, às vezes chamado de conjunto de
Figura 1 - O conjunto de professores de uma universidade e o conjunto de alunos
Fonte: Adaptada de Silberschatz et al. (2019).
10
relacionamento recursivo, nomes de funções explícitos são necessários para
especi�car como uma entidade participa de uma instância de um relacionamento
(ELMASRI; NAVATHE, 2016).
Um relacionamento também pode ter atributos chamados atributos descritivos.
Considere um relacionamento com conjuntos de entidades professor e aluno.
Poderíamos associar a data do atributo a essa relação para especi�car a data em que
o professor tornou-se o orientador de um aluno. A Figura 3 mostra o orientador do
conjunto de relacionamentos com uma data de atributo descritiva.
Figura 2 - O relacionamento entre o conjunto de professores de uma universidade e o
conjunto de alunos 
Fonte: Adaptada de Silberschatz et al. (2019).
11
Note que João orienta dois alunos (Pedro e Paulo) com duas datas diferentes de
início. Uma instância de relacionamento em um determinado conjunto de
relacionamento deveser identi�cada de suas entidades participantes, sem utilizar os
atributos descritivos. Para entender esse ponto, suponha que queremos modelar
todas as datas em que um professor se tornou um orientador de um determinado
aluno. A data do atributo de valor único pode armazenar apenas uma data. Não
podemos representar várias datas por múltiplas relações entre o mesmo professor e
um aluno, uma vez que o relacionamento não seria exclusivamente identi�cável
usando apenas as entidades participantes. A maneira correta de lidar com esse caso é
criar uma data de atributo de vários valores, que pode armazenar todas as datas. É
possível ter mais de um conjunto de relacionamentos envolvendo o mesmo conjunto
de entidades. Além disso, suponha que cada aluno deve ter outro professor que atua
como orientador de departamento (Graduação ou Pós-Graduação). Então, os
conjuntos de entidades de professor e aluno podem participar de outro conjunto de
relacionamento, conselheiro de departamento.
Figura 3 - O relacionamento entre o conjunto de professores de uma universidade e o
conjunto de alunos com a data de orientação 
Fonte: Adaptada de Silberschatz et al. (2019).
12
Atributos
Para cada atributo, há um conjunto de valores permitidos, chamado domínio ou valor
conjunto, desse atributo. O domínio do ID do curso pode ser os valores entre 0 e 100.
Da mesma forma, o domínio do atributo semestre pode ser {outono, inverno,
primavera, verão}. Formalmente, um atributo de um conjunto de entidades é uma
função que mapeia a entidade de�nida em um domínio. Como um conjunto de
entidades pode ter vários atributos, cada entidade pode ser descrita por um conjunto
de pares (atributo, valor de dados), um par para cada atributo do conjunto de
entidades. Por exemplo, uma entidade professor pode ser descrita pelo conjunto {(ID,
1), (nome, João), (nome do departamento, Computação), (salário, 5000)}, signi�cando
que a entidade descreve uma pessoa chamada João cujo ID de professor é 1, que é
um membro do departamento de Computação com salário de R$ 5.000. Nós
podemos ver uma integração do esquema abstrato com o real sendo modelado. Os
valores de atributos que descrevem uma entidade constituem uma porção
ATENÇÃO
No modelo E-R, o R refere-se ao relacionamento. Isso é muito importante para
de�nir como um modelo de banco de dados deve trabalhar para alcançar os
objetivos propostos.
Fonte: Faria (2018).
13
signi�cativa dos dados armazenados no banco de dados. Um atributo, como usado no
modelo E-R, pode ser caracterizado pelos seguintes tipos de atributos (ELMASRI;
NAVATHE, 2016):
atributos simples e compostos. Em nossos exemplos até agora, os atributos
foram simples; isto é, eles não foram divididos em subpartes. Atributos
compostos, por outro lado, podem ser divididos em subpartes (isto é, outros
atributos). Por exemplo, um nome de atributo pode ser estruturado como um
atributo composto que consiste em primeiro nome e sobrenome. Atributos
compostos nos ajudam a agrupar atributos relacionados, tornando a
modelagem mais limpa. Note também que um atributo composto pode aparecer
como uma hierarquia. Na entidade Endereço, o atributo composto Rua pode ser
dividido no número da rua, nome da rua e número do apartamento (VANIER et
al., 2019). A Figura 4 mostra esses exemplos de atributos compostos para o
conjunto de entidades professor;
atributos de valor único e valor múltiplo. Os atributos em nossos exemplos têm
um valor único para uma entidade particular. Por exemplo, o atributo de ID do
aluno para uma entidade estudantil especí�ca, refere-se a apenas um ID de
estudante. Tais atributos são ditos de valor único. Pode haver casos em que um
atributo tem um conjunto de valores para uma entidade especí�ca. Suponha
que adicionemos à entidade professor um atributo de número de telefone. Um
professor pode ter zero, um ou vários telefones, e professores diferentes
podem ter diferentes números de telefones. Esse tipo de atributo é considerado
de valor múltiplo. Como outro exemplo, nós poderíamos adicionar à entidade
professor um atributo nome do dependente listando todos os dependentes.
Este atributo seria multivalorado, uma vez que qualquer professor pode ter
zero, um ou mais dependentes. Para denotar que um atributo é de valor
múltiplo, o colocamos entre chaves, por exemplo {número de telefone} ou {nome
dependente}. Quando apropriado, os limites superior e inferior podem ser
colocados no número de valores em um atributo multivalorado. Por exemplo,
uma universidade pode limitar os números de telefones gravados para um único
professor para dois. Colocação limites, neste caso, expressa que o atributo de
número de telefone do professor conjunto de entidades pode ter entre zero e
dois valores (VANIER et al., 2019);
atributo derivado. O valor para este tipo de atributo pode ser derivado dos
14
valores de outros atributos ou entidades relacionadas. Por exemplo, digamos
que o conjunto de entidades professor tem um atributo que os alunos
recomendaram, que representa como muitos alunos que um professor orienta.
Podemos derivar o valor para este atributo contando o número de entidades
estudantis associadas a esse professor. Como outro exemplo, suponha que o
conjunto de entidades professor tenha um atributo idade que indica a idade do
professor. Se o conjunto de entidades professor também tiver atributo data de
nascimento, podemos calcular a idade a partir da data de nascimento. Assim, a
idade é um atributo derivado. Neste caso, a data de nascimento pode ser
referida como um atributo base ou um atributo armazenado. O valor de um
atributo derivado é não armazenado, mas é calculado quando necessário.
Um atributo recebe um valor nulo quando uma entidade não possui um valor para
ele. O valor nulo pode indicar "não aplicável" - isto é, que o valor não existe para a
entidade. Por exemplo, um professor pode não ter nome do meio. Nulo também pode
designar que um valor de atributo é desconhecido (HOFFER et al., 2019). Um valor
desconhecido pode ser ausente (o valor existe, mas não temos essa informação) ou
não é conhecido (não sabemos se o valor realmente existe ou não). Por exemplo, se o
valor do nome de um professor for nulo, assumimos que o valor está faltando, já que
todo professor deve ter um nome. Um valor nulo para o atributo de número de
apartamento pode signi�car que o endereço não inclui um número de apartamento
(não aplicável), que existe um número de apartamento, mas nós não sei o que é (falta),
ou que não sabemos se é ou não o número do apartamento faz parte do endereço do
professor (desconhecido).
15
Restrições
Um esquema E-R pode de�nir certas restrições às quais o conteúdo de um banco de
dados deve estar em conformidade. Nesta seção, examinamos as restrições de
cardinalidades e restrições de participação.
Figura 4 - Exemplo de atributos compostos 
Fonte: Adaptada de Silberschatz et al. (2019).
16
Restrições de Cardinalidades
Mapeamento das cardinalidades expressam o número de entidades a qual outra
entidade pode ser associada mediante um conjunto de relacionamento. As
cardinalidades de mapeamento são mais úteis na descrição de conjuntos de
relacionamentos binários, embora possam contribuir para a descrição dos conjuntos
de relacionamento que envolvem mais de dois conjuntos de entidades (ELMASRI;
NAVATHE, 2016). Nesta seção, vamos nos concentrar apenas no conjunto de
relacionamento binário. Para um relacionamento binário R entre os conjuntos de
entidades A e B, o mapeamento cardinalidade deve ser um dos seguintes:
um a um. Uma entidade em A está associada com no máximo uma entidade em
B, e uma entidade em B está associada com no máximo uma entidade em A. (Ver
Figura 5a);
ATENÇÃO
Restrições devem ser consideradas em projetos de banco de dados para manter a
consistência dos dados ao longo do tempo.
Fonte: Salamon (s.d).
17
um para muitos. Uma entidade em A está associada a qualquer número (zero ou
mais) de entidades em B. Uma entidade em B, no entanto, pode ser associada
com no máximouma entidade em A. (Veja a Figura 5b);
muitos para um. Uma entidade em A está associada com no máximo uma
entidade em B. A entidade em B, no entanto, pode ser associada a qualquer
número (zero ou mais) de entidades em A. (Veja a Figura 5c);
muitos para muitos. Uma entidade em A está associada a qualquer número
(zero ou mais) de entidades em B, e uma entidade em B está associada a
qualquer número (zero ou mais) de entidades em A. (Veja a Figura 5d).
A cardinalidade de mapeamento apropriada para um conjunto de relacionamento
especí�co, obviamente depende da situação do mundo real em que o conjunto de
relacionamentos é modelado. Como exemplo, considere o conjunto de
relacionamentos do orientador. Se, em uma universidade, um estudante pode ser
aconselhado por apenas um professor, e um professor pode orientar vários alunos,
então o relacionamento de�nido de professor para aluno é um para muitos (HOFFER
et al., 2019). Se um aluno pode ser orientador por vários professores, o conjunto de
relacionamento é muitos para muitos.
Figura 5 - Exemplo de atributos compostos
Fonte: Adaptada de Silberschatz et al. (2019).
18
Restrições de participação
A participação de um conjunto de entidades E em um conjunto de relacionamento R é
considerada total se a entidade em E participa em pelo menos um relacionamento em
R. Se apenas algumas entidades em E participar de relacionamentos em R, a
participação do conjunto de entidades E no relacionamento R é dito parcial. Na
Figura 5a, a participação de B no conjunto de relacionamentos é total, enquanto a
participação de A no conjunto de relacionamentos é parcial. Na Figura 5b, a
participação de A e B no conjunto de relacionamentos é total. Por exemplo,
esperamos que cada entidade estudantil esteja relacionada a pelo menos um
professor por meio do relacionamento de orientação. Portanto, a participação do
estudante na orientação do conjunto de relacionamento é total. Em contraste, um
professor não precisa orientar estudantes. Portanto, é possível que apenas algumas
das entidades professor estejam relacionadas para a entidade estudante de�nida
mediante o relacionamento de orientação, e a participação do professor no conjunto
de relacionamento de orientação é, portanto, parcial.
Chaves
Devemos ter uma maneira de especi�car como as entidades dentro de um
determinado conjunto de entidades são distintas (HOFFER et al., 2019).
Conceitualmente, entidades individuais são distintas; de uma perspectiva de banco
de dados, no entanto, as diferenças entre eles devem ser expressas em termos de
atributos. Portanto, os valores dos atributos de uma entidade devem ser tais que eles
podem identi�car exclusivamente a entidade. A noção de uma chave para um
esquema E-R aplica-se diretamente para conjuntos de entidades. Ou seja, uma chave
para uma entidade é um conjunto de atributos que bastam para distinguir as
entidades umas das outras (ELMASRI; NAVATHE, 2016). Os conceitos de super
chave, chave candidata e chave primária são aplicáveis aos conjuntos de entidades.
As chaves também ajudam a identi�car relações de maneira única e, portanto,
distinguem relações entre si. A chave primária de um conjunto de entidades nos
permite distinguir entre as várias entidades do conjunto. Precisamos de um
mecanismo semelhante para distinguir entre os vários relacionamentos de um
conjunto de relacionamento.
19
As chaves em banco de dados desempenham um papel importante nos mais variados
cenários. Vamos estudar algumas delas com algum exemplo de como utilizá-las.
Chave. Uma ou mais colunas em uma tabela de banco de dados que é usada para
classi�car e/ou identi�car linhas em uma tabela. Por exemplo, se você estivesse
classi�cando as pessoas pelo salário de campo, então o campo de salário é a
chave.
Chave primária. Uma chave primária é um ou mais campos que identi�cam
exclusivamente uma linha em uma tabela. A chave primária não pode ser nula
(em branco) e a chave primária é indexada.
Chave estrangeira. Uma chave estrangeira é uma relação entre colunas em duas
tabelas de banco de dados (uma das quais é indexada) projetada para garantir a
consistência de dados. Por exemplo, cada registro em uma tabela CLIENTE
ATENÇÃO
O conceito de chave primária é muito importante para a modelagem de bancos
de dados. Sempre que possível, utilize uma chave natural no lugar de uma chave
arti�cial.
Fonte: Macário e Baldo (2005).
20
contém o ID do gerente de contas desse cliente. Na tabela GERENTE, o ID
normalmente seria a chave primária (indexada, exclusiva, não nula). O campo
GERENTE_FK na tabela CLIENTE é a chave estrangeira; somente valores para
GERENTE.ID serão permitidos no campo CLIENTE.GERENTE_FK.
Chave Primária Composta. Uma chave primária composta por uma ou mais
colunas, por exemplo, uma tabela chamada PESSOA contém os campos
PRIMEIRO_NOME e ULTIMO_NOME para o primeiro e último nomes,
respectivamente. A chave primária pode ser formada usando os campos
(embora não seja muito recomendável).
Chave natural. Uma chave primária composta que é composta por atributos
(campos) que já existem no mundo real. Por exemplo, o número do CPF no
Brasil.
Chave substituta. Uma chave primária que é gerada internamente  (geralmente
valor inteiro autoincremental) que não existe no mundo real, isto é, ID = 1 para
o Cliente A e ID = 2 para o Cliente B serve para identi�car exclusivamente o
registro, mas não tem o próprio cliente e é um atributo que eles nunca precisam
saber.
Chave candidata. Uma chave candidata é uma coluna ou um grupo de colunas
que podem identi�car exclusivamente uma linha na tabela sem se referir a
nenhuma outra fonte. Em uma tabela com várias chaves candidatas, uma é
selecionada para ser a chave primária, por exemplo, você pode ter uma tabela
EMPREGADO com uma chave candidata usando NOME e outra usando
DATA_NASCIMENTO.
Chave composta. Uma chave composta consiste em dois ou mais campos que
descrevem exclusivamente uma linha em uma tabela. A diferença entre
composto e candidato é que todos os campos da chave composta são chaves
estrangeiras; na chave candidata, um ou mais dos campos podem ser chaves
estrangeiras (mas não é obrigatório). Você pode ter uma tabela EMPREGADO
com uma chave candidata usando NUMERO_PASSAPORTE e outra usando CPF.
Na exclusão, ambos podem identi�car uma linha de maneira exclusiva. Qualquer
um pode ser usado como uma chave primária (mas não ambos, já que uma
tabela pode ter apenas uma chave primária).
21
QUESTÃO OBJETIVA
Projetos de bancos de dados podem ser desa�adores. Ao
projetar um esquema de banco de dados, devemos evitar
duas grandes armadilhas. Neste caso, qual seria uma delas?
Redundância.
Retrabalho.
Refactor.
Reindexação.
Redimensionamento.
22
QUESTÃO OBJETIVA
Atributos que podem ser divididos em subpartes (isto é,
outros atributos), por exemplo, um nome que consiste em
primeiro nome e sobrenome pode ser chamado de:
atributo simples.
atributo incorreto.
atributo valorado.
atributo composto.
atributo externo.
23
Fechamento
O maior benefício de um bom modelo de banco de dados para um projeto é manter a
consistência dos dados ao longo do tempo. Como vimos, isso pode ser feito via o
modelo E-R.
Nesta aula, você teve a oportunidade de:
ter uma visão geral do processo de design;
entender o modelo de relacionamento entre entidades;
aprender sobre restrições em bancos de dados.
24
Linguagens de De�nição de Dados
Quando temos a necessidade de projetar um banco de dados, alguns fundamentos
precisam ser conhecidos. Primeiramente, devemos entender qual a técnica de
modelagem a ser utilizada. Segundo, precisamos entender os tipos de dados que
podem ser mapeados do mundo real para o modelo. E, por �m, entender a qual
linguagem de de�nição de dados pode ser aplicada.
Ao �nal desta aula, você será capaz de:
entender a modelagem de dados utilizando o modelo entidade-relacionamento
(E-R);
aprender os tipos de entidade, conjuntos de entidades, atributos e chaves;
aprender sobre os tipos de relacionamento, conjuntosde relacionamento,
funções e restrições estruturais;
entender sobre a Data De�nition Language.
Aula 02
Introdução
25
Modelagem de Dados Utilizando o
Modelo Entidade-Relacionamento (E-
R)
A modelagem conceitual é uma fase muito importante na criação de um aplicativo de
banco de dados bem-sucedido. Geralmente, o termo aplicativo de banco de dados se
refere a um banco de dados especí�co e programas associados que implementam as
consultas e atualizações do banco de dados. Por exemplo, um aplicativo de banco de
dados UNIVERSIDADE que gerencia os professores e alunos para orientações de
programas de mestrados pode ser modelado via E-R. Esses programas fornecem
interfaces grá�cas de usuário fáceis de usar, utilizando formulários e menus.
Portanto, uma parte importante do aplicativo de banco de dados exigirá o design, a
implementação e o teste desses programas de aplicativos. Tradicionalmente, o design
e o teste de programas aplicativos foram considerados como parte da engenharia de
software, e não do design do banco de dados. Em muitas ferramentas de design de
software, as metodologias de design de banco de dados e as metodologias de
engenharia de software estão interligadas, uma vez que essas atividades estão
fortemente relacionadas.
26
Neste estudo, seguimos a abordagem tradicional de concentração nas estruturas e
restrições durante o design conceitual do banco de dados. O design de programas de
aplicação é tipicamente coberto em cursos de engenharia de software. Apresentamos
os conceitos de modelagem do modelo Entidade-Relacionamento (ER), que é um
popular modelo de dados conceitual de alto nível. Esse modelo e suas variações são
frequentemente usados para o design conceitual de aplicativos de banco de dados, e
muitas ferramentas de design empregam seus conceitos. Descreveremos os conceitos
básicos de estruturação de dados e restrições do modelo de ER e discutiremos seu
uso no projeto de esquemas conceituais para aplicações de banco de dados. Também
apresentaremos a notação diagramática associada ao modelo ER, conhecida como
diagrama ER.
Processo de design de banco de dados
SAIBA MAIS
O desenvolvimento de software tem uma intersecção com os projetos de bancos
de dados. O banco de dados acomoda as estruturas de dados enquanto o
software fornece as funcionalidades.
Saiba mais, acessando: http://bit.ly/2XKtML8.
27
http://bit.ly/2XKtML8
A Figura 1 mostra uma visão geral e simpli�cada do processo de design do banco de
dados. A primeira etapa mostrada é a de�nição e análise de requisitos. Durante essa
etapa, os projetistas de bancos de dados entrevistam usuários em potencial para
entender e modelar seus requisitos de dados. O resultado dessa etapa é um conjunto
de requisitos de usuários redigidos de forma concisa. Esses requisitos devem ser
especi�cados da maneira mais detalhada e completa possível. Paralelamente à
especi�cação dos requisitos de dados, é útil especi�car os requisitos funcionais
conhecidos da aplicação. Eles consistem em operações de�nidas pelo usuário (ou
transações) que serão aplicadas ao banco de dados, incluindo recuperações e
atualizações. No design de software, é comum usar diagramas de �uxo de dados,
diagramas de sequência, cenários e outras técnicas para especi�car requisitos
funcionais. Não vamos discutir nenhuma dessas técnicas aqui; eles são geralmente
descritos em detalhes em textos de engenharia de software.
Depois que os requisitos foram de�nidos e analisados, a próxima etapa é criar um
esquema conceitual para o banco de dados, usando um modelo de dados conceitual
de alto nível. Essa etapa é chamada de design conceitual. O esquema conceitual é uma
descrição concisa dos requisitos de dados dos usuários e inclui descrições detalhadas
dos tipos de entidade, relacionamentos e restrições; estes são expressos usando os
Figura 1 - Projeto de banco de dados e de aplicativo de banco de dados
Fonte: Adaptada de Silberschatz et al. (2019).
28
conceitos fornecidos pelo modelo de dados de alto nível. Como esses conceitos não
incluem detalhes de implementação, eles geralmente são mais fáceis de entender e
podem ser usados para se comunicar com usuários não técnicos. O esquema
conceitual de alto nível também pode ser usado como referência para garantir que os
requisitos de dados de todos os usuários sejam atendidos e que os requisitos não
entrem em con�ito. Essa abordagem permite que os designers de banco de dados se
concentrem na especi�cação das propriedades dos dados, sem se preocupar com
detalhes de armazenamento e implementação. Isso facilita a criação de um bom
design de banco de dados conceitual.
Durante ou após o design do esquema conceitual, as operações básicas do modelo de
dados podem ser usadas para especi�car as consultas e operações de alto nível do
usuário identi�cadas durante a análise funcional. Isso também serve para con�rmar
que o esquema conceitual atende a todos os requisitos funcionais identi�cados.
Modi�cações no esquema conceitual podem ser introduzidas se alguns requisitos
funcionais não puderem ser especi�cados usando o esquema inicial.
SAIBA MAIS
Um bom modelo de dados deve representar bem o minimundo. Além disso, deve
ter os tipos de dados precisos (como inteiros, datas, monetários etc.). Isso
melhora muito o projeto de modelo de banco de dados.
29
O próximo passo no design do banco de dados é a implementação real do banco de
dados, usando um SGBD comercial. A maioria dos SGBDs comerciais atuais usa um
modelo de dados de implementação - como o modelo de banco de dados relacional
ou objeto-relacional - para que o esquema conceitual seja transformado do modelo
de dados de alto nível para o modelo de dados de implementação. Essa etapa é
chamada de design lógico ou mapeamento de modelo de dados. Seu resultado é um
esquema de banco de dados no modelo de dados de implementação do SGBD. O
mapeamento de modelo de dados é geralmente automatizado ou semiautomatizado
nas ferramentas de design do banco de dados.
A última etapa é a fase de design físico, durante a qual as estruturas de
armazenamento interno, organizações de arquivos, índices, caminhos de acesso e
parâmetros de design físico para os arquivos de banco de dados são especi�cados.
Paralelamente a essas atividades, os programas aplicativos são projetados e
implementados como transações de bancos de dados correspondentes às
especi�cações de transações de alto nível.
Usando Modelos de Dados Conceituais de Alto Nível
para Design de Banco de Dados
Nesta seção, descreveremos um aplicativo de banco de dados de amostra,
denominado UNIVERSIDADE, que serve para ilustrar os conceitos básicos do modelo
ER e seu uso no design do esquema. Listamos os requisitos de dados para o banco de
dados aqui e, em seguida, criamos seu esquema conceitual passo a passo à medida
que introduzimos os conceitos de modelagem do modelo ER. O banco de dados da
UNIVERSIDADE gerenciar os professores, departamentos e alunos de uma
universidade. Suponha que após a fase de de�nição e análise de requisitos, os
projetistas do banco de dados forneçam a seguinte descrição do minimundo - a parte
da universidade que será representada no banco de dados.
A universidade é organizada em departamentos. Cada departamento tem um
nome exclusivo, um número exclusivo e um professor especí�co que gerencia o
departamento. Acompanhamos a data de início em que o professor começou a
gerenciar o departamento.
Um departamento pode ter vários locais.
Um departamento pode gerenciar vários professores, cada um com um nome
exclusivo e um número exclusivo.
30
A universidade tem o gerenciamento dos alunos com um número de matrícula
exclusivo e com o e-mail também exclusivo.
Cada aluno é orientado por um único professor e cada professor pode orientar
muitos alunos.
A orientação é acompanhada da data de início e, quando �nalizada, pela data de
encerramento.
A Figura 2 mostra como o esquema para esse aplicativo de banco de dados pode ser
exibido por meio da notação grá�ca conhecida como diagrama ER. Este valor será
explicado gradualmenteà medida que os conceitos do modelo ER forem
apresentados. Descrevemos o processo passo a passo de derivar este esquema dos
requisitos declarados - e explicar a notação diagramática do ER - à medida que
introduzimos os conceitos do modelo ER.
Figura 2 - Modelo de entidade-relacionamento do aplicativo
Fonte: Elaborada pelo autor.
31
Tipos de Entidade, Conjuntos de
Entidades, Atributos e Chaves
O modelo ER descreve os dados como entidades, relacionamentos e atributos. Na
Seção 2.1, introduziremos os conceitos de entidades e seus atributos. Discutiremos
os tipos de entidade e atributos-chave na Seção 2.2.
Entidades e Atributos
O objeto básico que o modelo ER representa é uma entidade, que é uma coisa no
mundo real com uma existência independente. Uma entidade pode ser um objeto
com uma existência física (por exemplo, uma determinada pessoa, carro, casa ou
professor) ou pode ser um objeto com uma existência conceitual (por exemplo, uma
universidade, um emprego ou um curso universitário). Cada entidade possui
atributos - as propriedades particulares que descrevem. Por exemplo, uma entidade
PROFESSOR pode ser descrita pelo nome, idade, endereço, salário e departamento.
Uma entidade particular, ou registro, terá um valor para cada um dos seus atributos.
Os valores de atributos que descrevem cada entidade tornam-se uma parte
importante dos dados armazenados no banco de dados.
32
Vários tipos de atributos ocorrem no modelo ER: simples versus composto, valor
único versus valor múltiplo e armazenado versus derivado. Os atributos compostos
podem ser divididos em subpartes menores, que representam atributos mais básicos
com signi�cados independentes. Atributos compostos são úteis para modelar
situações em que um usuário às vezes se refere ao atributo composto como uma
unidade, mas em outros momentos se refere especi�camente a seus componentes.
Se o atributo composto é referenciado apenas como um todo, não é preciso
subdividi-lo em atributos de componente. Por exemplo, se não houver necessidade
de se referir aos componentes individuais de um endereço (CEP, rua e assim por
diante), o endereço completo poderá ser designado como um atributo simples. Na
entidade ENDERECO optamos por um atributo composto para representar a rua
(NOME_RUA e NUMERO_RUA).
Adicionalmente, temos os atributos de valor único versus multivalorado. A maioria
dos atributos possui um valor único para uma entidade especí�ca; esses atributos são
chamados de valor único. Por exemplo, UF é um atributo de valor único de um
SAIBA MAIS
Sempre que possível evite atributos com valores nulos. Quando existir essa
necessidade, tente aplicar uma das formas normais. Valores nulos em banco de
dados trazem muitos problemas como tuplas espúrias e eventuais consultas com
agregações.
33
ENDERECO. Em alguns casos, um atributo pode ter um conjunto de valores para a
mesma entidade - por exemplo, um atributo Cores para um carro ou um atributo
Títulos para uma pessoa. Tais atributos são chamados de valores múltiplos. Um
atributo multivalorado pode ter limites inferiores e superiores para restringir o
número de valores permitidos para cada entidade individual. Por exemplo, o atributo
Cores de um carro pode ser restrito a ter entre um e três valores, se assumirmos que
um carro pode ter três cores no máximo. Em nosso modelo, os atributos são de
valores únicos.
Temos também os atributos armazenados versus derivados. Em alguns casos, dois (ou
mais) valores de atributos estão relacionados - por exemplo, os atributos IDADE e
DATA_NASCIMENTO de uma pessoa. Para uma entidade de pessoa especí�ca, o
valor de Idade pode ser determinado a partir da data atual (de hoje) e do valor da
data de nascimento dessa pessoa. O atributo IDADE é, portanto, chamado de um
atributo derivado e é dito derivável do atributo DATA_NASCIMENTO, que é
chamado de atributo armazenado. Alguns valores de atributos podem ser derivados
de entidades relacionadas; por exemplo, um atributo QUANTIDADE_PROFESSORES
ATENÇÃO
Grande parte dos atributos em bancos de dados são multivalorados. De�nir
limites superiores e inferiores para eles, via restrições, são uma boa prática.
34
de uma entidade DEPARTAMENTO pode ser derivado contando o número de
professores relacionados a (trabalhando para) este departamento.
Em alguns casos, uma entidade especí�ca pode não ter um valor aplicável para um
atributo. Por exemplo, o atributo DATA_ENCERRAMENTO de uma orientação se
aplica somente a orientações que estão concluídas. Para tais situações, um valor
especial chamado NULL é criado. O primeiro signi�cado do tipo NULL pode ser “não
é aplicável”, enquanto o segundo pode ser “desconhecido”. A categoria desconhecida
de NULL pode ser classi�cada em dois casos. O primeiro caso surge quando se sabe
que o valor do atributo existe, mas está ausente. O segundo caso surge quando não
se sabe se o valor do atributo existe.
Por �m, temos os atributos complexos. Observe que, em geral, os atributos
compostos e multivalorados podem ser aninhados arbitrariamente. Podemos
representar o aninhamento arbitrário agrupando componentes de um atributo
composto entre parênteses () e separando os componentes com vírgulas e exibindo
atributos de valores múltiplos entre chaves {}. Tais atributos são chamados de
atributos complexos. Por exemplo, se um professor tem mais de um endereço e cada
endereço tem vários telefones, um atributo ENDERECO_TELEFONE para uma
pessoa pode ser especi�cado como atributo complexo. Em nosso modelo não
utilizamos esse tipo de atributo.
Tipos de Entidades, Conjuntos de Entidades, Chaves
e Conjuntos de Valores
Um banco de dados geralmente contém grupos de entidades semelhantes. Por
exemplo, uma universidade que emprega centenas de professores pode querer
armazenar informações semelhantes sobre cada um deles. Essas entidades de
professores compartilham os mesmos atributos, mas cada entidade possui seus
próprios valores para cada atributo. Um tipo de entidade de�ne uma coleção (ou
conjunto) de entidades que possuem os mesmos atributos. Cada tipo de entidade no
banco de dados é descrito pelos seus nomes e atributos. A Figura 3 mostra dois tipos
de entidades: PROFESSOR e ALUNO, e uma lista de alguns dos atributos de cada um.
Algumas entidades individuais de cada tipo também são ilustradas, juntamente com
os valores de seus atributos. A coleção de todas as entidades de um determinado tipo
de entidade na base de dados em qualquer momento é chamada de conjunto de
entidades; o conjunto de entidades é geralmente referido usando o mesmo nome que
o tipo de entidade. Por exemplo, PROFESSOR refere-se a um tipo de entidade, bem
como ao conjunto atual de todas as entidades do professor no banco de dados.
35
Uma restrição importante nas entidades de um tipo de entidade é a restrição de
chave ou exclusividade nos atributos. Um tipo de entidade geralmente possui um ou
mais atributos cujos valores são distintos para cada entidade individual no conjunto
de entidades. Esse atributo é chamado de atributo-chave e seus valores podem ser
usados para identi�car cada entidade de maneira exclusiva. Às vezes, vários atributos
juntos formam uma chave, o que signi�ca que a combinação dos valores dos atributos
deve ser distinta para cada entidade. Se um conjunto de atributos possui essa
propriedade, a maneira correta de representá-lo no modelo E-R que descrevemos
aqui é de�nir um atributo composto e designá-lo como um atributo-chave do tipo de
entidade. Observe que essa chave composta deve ser mínima; ou seja, todos os
atributos do componente devem ser incluídos no atributo composto para ter a
propriedade unicidade. Atributos supér�uos não devem ser incluídos em uma chave.
Especi�car que um atributo como chave de um tipo de entidade signi�ca que a
propriedade de exclusividade anterior deve ser mantida para cada conjunto de
entidades do tipo de entidade. Portanto, é uma restrição que proíbe que duas
entidades tenham o mesmo valor para o atributo-chave ao mesmo tempo. Não é a
propriedade de um determinado conjunto de entidades;em vez disso, é uma
restrição em qualquer conjunto de entidades do tipo de entidade em qualquer
momento. Esta restrição chave (e outras restrições que discutiremos mais adiante) é
derivada das restrições do minimundo que o banco de dados representa.
Figura 3 - Atributos das entidades PROFESSOR e ALUNO
Fonte: Elaborada pelo autor.
36
Cada atributo simples de um tipo de entidade é associado a um conjunto de valores
(ou domínio de valores), que especi�ca o conjunto de valores que podem ser
atribuídos a esse atributo para cada entidade individual. Por exemplo, se a faixa de
idades permitidas para os alunos estiver entre 18 e 70, podemos especi�car o
conjunto de valores do atributo DATA_NASCIMENTO de ALUNO para ser o conjunto
de números inteiros resultantes entre 18 e 70. Da mesma forma, podemos
especi�car o conjunto de valores para o atributo NOME ser o conjunto de caracteres
alfabéticos separados por caracteres em branco e assim por diante. Conjuntos de
valores não são exibidos em diagramas E-R e são normalmente especi�cados usando
os tipos de dados básicos disponíveis na maioria das linguagens de programação,
como integer, string, boolean, �oat, tipo enumerado e assim por diante. Tipos de dados
adicionais para representar tipos comuns de banco de dados, como data, hora e
outros conceitos, também são empregados.
SAIBA MAIS
A utilização de restrições em atributos de bancos de dados é uma boa maneira de
manter a consistência do banco de dados.
Saiba mais, acessando: http://bit.ly/30DBAjN.
37
http://bit.ly/30DBAjN
Tipos de Relacionamento, Conjuntos
de Relacionamento, Funções e
Restrições Estruturais
Na Figura 2, existem vários relacionamentos implícitos entre os tipos de entidade. De
fato, sempre que um atributo de um tipo de entidade se refere a outro tipo de
entidade, existe algum relacionamento. Por exemplo, o atributo CURSO_FK de
ALUNO refere-se a um curso que o aluno participa; o atributo DEPARTAMENTO_FK
do PROFESSOR se refere ao departamento que gerencia o professor; e assim por
diante. No modelo E-R, essas referências não devem ser representadas como
atributos, mas como relações, que são discutidas nesta seção. No design inicial dos
tipos de entidade, os relacionamentos são tipicamente capturados na forma de
atributos. À medida que o design é re�nado, esses atributos são convertidos em
relacionamentos entre tipos de entidade.
38
Tipos de Relacionamento, Conjuntos e Instâncias
Um tipo de relacionamento R entre n tipos de entidades E1, E2, ..., En de�ne um
conjunto de associações (ou um conjunto de relacionamentos) entre entidades
desses tipos de entidade. Quanto ao caso de tipos de entidade e conjuntos de
entidades, um tipo de relacionamento e seu conjunto de relacionamentos
correspondente são costumeiramente referenciados pelo mesmo nome, R.
Informalmente, cada instância de relacionamento ri em R é uma associação de
entidades, onde a associação inclui exatamente uma entidade de cada tipo de
entidade participante. Cada instância de relacionamento ri representa o fato de que
as entidades participantes de ri estão relacionadas de alguma forma na situação do
minimundo correspondente. Por exemplo, considere um tipo de relacionamento
TRABALHA_PARA entre os dois tipos de entidade PROFESSOR e DEPARTAMENTO,
que associa cada professor ao departamento para o qual trabalha. Cada instância de
SAIBA MAIS
Um relacionamento de tabela é representado por uma linha de relacionamento
desenhada entre as tabelas na janela Relacionamentos. Um relacionamento que
não aplica a integridade referencial aparece como uma linha �na entre os campos
comuns que suportam o relacionamento.
Saiba mais, acessando: http://bit.ly/2SaGNfP.
39
http://bit.ly/2SaGNfP
relacionamento no conjunto de relacionamento TRABALHA_PARA associa uma
entidade PROFESSOR e uma entidade DEPARTAMENTO. A Figura 4 ilustra este
exemplo, onde cada instância de relacionamento ri é mostrada conectada às
entidades PROFESSOR e DEPARTAMENTO que participam de ri. No minimundo
representado pela Figura 4, os professores p1, p3 e p6 trabalham para o
departamento d1; professores p2 e p4 trabalham para o departamento d2; e os
professores p5 e p7 trabalham para o departamento d3.
4. Data De�nition Language
A seguir, podemos ver o script DDL gerado pelo nosso modelo. Esse script contém
alguns elementos especí�cos do banco de dados utilizados no estudo chamado
MySQL. Vamos ver o script linha a linha e entender o que está sendo feito em cada
situação.
DROP DATABASE UNIVERSIDADE;
Figura 4 - Exemplo de relacionamentos 
Fonte: Adaptada de Silberschatz et al. (2019).
40
CREATE DATABASE UNIVERSIDADE;
USE UNIVERSIDADE;
CREATE TABLE ENDERECO (
       ID INT NOT NULL PRIMARY KEY,
   NOME_RUA VARCHAR(50) NOT NULL,
   NUMERO_RUA VARCHAR(10) NOT NULL,
   CEP VARCHAR(8) NOT NULL,
   BAIRRO VARCHAR(50) NOT NULL,
   CIDADE VARCHAR(50) NOT NULL,
   UF CHAR(2) NOT NULL
) ENGINE=INNODB;
CREATE TABLE DEPARTAMENTO (
ID INT NOT NULL PRIMARY KEY,
   NOME VARCHAR(50) NOT NULL
) ENGINE=INNODB;
CREATE TABLE PROFESSOR (
ID INT NOT NULL PRIMARY KEY,
   NOME VARCHAR(50) NOT NULL,
   DEPARTAMENTO_FK INT NOT NULL,
ENDERECO_FK INT NOT NULL,
   FOREIGN KEY (DEPARTAMENTO_FK)
       REFERENCES DEPARTAMENTO(ID)
41
       ON DELETE CASCADE,
   FOREIGN KEY (ENDERECO_FK)
       REFERENCES ENDERECO(ID)
       ON DELETE CASCADE
) ENGINE=INNODB;
CREATE TABLE CURSO (
ID INT NOT NULL PRIMARY KEY,
   NOME VARCHAR(50) NOT NULL
) ENGINE=INNODB;
CREATE TABLE ALUNO (
ID INT NOT NULL PRIMARY KEY,
   NOME VARCHAR(50) NOT NULL,
   DATA_NASCIMENTO DATE NOT NULL,
   CURSO_FK INT,
   FOREIGN KEY (CURSO_FK)
       REFERENCES CURSO(ID)
       ON DELETE CASCADE
) ENGINE=INNODB;
CREATE TABLE ORIENTACAO (
PROFESSOR_FK INT,
ALUNO_FK INT,
   DATA_INICIO DATE,
42
   DATA_ENCERRAMENTO DATE,
   FOREIGN KEY (PROFESSOR_FK)
       REFERENCES PROFESSOR(ID)
       ON DELETE CASCADE,
   FOREIGN KEY (ALUNO_FK)
       REFERENCES ALUNO(ID)
       ON DELETE CASCADE
) ENGINE=INNODB;
A linguagem de consulta estruturada (SQL) é a linguagem de banco de dados que
podemos realizar determinadas operações no banco de dados existente e também
podemos usar essa linguagem para criar um banco de dados. O SQL usa certos
comandos como Criar, Descartar, Inserir etc., para executar as tarefas necessárias.
Esses comandos SQL são, principalmente, categorizados em quatro categorias,
conforme discutidas a seguir.
Figura 5 - Classi�cação dos comandos SQL
Fonte: Elaborada pelo autor.
43
A primeira categoria, chamada de DDL (Linguagem de De�nição de Dados) consiste
nos comandos SQL que podem ser usados para de�nir o esquema do banco de dados.
Ele simplesmente lida com descrições do esquema do banco de dados e é usado para
criar e modi�car a estrutura de objetos de banco de dados no banco de dados.
Exemplos de comandos DDL:
CREATE - é usado para criar o banco de dados ou seus objetos (como tabela,
índice, função, visualizações, procedimento de armazenamento e gatilhos).
DROP - é usado para excluir objetos do banco de dados.
ALTER - é usado para alterar a estrutura do banco de dados.
TRUNCATE - é usado para remover todos os registros de uma tabela, inclusive
todos os espaços alocados para os registros são removidos.
COMMENT - é usado para adicionar comentários ao dicionário de dados.
RENAME - é usado para renomear um objeto existente no banco de dados.
Os comandos DDL são muito úteis no início do projeto do banco, quando as
de�nições estão sendo feitas. Já na DML (Data Manipulation Language), os comandos
SQL que lidam com a manipulação de dados presentes no banco de dados pertencem
a DML ou Data Manipulation Language e isso inclui a maioria das instruções SQL.
Alguns exemplos de DML:
SELECT - é usado para recuperar dados do banco de dados.
INSERT - é usado para inserir dados em uma tabela.
UPDATE - é usado para atualizar os dados existentes em uma tabela.
DELETE - é usado para excluir registros de uma tabela de banco de dados.
Adicionalmente, a DCL (DataControl Language) inclui comandos como GRANT e
REVOKE, que lidam principalmente com os direitos, permissões e outros controles do
sistema de banco de dados. Alguns exemplos de comandos DCL:
GRANT - dá privilégios de acesso do usuário ao banco de dados.
REVOKE - retira os privilégios de acesso do usuário usando o comando GRANT.
44
A TCL (Transaction Control Language) lida com a transação dentro do banco de dados.
Alguns exemplos de comandos do TCL:
COMMIT - con�rma uma transação.
ROLLBACK - reverte uma transação no caso de ocorrer algum erro.
SAVEPOINT - de�ne um ponto de salvamento dentro de uma transação.
SET TRANSACTION - especi�ca características para a trans
SAIBA MAIS
A W3Schools apresenta uma classi�cação da SQL para o MySQL. Você pode
aprender mais no link a seguir.
Acesse: http://bit.ly/32lyrXi.
45
http://bit.ly/32lyrXi
QUESTÃO OBJETIVA
Uma fase muito importante na criação de um aplicativo de
banco de dados bem-sucedido é aquela que mapeia as
entidades do mundo real para um modelo. Esse modelo
tem o objetivo de relacionar as entidades uma com as
outras para entender como elas funcionam no mundo real.
Neste contexto, qual o nome dessa modelagem?
Modelagem conceitual.
Modelagem lógica.
Modelagem física.
Modelagem estrutural.
Modelagem comercial.
46
QUESTÃO OBJETIVA
Depois que os requisitos foram de�nidos e analisados, a
próxima etapa é criar um esquema para o banco de dados,
usando um modelo de dados de alto nível. Esse esquema é
uma descrição concisa dos requisitos de dados dos
usuários e inclui descrições detalhadas dos tipos de
entidade, relacionamentos e restrições. Qual o nome dessa
etapa?
Design alternativo.
Design arquitetural.
Design de modelo.
Design lógico.
Design conceitual.
47
Fechamento
O maior benefício ao se projetar um banco de dados é o entendimento de
fundamentos que possam ser aplicados em vários cenários. Primeiramente,
entendemos qual a técnica de modelagem a ser utilizada. Segundo, compreendemos
os tipos de dados que podem ser mapeados do mundo real para o modelo. E, por �m,
aprendemos a qual linguagem de de�nição de dados pode ser aplicada.
Nesta aula, você teve a oportunidade de:
aprender a modelagem de dados utilizando o modelo Entidade-Relacionamento
(E-R);
entender os tipos de entidade, conjuntos de entidades, atributos e chaves;
aprender sobre os tipos de relacionamento, conjuntos de relacionamento,
funções e restrições estruturais;
entender sobre a Data De�nition Language.
48
Linguagens de Manipulação e
Consulta de Dados
Recuperação de dados é uma parte fundamental de um bom projeto de banco de
dados. Dessa forma, utilizar boas técnicas de consulta pode ser um grande diferencial
no momento do projeto e da operação do banco de dados.
Ao �nal desta aula, você será capaz de:
entender a visão geral da linguagem SQL Query;
aprender sobre a estrutura básica de consultas SQL;
aprender sobre as consultas em uma única relação;
entender as consultas sobre Múltiplas Relações.
Aula 03
Introdução
49
Visão Geral da Linguagem SQL Query
Há um número de linguagens de consulta de banco de dados em uso, seja
comercialmente ou experimentalmente. Vamos estudar a linguagem de consulta
amplamente utilizada: Structured Query Language (SQL). Embora nos referimos à
linguagem SQL como uma “linguagem de consulta”, ela pode fazer muito mais do que
apenas consultar um banco de dados. Pode ser utilizada para de�nir a estrutura de
dados, modi�car dados no banco de dados e especi�car restrições de segurança. Não
é nossa intenção fornecer um guia completo para o SQL. Pelo contrário, nós vamos
apresentar construções e conceitos fundamentais da SQL. Implementações
individuais de SQL podem diferir em detalhes, ou podem suportar apenas um
subconjunto da linguagem completa (SILBERSCHATZ et al., 2019).
SAIBA MAIS
A linguagem de programação SQL foi desenvolvida pela primeira vez na década
de 1970 pelos pesquisadores da IBM Raymond Boyce e Donald Chamberlin. A
linguagem de programação, conhecida então como SEQUEL, foi criada após a
publicação do artigo de Edgar Frank Todd, "Um modelo relacional de dados para
grandes bancos de dados compartilhados", em 1970.
Saiba mais, acessando: http://bit.ly/2Jxu8kr.
50
http://bit.ly/2Jxu8kr
A IBM desenvolveu a versão original da SQL, originalmente chamada de Sequel,
como parte do Projeto System R no início dos anos 70. A linguagem Sequel evoluiu
desde então, e seu nome foi alterado para SQL (Structured Query Language). Muitos
produtos agora suportam a linguagem SQL. A SQL estabeleceu-se claramente como
padrão de linguagem de banco de dados relacional. Em 1986, o Instituto Nacional de
Padrões Americanos (ANSI) e a Organização Internacional de Normalização (ISO)
publicou um padrão SQL, chamado SQL-86. O ANSI publicou um padrão estendido
para SQL, SQL-89, em 1989. A próxima versão a partir da norma foi o padrão SQL-92,
seguido de SQL: 1999, SQL: 2003, SQL: 2006, e mais recentemente SQL: 2008. A
linguagem SQL possui várias partes (VANIER et al., 2019):
linguagem de de�nição de dados (DDL). A DDL fornece comandos para de�nir
esquemas de relação, excluindo relações e modi�cando esquemas de relação;
linguagem de manipulação de dados (DML). A DML fornece a capacidade de
consultar informações do banco de dados e inserir tuplas, excluir tuplas e
modi�car as tuplas no banco de dados;
integridade. A DDL inclui comandos para especi�car a integridade das
restrições que os dados armazenados no banco de dados devem satisfazer.
Atualizações que violam restrições de integridade não são permitidas;
controle de transações. A SQL inclui comandos para especi�car o início e �nal
de transações;
SQL incorporado e SQL dinâmico. SQL incorporado e dinâmico de�ne como as
instruções SQL podem ser incorporadas em linguagens de programação, como
C, C ++ e Java;
autorização. A DDL inclui comandos para especi�car direitos de acesso às
relações e pontos de vista.
Neste estudo, apresentamos uma pesquisa de DML básica e os recursos de DDL do
SQL. Os recursos descritos aqui fazem parte do padrão SQL desde o SQL-92.
Posteriormente, forneceremos uma cobertura mais detalhada da linguagem de
consulta SQL, incluindo (a) várias expressões de junção; (b) visões; (c) transações; d)
integridade das restrições; e) sistema de tipos; e (f) autorização. Embora a maioria
das implementações SQL suporte os recursos padrão, você deve estar ciente de que
existem diferenças entre a implementação. Por exemplo, um banco de dados como o
MySQL pode implementar de uma forma e o Oracle de outra (VANIER et al., 2019).
51
Linguagem de Manipulação de dados
A Linguagem de Manipulação de Dados (DML) é usada para recuperar, inserir e
modi�car informações do banco de dados. Esses comandos são usados por todos os
usuários do banco de dados durante a operação de rotina do banco de dados.
INSERT. O comando INSERT no SQL é usado para adicionar registros a uma
tabela existente. Por exemplo, imagine que nosso departamento de RH precisa
adicionar um novo professor ao banco de dados. Você poderia usar um
comando semelhante a este:
INSERT INTO PROFESSOR values('João','Silva',12345,5000);
Observe que há quatro valores especi�cados para o registro. Eles correspondem aos
atributos da tabela na ordem em que foram de�nidos.
SELECT. O comando SELECT é o comando mais usado no SQL. Ele permite que
os usuários do banco de dados recuperem as informações especí�cas que
desejam de um banco de dados operacional. Dê uma olhada em alguns
exemplos, novamente usando a tabela professor do banco de dados da
Figura 1 - Visão geral do SQL 
Fonte: Weerapat Wattanapichayakul / 123RF.
52
universidade. O comando mostrado, a seguir, recupera todas as informações
contidas na tabela PROFESSOR. Observe que o asterisco é usado como curinga
no SQL. Isso signi�ca literalmente "Selecione tudo na tabela professor".
SELECT * FROM PROFESSOR;
Como alternativa, os usuários podem querer limitar os atributos recuperados do
banco de dados. Por exemplo, o departamentode Recursos Humanos pode exigir
uma lista dos sobrenomes de todos os funcionários da empresa. O seguinte comando
SQL recuperaria apenas essa informação:
SELECT NOME FROM PROFESSOR;
A cláusula WHERE pode ser usada para limitar os registros recuperados àqueles que
atendem aos critérios especi�cados. O reitor pode estar interessado em revisar os
registros de pessoal de todos os professores altamente remunerados. O comando, a
seguir, recupera todos os dados contidos em PROFESSOR para registros que
possuem um valor de salário maior que $ 5.000:
SELECT * FROM PROFESSOR WHERE SALARIO > $5000;
53
UPDATE. O comando UPDATE pode ser usado para modi�car as informações
contidas em uma tabela, em massa ou individualmente. Suponha que a empresa
conceda a todos os funcionários um aumento de 3% no custo de vida do salário
anualmente. O seguinte comando SQL pode ser usado para aplicar isso
rapidamente a todos os funcionários armazenados no banco de dados:
UPDATE PROFESSOR SET SALARIO = SALARIO * 1.03;
Quando o novo funcionário, João Silva, demonstra um desempenho acima e além do
dever, a administração deseja reconhecer suas realizações estelares com um
aumento de $ 5.000. A cláusula WHERE poderia ser usada para destacar João para
este aumento:
UPDATE PROFESSOR SET SALARIO = SALARIO + 5000 WHERE ID = 12345;
SAIBA MAIS
O comando SELECT é um dos mais utilizados da SQL e dessa forma vale a pena
entender melhor o seu funcionamento. Existem várias cláusulas que podem ser
utilizadas neste comando.
Saiba mais, acessando: http://bit.ly/2JuoNu66.
54
http://bit.ly/2JuoNu6
DELETE. Finalmente, vamos dar uma olhada no comando DELETE. Você verá que
a sintaxe deste comando é semelhante a dos outros comandos DML.
Infelizmente, nosso último relatório de ganhos corporativos não atendeu às
expectativas e o João foi demitido. O comando DELETE com uma cláusula
WHERE pode ser usado para remover seu registro da tabela PROFESSOR:
DELETE FROM PROFESSOR WHERE ID = 12345;
Agora que você tem um contexto de como manipular os dados via DML, vamos
analisar esses comandos com mais detalhes a seguir.
SAIBA MAIS
O UPDATE possui algumas cláusulas que são comuns ao SELECT. Deve-se tomar
cuidado para não atualizar linhas que não sejam as desejadas.
Saiba mais, acessando: http://bit.ly/2YLvzRk.
55
http://bit.ly/2YLvzRk
De�nição de Dados SQL
O padrão SQL suporta uma variedade de tipos integrados. Esses tipos podem ser
utilizados para melhorar a modelagem do minimundo e, melhorando assim, a forma
como o banco de dados resolve o problema, incluindo:
char(n): uma cadeia de caracteres de comprimento �xo com comprimento
especi�cado pelo usuário n;
varchar(n): uma cadeia de caracteres de tamanho variável com o máximo
especi�cado pelo usuário comprimento n. A forma completa, com caráter
variável, é equivalente;
int: um inteiro (um subconjunto �nito dos inteiros que é dependente da
máquina). A forma completa, inteiro, é equivalente;
SAIBA MAIS
O DELETE possui algumas cláusulas que são comuns ao SELECT. Deve-se tomar
cuidado para não remover as linhas que não sejam as desejadas.
Saiba mais, acessando: http://bit.ly/2Si9g3q.
56
http://bit.ly/2Si9g3q
smallint: um inteiro pequeno (um subconjunto dependente da máquina do tipo
inteiro);
numeric(p, d): um número de ponto �xo com precisão especi�cada pelo usuário.
O número ber consiste em p dígitos (mais um sinal), e d dos p dígitos estão à
direita de o ponto decimal. Assim, numérico (3,1) permite que 44,5 sejam
armazenados exatamente, mas nem 444,5 ou 0,32 podem ser armazenados
exatamente em um campo desse tipo;
double: ponto �utuante e ponto �utuante de precisão dupla números com
precisão dependente da máquina;
�oat(n): um número de ponto �utuante, com precisão de pelo menos n dígitos.
SAIBA MAIS
Os tipos que podem ser utilizados para as colunas fazem com que os modelos de
dados possam ser melhor estruturados. Saiba quais são os tipos suportados pelo
banco que você está utilizando acessando: http://bit.ly/30u1uGj.
57
http://bit.ly/30u1uGj
Estrutura Básica de Consultas SQL
A estrutura básica de uma consulta SQL consiste em três cláusulas: select, from e
where. A consulta toma como entrada as relações listadas na cláusula from, opera
neles, conforme especi�cado nas cláusulas where e select, e produz uma relação como
resultado. Introduzimos a sintaxe SQL por meio de exemplos e descreveremos a
estrutura geral de consultas SQL mais tarde.
Consultas em uma Única Relação
Vamos considerar uma consulta simples usando nosso exemplo da universidade:
“Encontre os nomes de todos os professores”. Nomes de professores são
encontrados na relação professor, então colocamos essa relação na cláusula from. O
Figura 2 - Tipos de dados 
Fonte: Piotr Trojanowski / 123RF.
58
nome do professor aparece no nome atributo, então colocamos isso na cláusula
select.
SELECT `PROFESSOR`.`NOME`,
FROM `UNIVERSIDADE`.`PROFESSOR`;
O resultado é uma relação que consiste em um único atributo com o nome do
cabeçalho. E se a relação de professor é mostrada na Figura 1, então a relação que
resulta da consulta anterior é mostrada na Figura 2. Agora, considere outra consulta,
"encontre os nomes dos departamentos de todos os professores" que pode ser
escrito como:
SELECT
   `DEPARTAMENTO`.`NOME`
FROM `UNIVERSIDADE`.`PROFESSOR`
   INNER JOIN `UNIVERSIDADE`.`DEPARTAMENTO`
         ON `PROFESSOR`.`DEPARTAMENTO_FK` = `DEPARTAMENTO`.`ID`;
Como mais de um professor pode pertencer a um departamento, um nome de
departamento pode aparecer mais de uma vez na relação de professor. O resultado
da consulta é uma relação contendo os nomes dos departamentos, mostrada na
Figura 3. Na de�nição formal e matemática do modelo relacional, uma relação é um
conjunto. Assim, as tuplas duplicadas nunca apareceriam nas relações. Na prática,
duplicar a eliminação é demorada. Portanto, o SQL permite duplicatas em relações,
bem como nos resultados de expressões SQL. Assim, a lista resultante da consulta
SQL exibe o nome de cada departamento uma vez para cada tupla em que aparece o
nome do professor na relação (SILBERSCHATZ et al., 2019). Nos casos em que
queremos forçar a eliminação de duplicatas, inserimos a palavra-chave distinta
depois de selecionar. Podemos reescrever a consulta anterior como:
SELECT DISTINCT
       `DEPARTAMENTO`.`NOME`
FROM `UNIVERSIDADE`.`PROFESSOR`
   INNER JOIN `UNIVERSIDADE`.`DEPARTAMENTO`
59
         ON `PROFESSOR`.`DEPARTAMENTO_FK` = `DEPARTAMENTO`.`ID`;
Como a retenção duplicada é o padrão, não usaremos todos em nossos exemplos.
Para garantir a eliminação de duplicatas nos resultados de nossas consultas de
exemplo, devemos usar distinto sempre que necessário. A cláusula select também
pode conter expressões aritméticas envolvendo os operadores +, -, ∗ e / operando em
constantes ou atributos de tuplas. Por exemplo, a consulta:
SELECT
        `PROFESSOR`.`NOME`,
   `DEPARTAMENTO`.`NOME`,
       (`PROFESSOR`.`SALARIO_MENSAL`),
   (`PROFESSOR`.`SALARIO_MENSAL`)*1.1
FROM `UNIVERSIDADE`.`PROFESSOR`
   INNER JOIN `UNIVERSIDADE`.`DEPARTAMENTO`
        ON `PROFESSOR`.`DEPARTAMENTO_FK` = `DEPARTAMENTO`.`ID`;
Essa consulta retorna uma relação que é o mesmo que a relação de professor, exceto
o atributo salário que é multiplicado por 1.1. Isso mostra o que resultaria se
déssemos um aumento de 10% para cada professor; observe, entretanto, que isso
não resulta em nenhuma alteração na relação professor. A SQL também fornece tipos
de dados especiais, como várias formas do tipo de data, e permite que várias funções
aritméticas operem nesses tipos. A cláusula where nos permite selecionar apenas as
linhas na relação de resultados da cláusula from que satisfaz um predicado
especi�cado. Considere a consulta “encontre o nomes de todos os professores do
departamento de Ciência da Computação que têm salário maior que $ 70.000”. Esta
consulta pode ser escrita em SQL como:
SELECT
        `PROFESSOR`.`NOME`,
   `DEPARTAMENTO`.`NOME`,
        `PROFESSOR`.`SALARIO_MENSAL`
60
FROM`UNIVERSIDADE`.`PROFESSOR`
   INNER JOIN `UNIVERSIDADE`.`DEPARTAMENTO`
  ON `PROFESSOR`.`DEPARTAMENTO_FK` = `DEPARTAMENTO`.`ID`
WHERE `DEPARTAMENTO`.`NOME` = 'Computação'
   AND `PROFESSOR`.`SALARIO_MENSAL` > 7000;
Se a relação de professor é mostrada na Figura 1, então a relação que resulta da
consulta anterior é mostrada na Figura 4. O SQL permite o uso de conectivos lógicos
e/ou não no local onde há cláusula. Os operandos dos conectivos lógicos podem ser
expressões envolvendo os operadores de comparação <, <=,>,> =, = e <>. O SQL nos
permite usar os operadores de comparação para comparar strings e expressões
aritméticas, bem como tipos especiais, como tipos de data. Vamos explorar outras
características dos predicados da cláusula where mais adiante neste estudo.
Consultas sobre Múltiplas Relações
As consultas geralmente precisam acessar a informação de múltiplas relações. Um
exemplo: suponha que queremos responder à consulta “recuperar os nomes de todos
os professores, juntamente com seus nomes de departamento". Olhando para o
esquema da universidade, percebemos que podemos obter o nome do departamento
por meio da relação PROFESSOR. Para responder à consulta, cada tupla na relação
de professor deve ser correspondida com a tupla em relação ao departamento cujo
valor do nome do departamento corresponde ao valor do ID do departamento da
tupla de professor, chamada de DEPARTAMENTO_FK. No SQL, para responder à
consulta anterior, listamos as relações que precisam ser acessadas na cláusula from e
especi�cando a condição correspondente na cláusula where. A consulta anterior
pode ser escrita em SQL, como:
SELECT
        `PROFESSOR`.`NOME`,
   `DEPARTAMENTO`.`NOME`
FROM `UNIVERSIDADE`.`PROFESSOR`, `UNIVERSIDADE`.`DEPARTAMENTO`
WHERE `PROFESSOR`.`DEPARTAMENTO_FK` = `DEPARTAMENTO`.`ID`;
61
Restringindo tuplas com a cláusula Where
Uma cláusula WHERE ausente indica nenhuma condição na seleção da tupla;
portanto, todas as tuplas da relação especi�cada na cláusula FROM quali�cam e são
selecionadas para o resultado da consulta (SILBERSCHATZ et al., 2019). Se mais de
uma relação for especi�cada na cláusula FROM e não houver cláusula WHERE, o
produto cartesiano - todas as combinações de tupla possíveis - dessas relações serão
selecionadas. Por exemplo, a consulta a seguir seleciona todos os professores de
todos os departamentos associando cada professor a um departamento.
SELECT * FROM `UNIVERSIDADE`.`PROFESSOR`,
`UNIVERSIDADE`.`DEPARTAMENTO`
É extremamente importante especi�car todas as condições de seleção e associação
na cláusula WHERE; se qualquer dessas condições for negligenciada, podem resultar
relações incorretas e muito grandes. Se especi�carmos todos os atributos de
PROFESSOR e DEPARTAMENTO, obteremos o produto cartesiano real (exceto para
eliminação duplicada, se houver). Para recuperar todos os valores de atributos das
tuplas selecionadas, não precisamos listar os nomes de atributos explicitamente em
SQL; nós apenas especi�camos um asterisco (*), que signi�ca todos os atributos. Por
exemplo, a consulta anterior recupera todos os valores de atributo de qualquer
PROFESSOR que trabalhe em qualquer DEPARTAMENTO.
Tabelas como conjuntos no SQL
Como mencionamos anteriormente, o SQL geralmente trata uma tabela não como
um conjunto, mas como um multiconjunto; tuplas duplicadas podem aparecer mais
de uma vez em uma tabela e no resultado de uma consulta. O SQL não elimina
automaticamente as tuplas duplicadas nos resultados das consultas, pelos seguintes
motivos:
a eliminação duplicada é uma operação cara. Uma maneira de implementá-la é
classi�car as tuplas primeiro e depois eliminar as duplicatas;
o usuário pode querer ver tuplas duplicadas no resultado de uma consulta;
quando uma função agregada é aplicada a tuplas, na maioria dos casos, não
queremos eliminar duplicatas.
Uma tabela SQL com uma chave é restrita a ser um conjunto, uma vez que o valor da
chave deve ser distinto em cada tupla. Se quisermos eliminar as tuplas duplicadas do
resultado de uma consulta SQL, usamos a palavra-chave DISTINCT na cláusula
62
SELECT, signi�cando que apenas as tuplas distintas devem permanecer no resultado.
Em geral, uma consulta com SELECT DISTINCT elimina duplicatas, enquanto uma
consulta com SELECT ALL não. Especi�car SELECT sem ALL nem DISTINCT - como em
nossos exemplos anteriores - é equivalente a SELECT ALL. Por exemplo, na consulta
que recupera o salário de todos os funcionários, se vários funcionários tiverem o
mesmo salário, esse valor salarial aparecerá tantas vezes no resultado da consulta. Se
estivermos interessados apenas em valores salariais distintos, queremos que cada
valor apareça apenas uma vez, independentemente de quantos funcionários
recebem esse salário, usando a palavra-chave DISTINCT, conseguimos isso. O SQL
incorporou diretamente algumas das operações do conjunto da teoria dos conjuntos
matemáticos, que também fazem parte da álgebra relacional. Existem operações de
união (UNION), diferença de conjunto (EXCEPT) e interseção (INTERSECT). As
relações resultantes dessas operações de conjunto são conjuntos de tuplas; isto é, as
tuplas duplicadas são eliminadas do resultado. Essas operações de conjunto aplicam-
se apenas a relações compatíveis com o sindicato, portanto, devemos nos certi�car
de que as duas relações nas quais aplicamos a operação possuem os mesmos
atributos e que os atributos apareçam na mesma ordem em ambas as relações
(SILBERSCHATZ et al., 2019). O próximo exemplo ilustra o uso de UNION.
SELECT * FROM `UNIVERSIDADE`.`CURSO`
UNION ALL
SELECT * FROM `UNIVERSIDADE`.`DEPARTAMENTO`;
A primeira consulta SELECT recupera os cursos da universidade e o segundo recupera
os departamentos da mesma. Observe que apesar de serem entidades diferentes do
ponto de vista lógico, elas são idênticas do ponto de vista físico, ou sejam possuem as
mesmas colunas com a mesma tipagem. O SQL também possui operações multiset
correspondentes, que são seguidas pela palavra-chave ALL (UNION ALL, EXCEPT ALL,
INTERSECT ALL). Seus resultados são multisets (as duplicações não são eliminadas).
Basicamente, cada tupla - seja ela duplicada ou não - é considerada como uma tupla
diferente ao aplicar essas operações.
63
Correspondência de Padrões de Subconjunto e Operadores Aritméticos
Nesta seção, discutiremos vários outros recursos do SQL. O primeiro recurso
permite condições de comparação em apenas partes de uma cadeia de caracteres,
usando o operador de comparação LIKE. Isso pode ser usado para correspondência
de padrões de sequência de caracteres. Strings parciais são especi�cadas usando dois
caracteres reservados % que substitui um número arbitrário de zero ou mais
caracteres, e o sublinhado (_) substitui um único caractere. Por exemplo, considere a
seguinte consulta:
SELECT * FROM `UNIVERSIDADE`.`CURSO`
WHERE `CURSO`.`NOME` LIKE '%II%';
Ela recupera todos os cursos que tenham a sequência de caracteres “II” em qualquer
posição da coluna NOME. O operador LIKE pode ser aplicado no início, no �nal ou em
ambas partes da coluna. Existe ainda a possibilidade de aplicar em mais de um local,
por exemplo, a consulta a seguir.
SELECT * FROM `UNIVERSIDADE`.`CURSO`
WHERE `CURSO`.`NOME` LIKE '%Banco%II%';
Figura 3 - Tabelas em bancos de dados 
Fonte: Semisatch / 123RF.
64
Para recuperar todos os professores que tenham a sequência “ria” iniciando na
segunda posição da coluna NOME, podemos utilizar uma variação do operador LIKE,
como na consulta a seguir.
SELECT `ALUNO`.`ID`,
  `ALUNO`.`NOME`,
  `ALUNO`.`DATA_NASCIMENTO`,
  `ALUNO`.`CURSO_FK`
FROM `UNIVERSIDADE`.`ALUNO`
WHERE `ALUNO`.`NOME` LIKE '__ria';
SAIBA MAIS
A cláusula LIKE geralmente consome muito processamento e precisa de um
índice adequado para ela.
Saiba mais, acessando: http://bit.ly/2xGRSfc.
65
http://bit.ly/2xGRSfc
Se um sublinhado ou % for necessário como um caractere literal na string, o caractere
deve ser precedido por um caractere de escape, que é especi�cado após a string,
usando a palavra-chave ESCAPE. Por

Continue navegando

Outros materiais