Banco de Dados
Banco de Dados
Banco de Dados
E BI
Fundamentos e Conceitos
sobre Banco de Dados
Sumário
Apresentação. . .................................................................................................................................. 4
Fundamentos e Conceitos sobre Banco de Dados. . .................................................................. 7
1. Fundamentos e Conceitos sobre Banco de Dados................................................................ 7
2. Dados, Informações, Conhecimento e Inteligência............................................................ 10
2.1. Dados.......................................................................................................................................... 11
2.2. Informações. . ............................................................................................................................ 11
2.3. Conhecimento.......................................................................................................................... 11
2.4. Inteligência...............................................................................................................................12
3. Sistemas de Banco de Dados e Sistemas Gerenciadores de Banco de dados (SGBD).12
3.1. As 4 Principais Características que Tornam Vantajosa a Utilização de um SGBD.....16
4. Evolução e Tipos de SGBDs......................................................................................................19
4.1. Modelo em Rede e Modelo Hierárquico: Década de 60...................................................19
4.2. Modelo Relacional: Década de 70. . ......................................................................................21
4.3. Modelo Orientado a Objetos: Década de 80......................................................................21
4.4. Big Data e Modelos NoSQL: Anos 2000..............................................................................21
5. Esquemas e Instâncias do Banco de Dados......................................................................... 26
5.1. Esquema.................................................................................................................................... 26
5.2. Instância................................................................................................................................... 26
6. Arquitetura em Três Esquemas (ANSI/SPARC) e a Independência de Dados............... 29
6.1. Arquitetura em Três Esquemas (ANSI/SPARC)................................................................. 29
6.2. Independência de Dados. . ..................................................................................................... 30
7. Projeto de um Sistema de Banco de Dados...........................................................................31
8. O Ambiente do Sistema de Banco de Dados........................................................................ 33
8.1. Interface com o Usuário........................................................................................................ 35
8.2. Recursos e Componentes Internos.................................................................................... 36
Resumo. ............................................................................................................................................ 37
Mapa Mental................................................................................................................................... 47
Questões de Concurso..................................................................................................................48
Gabarito............................................................................................................................................ 73
FUNDAMENTOS E CONCEITOS SOBRE
BANCO DE DADOS
1. Fundamentos e Conceitos sobre Banco de Dados
Inicialmente vamos trazer aqui uma reflexão sobre um cenário hipotético, mas que reflete
uma realidade passada e que levou posteriormente ao surgimento do Banco de Dados, por as-
sim dizer, bem como dos Sistemas Gerenciadores de Banco de Dados – SGBDs.
Pense que você está inserido(a) em um contexto de trabalho, numa empresa ou repartição
pública, onde se faz necessário lidar com informações (das mais diversas possíveis) e que tais
informações são produzidas por vários departamentos deste local, cada um especializado em
algo diferente: Vendas, Compras, Gestão de Pessoas e Estoque, por exemplo.
Agora, imagine que cada um destes departamento trabalhe de forma diferenciada, onde
os seus funcionários utilizam diferentes sistemas e aplicações no dia a dia, porém com uma
peculiaridade em comum entre eles: Não há integração ou vinculação entre os dados que são
produzidos por estes sistemas e aplicações, entre os diferentes departamentos.
Diante deste cenário, vamos analisar algumas possibilidades:
Ótimas perguntas!!
Bem, todas elas têm praticamente a mesma resposta: Sim, diante do contexto apresenta-
do, existe sim uma grande chance de repetição dos dados do produto nos diferentes sistemas
usados nos departamentos. Isso piora ainda mais quando, por erro humano, dados sobre o
mesmo produto sejam digitados de forma diferente a cada nova operação.
Professor, caso necessite gerar um relatório unificado, onde demonstre o que foi compra-
do, vendido e estoque atual, será possível obter tal informação sem repetições ou erros
de cadastro?
Vamos fazer uma cópia dos dados de todos os produtos em todos os sistemas, em todos os depar-
tamentos, e desta forma não precisaremos mais ter que digitar os mesmos dados, garantindo que
não ocorrerão mais erros de digitação.
Bem, neste caso, houve uma iniciativa de se resolver o problema da inconsistência, porém
aumentou e muito outro problema, o da redundância de dados e tal redundância gera incon-
sistências, pois diversos usuários estarão ao mesmo tempo inserindo os mesmos dados em
diferentes sistemas. Agora imagine quando um novo produto precise ser cadastrado ou algum
produto existente precise sofrer alterações em suas descrições. Neste caso, todos os siste-
mas terão que receber uma nova carga de dados de produtos ou alterações e isso é muito
improdutivo e arriscado. É o que chamamos de redundância de dados não controlada.
Foi diante de problemas como estes apresentados, ou seja, o da redundância não controla-
da, que surge como solução a utilização dos dados de forma única e sendo acessada por diver-
sos sistemas e consequentemente por diversos usuários. A este conjunto de dados integrados
e que atendem a diversos outros sistemas, é o que podemos chamar de Banco de Dados.
Então podemos assim definir que o um Banco de Dados é formado por um conjunto de
dados, que estão interrelacionados e que atendem a uma necessidade específica.
Aproveito o momento para apresentar alguns conceitos e definições sobre Banco de Da-
dos, abordados por um autor muito utilizado pelas bancas de concurso, em especial a CESPE/
Cebraspe, vejamos:
Segundo Elmasri & Navathe – Sistema de Banco de Dados, 6ªedição.
Um banco de dados representa algum aspecto do mundo real, às vezes chamado de minimundo. As
mudanças no minimundo são refletidas no banco de dados.
Um banco de dados é projetado, construído e populado com dados para uma finalidade específica.
Ele possui um grupo definido de usuários e algumas aplicações previamente concebidas nas quais
esses usuários estão interessados.
Com base nesta definição do Elmasri & Navathe, vamos então esclarecer alguns dos ter-
mos utilizados pelo autor, o que podemos considerar como propriedades implícitas sobre ban-
co de dados.
A primeira trata-se do termo “minimundo” ou “aspecto do mundo real”, neste ponto o autor
está tentando expressar que toda e qualquer alteração, inclusão ou exclusão feita pelos usuá-
rios nos sistemas que utilizam bancos de dados, estas devem ser refletidas ou armazenadas
assim como estão.
Outro ponto é sobre o fato de o banco de dados ter que atender a uma “finalidade espe-
cífica”, ou seja, deve atender aos interesses e necessidades da organização ou empresa, sob
o viés do negócio praticado. Este uso é feito por pessoas que fazem parte da organização, os
quais são descritos como “grupo definido de usuários” e possuem algum tipo de interesse no
uso destes dados.
Resumindo, um banco de dados não existe ao acaso, ele existe para atender a uma finali-
dade da organização, armazenando dados que refletem esta realidade e que serão utilizados
para diversos fins específicos.
Em outras palavras, um banco de dados (Database) armazenam dados que são deriva-
dos de alguma fonte, onde refletem a interação com determinados eventos do mundo real e
que, neste contexto, existem diversos usuários ou públicos interessados nestes dados. Estes
usuários irão, na maioria das vezes, interagir com estes dados por via de algum sistema ou
aplicação, seja através de uma transação comercial, realização de matrícula em cursos ou até
mesmo em uma consulta na Web.
As mudanças ocorridas no mundo real (ou no “minimundo”, citado por Elmasri & Navathe)
devem ser refletidas no banco de dados, fazendo com que ele seja confiável em todo tempo.
Com base nesta informação, é possível perceber que não há um tamanho limite determinado
para um banco de dados, nem limite na sua composição ou complexidade de dados. Temos
atualmente como exemplo desta infinidade de dados, os sistemas de comércio eletrônico dis-
ponibilizados na internet, onde é possível perceber um catálogo enorme de produtos a se-
rem vendidos, com diversas descrições e formas de consulta, onde após a realização de uma
compra, estes dados passam a ser utilizados para acompanhamento da chegada do produto
em sua casa e também nos e-mails de confirmação e notas fiscais eletrônicas ou físicas, e o
sistema utilizado para esse fim, bem como o banco de dados, devem suportar esta quantidade
enorme de solicitações de compras.
Bem, vamos agora dar uma pequena pausa na evolução do conhecimento sobre banco de
dados, para conhecer às definições e diferenças conceituais do que seja dado, informação,
conhecimento e inteligência.
Eu trouxe esta temática agora para fins de esclarecer as diferenças entre cada categoria,
uma vez que na vida prática costumamos lidar com o conhecimento, mas não temos ideia da
origem deste conhecimento e até onde podemos chegar ou aplicar este conhecimento. Sei
que parece meio “filosófico” o que estou falando, mas, por incrível que pareça, tais conceitos
costumam vir em questões de concursos e geralmente tentando confundir o candidato, indu-
zindo ao erro.
Irei aprofundar esse assunto quando chegarmos nas aulas sobre Business Intelligence-BI,
porém como a fonte primária para se chegar até o nível de conhecimento e inteligência é o
dado e estamos falando sobre Banco de Dados, creio ser o momento propício para adentrar-
mos inicialmente neste assunto. Vamos lá?!
Alguns autores tendem a trabalhar o conceito sobre dado, informação, conhecimento e
inteligência como se fossem sinônimos, porém a grande maioria (incluindo as bancas de con-
cursos) trata cada conceito com suas características próprias, às diferenciando, porém, existe
uma relação entre elas, digamos que evolutiva, vejamos:
2.1. Dados
Podem ser definidos como resultados de eventos do mundo real, onde seu conteúdo é
registrado e armazenado, podendo ser considerado um dado bruto e que fora de um contexto,
por si só, não representa uma informação, mas apenas um dado ou conjunto de dados. Quan-
do os dados são processados, geram informação.
Exemplo: 10/01/2020 é uma data e sozinha representa um dado, mas este dado retrata uma
data de nascimento? uma data de algum evento? ou a data de vencimento de um boleto? Resu-
mindo, ela por si só não consegue informar, ou seja, não gera informação.
2.2. Informações
São definidas em algum contexto e que por sua vez para que produzam informação fa-
zem uso dos dados, que foram processados. Com a produção de informações é possível criar
possibilidade de avaliações e comparações. A informação é algo que passa a fazer sentido
para alguém, para uma empresa ou organização. A partir da informação é possível produzir
interpretação, a partir da leitura humana, por exemplo. A partir do processamento dos dados é
gerada a informação.
2.3. Conhecimento
Com base no uso das informações é possível colocá-las em ação e assim gerar conheci-
mento. Podemos dizer que o conhecimento tem relação com a capacidade de alguém inter-
pretar e sintetizar um conjunto de informações e associá-las com outros conjuntos de infor-
mações, com base nas experiências, feeling, impressões ou até crenças e daí tirar conclusões
sobre algum assunto ou problema. A construção do conhecimento muitas vezes inclui reflexão
e capacidade de sintetização, sendo inclusive difícil de ser capturada por sistemas de infor-
mação, pois normalmente são mais tácitos do que explícitos. Não são estáticos, pois são
modificados ou transformados a depender da forma como ocorre a interação com o ambiente,
gerando neste momento aprendizado.
2.4. Inteligência
Quando o conhecimento é encarado como sendo oportunidade, podemos dizer que esta-
mos diante da inteligência, ou seja, a aplicação do conhecimento em um ambiente considera-
do propício, pode gerar vantagem competitiva para uma organização, por exemplo. Podemos
dizer que a inteligência é a base do processo decisório, podendo definir a direção estratégia de
uma organização.
Vamos continuar nossa jornada, agora evoluindo o conhecimento de Banco de Dados para
Sistema de Banco de Dados e Sistema Gerenciador de Banco de Dados (SGBD). Diversos au-
tores trabalham com estes conceitos e que são cobrados em provas de concursos, vamos
conhecê-los e diferenciá-los. Para isso vamos utilizar uma figura muito conhecida da literatura
tradicional sobre Sistemas de Banco de Dados, vejamos:
Figura 3: Elmasri & Navathe – Sistema de Banco de Dados
Um Sistema Gerenciador de Banco de Dados – SGBD é uma coleção de programas que permite aos
usuários criar e manter um banco de dados. O SGBD é um sistema de software de uso geral que
facilita o processo de definição, construção, manipulação e compartilhamento de banco de dados
entre diversos usuários e aplicações.
Além disso, um SGBD armazena o resultado das especificações dos tipos, estruturas e
restrições de dados. As definições ou informações sobre o banco de dados são armazenadas
no SGBD através do catálogo ou dicionário de dados, também chamado de metadados. Nestes
metadados ficarão registrados os tipos, estruturas e restrições dos dados armazenados.
Quanto à manipulação, um SGBD inclui funções de consultas aos dados armazenados,
bem como para alteração destes dados. Permite também realizar o compartilhamento de seus
dados para diversos usuários e programas, para que haja acesso simultâneo. As operações
sobre os dados, onde ocorrem leituras e gravações são chamadas de transações.
Mas não para por aí, o SGBD também possui funções importantes relacionadas com a pro-
teção do banco de dados e sua manutenção por longo período. Essa proteção inclui proteção
do sistema contra defeitos ou falhas, tanto de hardware, quanto de software, bem como prote-
ção contra acesso não autorizado.
Então, professor, quer dizer que, para que eu possa implementar um banco de dados, eu
preciso obrigatoriamente utilizar um SGBD?
Gostei da pergunta!!
Não necessariamente, pois você poderia por conta própria implementar todos os recursos
já mostrados acima que um SGBD possui, porém seria muito custoso devido à complexidade
envolvida nos requisitos para conseguir alcançar o nível satisfatório. No mercado temos diver-
sos SGBDs, gratuitos e pagos, tem para todos os gostos, como por exemplo: MySQL, Oracle,
SQL Server, dentre outros.
Creio que chegou o momento de mostrar um exemplo do uso do banco dados, através da
representação de algumas tabelas contendo diversos dados, sendo que estas tabelas (rela-
ções) mantêm algum tipo de relacionamento entre elas e será possível perceber inicialmente
através dos nomes dos campos envolvidos.
Figura 4: Elmasri & Navathe – Tabelas do BD Universidade
PEGADINHA DA BANCA
Cuidado ao ler as assertivas e não deixar “passar batido” o seguinte: TABELA é o mesmo que
RELAÇÃO e a VINCULAÇÃO de uma tabela com outra tabela forma um RELACIONAMENTO.
Quanto aos relacionamentos entre as tabelas e como serão construídos, veremos mais
adiante quando formos estudar modelagem de dados durante nossas aulas, assim como tam-
bém a linguagem para se realizar consultas, inclusões, alterações e exclusões de dados, como
também operações nas estruturas de dados, podendo inserir, alterar e excluir tabelas, utilizan-
do a linguagem SQL (Structured Query Language) em suas diferentes categorias.
Para finalizar esta etapa da aula onde estamos conhecendo às características de um SGBD,
vamos continuar a perseguir o que o autor querido pela CESPE/Cebraspe (Elmasri & Navathe)
fala sobre as vantagens da utilização de dados numa abordagem por uso de banco de dados,
ao invés de arquivos de dados separados em diferentes departamentos, como vimos no iní-
cio da aula.
Como vimos anteriormente, o SGBD além de possuir um banco de dados onde irão ser ar-
mazenados os dados, também possui um catálogo de dados. Esse catálogo armazenará toda
estrutura do arquivo da base dados e isso inclui as tabelas, ou seja, toda definição das colunas
e seus tipos de dados, além de restrições e relacionamentos e outros itens que façam parte
da estrutura.
O SGBD é feito para ser abrangente e não específico para uma aplicação desenvolvida
pelo programador, ou seja, ele é feito para trabalhar de forma satisfatória com qualquer quan-
tidade de aplicações de banco de dados.
Como vimos no início da aula, quando falamos de uma organização utilizando dados repli-
cados em diferentes sistemas e departamentos, tal cenário se torna arriscado e improdutivo
quando surge a necessidade de novas atualizações de dados ou até da estrutura do dados
(novas tabelas, mudanças nos tipos das colunas, dentre outras).
Ao utilizar um SGBD, esta estrutura é armazenada no catálogo de forma separada das
aplicações que os acessam, ou seja, de forma independente ou isolada, é o que chamados de
independência de dados do programa.
Cada estrutura criada e armazenada no catálogo apresenta sua abstração relacionada
com um modelo específico, ou seja, a depender do “minimundo” que se quer satisfazer, por
exemplo, a estrutura da tabela ALUNO é diferente da estrutura da tabela DISCIPLINA. As es-
truturas das tabelas que formam o sistema para UNIVERSIDADE são diferentes, por exemplo,
das tabelas que sirvam para um sistema voltado para VENDAS ON-LINE, porém ambos podem
estar no mesmo SGBD, em bancos de dados diferentes.
Já vimos durante a aula que o SGBD é acessado de forma simultânea e concorrente por
diversos usuários e aplicações, e neste momento cada operação feita por diferentes usuários
forma uma transação.
Com vistas a garantir o melhor resultado para o usuário ou aplicação, o SGBD precisa in-
cluir um software de controle de concorrência para que diferentes usuários que acessem um
mesmo dado, ao mesmo tempo, possam fazer isso de forma controlada.
Segundo Elmasri & Navathe:
Podemos dizer que uma transação é um programa em execução ou processo que inclui um ou mais
acessos ao banco de dados, seja para leitura ou atualização de seus registros, sendo executada de
forma completa e sem interferências de outras transações.
Um conceito muito importante a ser tratado no tocante a transação é que se faz necessário
garantir às propriedades do ACID. E o que é isso professor? Eu explico!
ACID é o acrônimo de: Atomicidade, Consistência, Isolamento e Durabilidade. Vejamos o que
significa cada uma destas propriedades:
Atomicidade: É a propriedade que garante que a transação seja tratada de forma única, a qual
deve ser executada por completo ou em caso de falha, que seja falha por completo, não deixan-
do partes das operações sendo executadas com sucesso e outras fiquem pendentes, causan-
do inconsistências futuras nos dados. Resumindo, é a regra do “tudo ou nada”, se a transação
falhar no meio, tudo deve voltar ao estado original, assim se espera. Esse retorno é chamado
de Rollback.
Consistência: Deve garantir que a transação leve o banco de dados de um estado válido para
outro estado também válido, mantendo a estabilidade do banco de dados. Essa estabilidade
está relacionada com a garantia de que os dados a serem registrados sejam válidos de acordo
com as regras de relacionamento definidas. Um exemplo, seria se uma transação tentasse
incluir na tabela de TURMA um Numero_disciplina que não exista na tabela DISCIPLINA, neste
caso a transação falhará, garantindo a consistência do banco de dados.
Isolamento: É a propriedade que irá garantir que durante transações, o acesso simultâneo a
um mesmo dado seja tratado como se fosse sequencial, garantindo que uma transação não
seja afetada por outra transação concorrente, sem que haja falha percebida pelo usuário ou
aplicação. Por exemplo, no caso tratado anteriormente sobre reserva de assento na compra de
passagens aéreas, em caso de transações simultâneas de tentativa de reserva sobre um mes-
mo assento por diferentes usuários, o primeiro usuário que concluir a transação da reserva,
garantirá o registro na base de dados da reserva em seu nome e a transação do outro usuário
então será interrompida, voltando ao seu estado de origem, ou seja, sofrerá um Rollback.
Durabilidade: É propriedade que o SGBD deve ter de que uma transação já executada (efetiva-
da), permaneça neste estado mesmo havendo algum problema de falha no sistema ou algum
travamento em sistema operacional ou até mesmo queda de energia. Isso é garantido através
da gravação (persistência) das transações em disco ou dispositivos não voláteis, ficando en-
tão disponível quando o banco de dados for reinicializado.
O modelo de dados em rede surgiu como uma extensão do modelo de dados hierárquico,
as relações de dados (tabelas) eram representadas por grafos bidirecionais, formando um úni-
co tipo de associação, bem como formando relacionamentos entre às relações do tipo muitos-
-muitos (veremos mais sobre os tipos de relacionamentos na próxima aula). O diagrama para
representar os conceitos do modelo em redes consiste em dois componentes básicos: Caixas,
que correspondem aos registros e Linhas, que correspondem às associações.
4.2. Modelo Relacional: Década de 70
Os modelos anteriores se demonstram ser inflexíveis, principalmente na questão de re-
organização dos dados ou quando se adicionavam novas aplicações. Foi neste cenário que
surgiu o Modelo Relacional, satisfazendo a uma série de necessidades, como:
• Criação do catálogo de dados independente de estrutura para representação física dos
dados;
• Utilização de linguagem de alto nível e estruturada (SQL);
• Independência entre dados e programas;
• Representação de dados de um lado e estrutura física do outro;
É possível perceber na figura acima que o ID_1 (Joao) utiliza famílias de dados diferentes
em relação a ao ID_2 (Jose) em preferencia_livros, por exemplo. E em dados_cadastrais, cada
um dos IDs utilizam diferentes famílias.
Cada registro pode ter quantidade de colunas diferentes. Isso é possível pelo fato de
que os dados são armazenados fisicamente em uma sequência orientada por colunas e não
por linhas.
Solução adequada para casos em que:
• Exista grande volume de dados;
• Necessite de alto desempenho e disponibilidade na leitura e escrita de dados;
• Inclusão de campos dinâmicos garantindo a disponibilidade;
• É utilizado por aplicações de larga escala, como por exemplo, o serviço de mensagens
do Facebook.
Quando a estratégia requer saber mais do relacionamento dos dados, do que sobre o
próprio dado.
Em comparação com os demais modelos, o orientado a grafos é o mais especializado.
Totalmente modelado utilizando a teoria dos grafos, ou seja, possui um modelo de da-
dos estabelecido, utilizando vértices e arestas para armazenar dados dos itens que passaram
pela coleta.
Ao estabelecer o vínculo entre os dados, é possível definir este tipo de vínculo, criando ró-
tulos de acordo com o negócio.
É formado por uma coleção de nós e arestas. Cada nó representa uma entidade (por ser
uma pessoa, organização, local) e cada aresta representa uma conexão ou relacionamento
entre dois nós. Cada nó em um banco de dados baseado em grafos é definido por um identi-
ficador exclusivo, um conjunto de arestas de saída e/ou arestas de entrada e um conjunto de
propriedades expressas como pares de chave/valor.
Vejamos um exemplo:
5.1. Esquema
A descrição do banco de dados é o que chamamos de esquema (Schema). Durante nossa
aula falamos várias vezes de um componente importante em um SGBD, o chamado catálogo
de dados. Como já vimos, o catálogo de dados guarda informações sobre as definições das
relações(tabelas) e dos relacionamentos (vínculo entre as tabelas), onde várias propriedades
são definidas como, por exemplo: os tipos e tamanhos das colunas (atributos), quais desses
atributos serão utilizados nos relacionamentos entre tabelas, ou seja, a definição das chaves
primárias e chaves estrangeiras, bem como também regras de restrições, ou seja, a definição
da obrigatoriedade ou não do preenchimento de determinado atributo. Este conjunto de defi-
nições, que fazem parte do catálogo, são também chamados de metadados, e sempre que o
SGBD precise recorrer aos dados estruturais, os metadados serão lidos no catálogo.
O esquema do banco de dados é definido durante a fase de projeto do banco de dados
e não muda com muita frequência, o que na verdade muda constantemente são dados que
serão utilizados no banco de dados, ou seja, o seu conteúdo. Estes dados são inseridos, altera-
dos, excluídos durante todo tempo, a depender da frequência de uso do banco de dados pelas
aplicações ou diretamente pelos usuários, como desenvolvedores/programadores.
5.2. Instância
Como é possível perceber, os dados reais armazenados em um banco de dados podem
mudar a todo tempo e estes dados em determinado momento no tempo são chamados de
estado ou de instante do banco de dados, ou instância do banco de dados.
Então, resumindo, quando um novo banco de dados é definido, especificamos seu esque-
ma apenas para o SGBD e neste momento, o estado do banco de dados é vazio, ou seja, temos
ali apenas um “esqueleto” ou estrutura do banco de dados, porém, quando este banco de dados é
posto em uso, ou seja, quando ele é carregado (ou populado) obtendo ali dados iniciais, então
estamos diante de uma instância do banco de dados, ou seja, na instância os dados utilizam
o esquema. Vejamos abaixo um exemplo de catálogo, esquema e instância, com base no mo-
delo de UNIVERSIDADE.
Antes de entrarmos no tópico seguinte da aula, desejo que você tenha em mente que os
usuários responsáveis por projetar um banco de dados para uma aplicação, sendo essa aplica-
ção a ferramenta que irá contribuir para que os negócios ou necessidades de uma organização
sejam satisfeitos, elaboram inicialmente um modelo de dados que seja abstrato, ocultando
detalhes do armazenamento inicialmente, mas que servirá para descrever a estrutura deste
banco dados.
Para que seja possível construir a estrutura do esquema do banco de dados, o modelo
definido deve apresentar um conjunto de conceitos que englobem: descrição dos dados,
relacionamentos entre estes dados, semântica dos dados e regras de restrições para manter
a consistência dos dados.
Com base nessa linha de raciocínio, os modelos de dados percorrem a trajetória a partir do
modelo conceitual (também chamado de alto nível), passando pelo modelo representacional
de forma intermediária, chegando no modelo físico (também chamado de baixo nível). Essa
trajetória basicamente sai do nível mais próximo do usuário final, terminando no nível mais
próximo da estrutura de arquivos do banco de dados.
Finalizando este tópico, trago abaixo algumas definições de um trio de autores também
muito utilizado pelas bancas de concursos (Silberschatz-Korth-Sudarshan), onde eles definem
os níveis de abstração dos modelos de dados em: Nível Físico, Nível Lógico e Nível de Vi-
são (view).
Segundo (Silberschatz-Korth-Sudarshan), grifo nosso:
Nível Físico: O nível de abstração mais baixo descreve como os dados são realmente armazenados.
O nível físico descreve em detalhes estruturas de dados complexas de baixo nível.
Nível Lógico: O próximo nível de abstração mais alto descreve que dados estão armazenados no
banco de dados e que relacionamentos existem entre eles. O nível lógico, portanto, descreve o ban-
co de dados inteiro em termos de um pequeno número de estruturas relativamente simples. Embora
a implementação das estruturas simples no nível lógico possa envolver estruturas em nível físico
complexas, o usuário do nível lógico não precisa estar consciente dessa complexidade. Os adminis-
tradores de banco de dados, que precisam decidir que informações armazenar no banco de dados,
usam o nível lógico de abstração.
Nível de view: O nível de abstração mais alto descreve apenas parte do banco de dados. Mesmo
que o nível lógico use estruturas mais simples, a complexidade permanece devido à variedade de
informações armazenadas em um grande banco de dados. Muitos usuários do sistema de banco
de dados não precisam de toda essa informação: em vez disso, eles precisam acessar apenas uma
parte do banco de dados. O nível de view existe para simplificar sua interação com o sistema. O
sistema pode fornecer muitas visões para o mesmo banco de dados.
Foi com base nestas características acima que surgiu uma proposta de arquitetura para
fins de facilitar a sua visualização, chamada de arquitetura em três esquemas.
Nível Externo: Está mais próximo do usuário e longe dos aspectos físicos do banco de
dados, onde o interesse e necessidade do usuário ou da organização se faz presente através
de um modelo de dados representativo, é o que chamamos também de modelo de dados de
alto nível.
Nível Conceitual: A partir da visão externa do usuário em relação ao banco de dados, é pos-
sível agora construir um esquema conceitual destes dados. O esquema conceitual irá, neste
momento, ocultar os detalhes das estruturas de armazenamento físico e foca na descrição
representativa das entidades, tipos de dados, relacionamentos, restrições e operações dos
usuários. A construção deste esquema conceitual toma por base o modelo de dados de alto
nível, presente no nível externo.
Nível Interno: Agora sim, chegamos na camada mais próxima dos dados armazenados, ou
seja, o esquema interno, onde a descrição do armazenamento físico é descrita. Neste esque-
ma todos os detalhes sobre o armazenamento e caminhos de acesso, são detalhados.
É necessário observar que os três esquemas são apenas descrições dos dados. Os da-
dos de fato armazenados estão em nível físico. Quando grupos de usuários fazem uso de um
SGBD baseado em arquitetura de três esquemas, eles farão uso do esquema externo que foi
estabelecido, ou seja, os usuários que fazem parte do universo de dados do sistema UNIVE-
SITÁRIO, por exemplo, terão acesso ao esquema conceitual estabelecido para este universo,
já os usuários de um outro esquema, por exemplo, de um sistema de VENDAS, estes usarão o
seu esquema estabelecido.
Mas professor, então quer dizer que será preciso ter um SGBD para cada um destes uni-
versos de sistema, ou seja, um SGBD para o sistema UNIVERSITÁRIO e outro para o de
VENDAS?
Independência Lógica de Dados: É a capacidade de alterar o esquema conceitual sem ter de alterar
os esquemas externos ou os programas da aplicação. Podemos alterar o esquema conceitual para
expandir o banco de dados (acrescentando um tipo de registro ou item de dado), para alterar restri-
ções ou para reduzir o banco de dados (removendo um tipo de registro ou item de dado).
Independência Física de Dados: É a capacidade de alterar o esquema interno sem ter de alterar o
esquema conceitual. Logo, os esquemas externos também não precisam ser alterados. Mudanças
nos esquemas internos podem ser necessárias porque alguns arquivos físicos foram reorganizados
– por exemplo, ao criar estruturas de acesso adicionais – para melhorar o desempenho da recupe-
ração ou atualização.
O que o autor nos apresenta de relevante com relação ao uso do SGBDs é a capacidade de
se realizar alterações em um nível, sem afetar o outro, ou seja, de poder realizar alterações em
um nível mais baixo sem que haja impacto no nível conceitual e vice-versa.
Apesar desta afirmação, existe uma ressalva apontada pelo mesmo autor, no tocante a não
obrigatoriedade da existência de independência lógica, vejamos o que ele diz:
... Em geral, a independência física de dados existe na maioria dos bancos de dados e ambientes
de arquivo, nos quais detalhes físicos, como a localização exata dos dados no disco, e detalhes
de hardware sobre codificação do armazenamento, posicionamento, compactação, divisão, mes-
clagem de registros, e assim por diante, são ocultados do usuário. As demais aplicações ignoram
esses detalhes. Por sua vez, a independência lógica de dados é mais difícil de ser alcançada porque
permite alterações estruturais e de restrição sem afetar os programas de aplicação – um requisito
muito mais estrito. (Navathe – Sistemas de Banco de Dados – 6ª. Ed.)
A figura acima apresenta uma separação em dois quadros: o primeiro (parte superior da
figura) apresenta os vários usuários do banco de dados e como eles se comunicam com a
segunda parte da figura (parte inferior), onde é possível ver os detalhes internos de um SGBD,
onde verifica-se os locais de armazenamento, processamento da consulta e controle de tran-
sações, por exemplo.
8.1. Interface com o Usuário
Trata-se da parte superior da figura, onde é possível observar da esquerda para direita algu-
mas categorias de usuários: DBAs, Usuários Casuais, Programadores de Aplicação e Usuários
Paramétricos.
Os DBAs são os Administradores de Banco de Dados (Data Base Administrator), iremos
estudar mais sobre suas atividades na aula sobre Administração de Banco de Dados, mas de
forma resumida, nesta figura ele executa atividades de criação da estrutura de um banco de
dados através da linguagem DDL (Data Definition Language), uma das categorias da linguagem
SQL, que vamos estudar em aulas posteriores. Os DBAs utilizam interfaces interativas, onde é
possível informar os comandos DDL e ele é compilado e executado. Por fim irá refletir no catá-
logo do sistema onde ficam armazenados todas as estruturas dos esquemas(metadados) dos
bancos de dados. Ele pode criar um banco de dados, novas tabelas e atributos, também podem
alterar a estrutura das que já existem, dentre outras atividades. Também podem executar co-
mandos com mais privilégios do que um usuário comum, como por exemplo, podem inserir um
lote de registros em uma determinada tabela via comandos SQL, neste caso o comando será
processado e executado com destino na instancia do banco de dados em uso no momento.
Os programadores de aplicação fazem parte de outra categoria de usuários, um pouco
parecida com o DBA no sentido de podem executar comandos SQL, porém, normalmente na
categoria DML (Data Manipulation Language) que são comandos para manipulação de dados
e não criação, alteração ou exclusão de estruturas. Podem inserir, consultar e alterar dados de
acordo com a necessidade do desenvolvimento da aplicação. As aplicações desenvolvidas
por estes programadores também realizam operações de manipulação de dados no banco de
dados, geralmente estão junto com o código desenvolvido e dali é feita uma chamada ao ban-
co de dados através da linguagem SQL, nas categorias DQL (Data Query Language), utilizada
apenas para consulta e DML. Perceba, pela figura, que a todo o tempo o catálogo de sistema é
consultado e depois autorizado o processamento das instruções. Os programadores também
podem executar comandos que possam atuar em dados que estejam também sendo utiliza-
dos por outros usuários, o que irá requerer o controle de concorrência através da utilização de
transações. Essas transações são executadas pelos usuários paramétricos (abstração usada
pelo autor da figura), sendo considerada cada transação como sendo uma execução separada
(isolamento).
Os usuários casuais, são os usuários do dia a dia, que utilizam aplicações já desenvolvidas
por alguma empresa ou algum programador/desenvolvedor. São usuários não dispõem de in-
terfaces para executar comandos SQL e na maioria deles não possuem conhecimento técnico
para tal, porém, independente disso, as aplicações que eles utilizam realizam consultas e co-
mandos de manipulação de dados e consequentemente, estes comandos, passam pelo fluxo
que envolve a compilação do comando, consulta ao catálogo e posterior processamento da
requisição feita.
As consultas aos dados via comando, são analisadas pelo compilador da consulta, pas-
sando para uma linguagem de uso interno do SGBD. Essa consulta pode passar por uma oti-
mização a depender de como ela foi escrita, pois pode ser ordenada, pode ter redundâncias
eliminadas e utilizar índices que ajudarão a melhorar a performance e o tempo de resposta
(veremos maiores detalhes na aula de administração de banco de dados).
Banco de Dados:
• Representa aspectos do mundo real;
• Todas as mudanças ocorridas devem ser refletidas no mundo real devem ser refletidas
no banco dados;
• É projeto, construído e populado (publicado) com dados para uma finalidade específica.
• Possui grupo definido de usuários e algumas aplicações previamente concebidas nas
quais estes usuários são interessados.
Modelo Hierárquico (Década de 60): Os dados eram organizados formando uma hierar-
quia, semelhante a uma árvore de dados, sendo que cada nó desta hierarquia possui ocorrên-
cias de registros, sendo cada registro uma coleção de campos (ou atributos), onde cada um
contém um dado.
Modelo em Rede (Década de 60): Uma extensão do modelo hierárquico, sendo as relações
de dados representadas por grafos bidirecionais.
Modelo Relacional (Década de 70): Devido a inflexibilidade dos modelos anteriores, no to-
cante a necessidade de reorganização dos dados a cada manipulação, surge então o modelo
relacional atendendo a algumas necessidades, tais como: independência entre dados e pro-
grama, dados de um lado e estrutura física do outro. Os dados são armazenados em relações
(tabelas), onde cada tabela possui uma ou mais colunas (atributos). Utiliza uma linguagem
denominada SQL para realizar diversas operações sobre os dados, bem como criação da es-
trutura do banco de dados(esquema).
Modelo Orientado a Objetos (Década de 80): Mesmo o modelo relacional se mostrando
satisfatório, algumas áreas de atuação do mercado sentiram a necessidade da existência de
um modelo onde se pudesse ter flexibilidade na definição dos tipos dados, podendo também
definir métodos de comportamento sobre os dados. O objeto sendo estrutura (propriedade) +
operações(métodos).
Modelo NoSQL (Anos 2000): Com o crescimento exponencial dos dados no mundo, o uso
apenas de SGBDs estruturados, onde a definição da estrutura dos dados era conhecida pre-
viamente, perde o sentido, uma vez que a origem dos dados nem sempre é conhecida. Neste
contexto surgem os SGBDs NoSQL (Not Only SQL), proporcionando armazenamento de dados
estruturados e semiestruturados (como arquivos JSON, XML, por exemplo). Reveja os tipos
NoSQL abaixo:
− Modelo orientado a chave-valor;
− Modelo orientado a documentos;
− Modelo orientado a colunas;
− Modelo orientado a grafos.
Instância
Nível Físico: O nível de abstração mais baixo, descreve em detalhes estruturas de dados
complexas de baixo nível.
Nível Lógico: Descreve o banco de dados inteiro em termos de um pequeno número de
estruturas relativamente simples.
Nível de view: O nível de abstração mais alto descreve apenas parte do banco de dados.
O nível de view existe para simplificar sua interação com o sistema. O sistema pode fornecer
muitas visões para o mesmo banco de dados.
Arquitetura em Três Esquemas (ANSI/SPARC) e a Independência de Dados
Arquitetura em Três Esquemas
Nível Externo: Está mais próximo do usuário e longe dos aspectos físicos do banco de da-
dos, é o que chamamos também de modelo de dados de alto nível.
Nível Conceitual: Oculta os detalhes das estruturas de armazenamento físico e foca na
descrição representativa das entidades, tipos de dados, relacionamentos, restrições e opera-
ções dos usuários. A construção deste esquema conceitual toma por base o modelo de dados
de alto nível, presente no nível externo.
Nível Interno: Neste nível todos os detalhes sobre o armazenamento e caminhos de aces-
so, são detalhados.
Independência de Dados
Os DBAs são os Administradores de Banco de Dados (Data Base Administrator), ele execu-
ta atividades de criação da estrutura de um banco de dados através da linguagem DDL (Data
Definition Language), uma das categorias da linguagem SQL. Os DBAs utilizam interfaces inte-
rativas, onde é possível informar os comandos DDL e ele é compilado e executado, por fim irá
refletir no catálogo do sistema onde ficam armazenados toda estruturas dos esquemas(me-
tadados) dos bancos de dados. Ele pode criar um banco de dados, novas tabelas e atributos,
também podem alterar a estrutura das que já existem, dentre outras atividades. Também po-
dem executar comandos com mais privilégios do que um usuário comum, como por exemplo,
podem inserir um lote de registros em uma determinada tabela via comandos SQL, neste caso
o comando será processado e executado com destino na instancia do banco de dados em uso
no momento.
Os programadores de aplicação podem executar comandos SQL, porem normalmente nas
categorias DQL (Data Query Manipulation), utilizado para consulta aos dados e DML (Data
Manipulation Language) que são comandos para manipulação de dados e não criação, alte-
ração ou exclusão de estruturas (geralmente em uma organização ou fábrica de software, o
gerenciamento das estruturas das tabelas e do próprio banco de dados, fica a cargo de um
DBA – Administrador de Banco de Dados e/ou AD – Administrador de Dados, porém em outros
cenários, o programador pode atuar em todas as frentes). Os programadores também podem
executar comandos que possam atuar em dados que estejam também sendo utilizados por
outros usuários, o que irá requerer o controle de concorrência através da utilização de transa-
ções. Essas transações são executadas pelos usuários paramétricos (abstração usada pelo
autor da figura), sendo considera cada transação como sendo uma execução separada.
Os usuários casuais, são os usuários do dia a dia, que utilizam aplicações já desenvolvidas
por alguma empresa ou algum programador/desenvolvedor.
As consultas aos dados via comando, são analisadas pelo compilador da consulta, pas-
sando para uma linguagem de uso interno do SGBD.
Outros componentes são utilizados por meio das diversas chamadas feitas pelos usuários,
fazendo uso do processador de banco de dados em tempo de execução, trabalhando junto
com o catálogo do sistema, podendo atualizá-lo com as estatísticas de uso do banco dados.
O processador do banco de dados, quando em execução, também gerencia a transferência
de dados, fazendo uso do gerenciador de buffer, componente importante para garantir per-
formance, evitando leituras constantes no disco, mas nem todos os SGBDs tem este recurso
nativo, alguns recorrem ao controle de buffer através do sistema operacional.
Os sistemas de controle de concorrência, backup e recuperação são apresentados como
um módulo da figura. Eles são integrados ao processador de banco de dados em tempo de
execução para fins de gerenciamento de transação. Estes controles são fundamentais para
garantir o funcionamento adequado do SGBD, uma vez que incidentes podem acontecer e se
faz necessário existir recursos para recuperação em casos de falha e isso é feito pelo controle
de backup.
MAPA MENTAL
Nível Externo
Nível Conceitual
Arquitetura 3 Níveis
Nível Interno
(Elmasri e Navathe) Representa aspectos do
mundo real Mudanças ocorridas são
Lógica refletidas na banco de
Independência de Dados Finalidade específica dados
Física
Grupo específico de usu-
ários
Nível de View
Nível Lógico Modelo 3 Níveis
Nível Físico Características
Modelo Hierárquico
DDL Cria e altera estrutura de dados
Modelo em Rede
Banco de Cria e mantém bancos
DQL Consulta e obtém dados
Modelo Relacional de dados SQL
Evolução Dados DML Inclui, altera e exclui dados
Modelo Orientado a Objetos
Modelo NoSQL
Controle de transações
Acessado por diversos
Natureza de autodescrição de um usuários Atomicidade
Tabela = Relação
Coluna = Atributo
Dica
Uma tabela tem uma ou
mais colunas
Relacionamento = vínculo
entre tabelas
Introdução à linguagem
SQL
1
Banco de Dados
Banco de Dados é um conjunto de informações organizadas
que podem estar em um sistema manual ou em um sistema
computadorizado.
Dados
Os dados armazenados no sistema são repartidos em um ou
mais banco de dados. Um banco de dados é um depósito de
Banco de dados
dados armazenados. Geralmente ele é integrado e exatamente quais informações devem ser mantidas. Deve
compartilhado. identificar as entidades que interessam à empresa e as
Por “integrado” quer-se dizer que o banco de dados pode informações a serem registradas sobre essas entidades.
ser imaginado como sendo a unificação de diversos É função do DBA servir como elemento de ligação com os
arquivos, eliminando total ou parcialmente qualquer usuários, para garantir a disponibilidade dos dados que eles
redundância entre estes arquivos. necessitam. Ele é responsável também pela organização e
Por “compartilhado” quer-se dizer que partes individuais desempenho do sistema tendo em vista “o melhor para a
Pagina 2
Banco de dados
Sistema gerenciador de banco de dados é uma coleção de de uma parte do banco de dados para realizarem seu
arquivos inter-relacionados e um conjunto de programas trabalho. Para simplificar a interação desses usuários com o
que permitem a diversos usuários acessar e modificar esses sistema existe o nível externo, também chamado nível de
arquivos. Um propósito central de um sistema de banco de visão. Pode haver diferentes visões para um mesmo banco
Pagina 3
Banco de dados
Uma linguagem de manipulação de dados (DML) é uma Cliente_conta Conta
linguagem que permite aos usuários acessar ou manipular Cód_cli Cód_cc Cod_CC Saldo
Modelo Relacional
No modelo relacional os dados e os relacionamentos entre
os dados são representados por uma coleção de tabelas,
cada qual com um número de colunas. Para ilustrar isto,
considere um banco de dados composto de clientes e
contas.
Cliente
Cod_Cli Nome Rua Cidade Banco de Dados Cliente/Servidor
01 José Pio XI São Paulo Na arquitetura Cliente/Servidor o banco de dados fica
02 Maria São Francisco Recife
residente em um computador chamado servidor e suas
03 Gabriela do Sol Maceió
informações são compartilhadas por diversos usuários que
executam aplicações em seus computadores locais
(clientes). Essa arquitetura propicia uma maior integridade
dos dados, pois todos os usuários estarão trabalhando com a
mesma informação. A arquitetura Cliente/Servidor reduz
Pagina 4
Banco de dados
consideravelmente o tráfego de rede, pois retorna ao mas ainda assim disponível (via rede de comunicação) aos
usuário apenas os dados solicitados. Por exemplo, uma base usuários de outros locais. As vantagens dessa distribuição
de dados com cem mil registros, se for feita uma pesquisa são claras: combinam a eficiência do processamento local
que encontre apenas três registros, somente esses três (sem sobrecarga de comunicações) na maioria das
registros serão enviados pela rede para a máquina cliente. operações, com todas as vantagens inerentes aos bancos de
dados. Mas, naturalmente, também há desvantagens: podem
Bancos de Dados Distribuídos
ocorrer sobrecargas de comunicação, além de dificuldades
Um banco de dados distribuído é aquele que não é
técnicas significativas para se implementar esse sistema.
inteiramente armazenado em uma única localização física,
O objetivo principal em um sistema distribuído é o de que
estando disperso através de uma rede de computadores
ele pareça ser, ao usuário, um sistema centralizado. Isto é,
geograficamente afastados e conectados por elos de
normalmente o usuário não precisará saber onde se
comunicação. Como um exemplo bastante simplificado,
encontra fisicamente armazenada determinada porção dos
consideremos o sistema de um banco no qual o banco de
dados. Portanto, o fato de ser o banco de dados distribuído
dados das contas dos clientes esteja distribuído pelas
só deve ser relevante ao nível interno, e não aos níveis
agências desse banco, de tal forma que cada registro
externo e conceitual.
individual de conta de cliente se encontre armazenado na
agência local do cliente. Em outras palavras, o dado esteja
armazenado no local no qual é mais freqüentemente usado,
Pagina 5
2
O Modelo Relacional
Os primeiros sistemas de banco de dados se baseavam no Cliente ⇒ Relação ou tabela
modelo hierárquico ou no modelo em rede. Em junho de Código Nome Endereco ⇒ Atributo, coluna ou campo
1970 o Dr. E.F. Codd escreveu no artigo “Um Modelo 123 João Rua Pio XI
567 Maria Rua S. Francisco
Relacional de Dados para banco de dados compartilhados”
678 Joana Av. Liberdade ⇒ Tupla, linha ou registros
o que foi considerado o primeiro projeto de um modelo 876 Gabriela Av. Jatiúca
relacional para sistema de banco de dados. 976 Ana Júlia Av. São Paulo
O modelo de dados relacional representa o banco de dados O conjunto formado pelos atributos de uma relação é
como uma coleção de tabelas. Muito embora “tabelas” também chamado de Domínio.
envolvam noções simples e intuitivas, há uma
correspondência direta entre o conceito de tabela e o Álgebra Relacional
conceito matemático de relação. A álgebra relacional é um conjunto de operações realizadas
sobre relações. Cada operação usa uma ou mais relações
Nos anos seguintes à introdução do modelo relacional, uma
como seus operandos, e produz outra relação como
teoria substancial foi desenvolvida para os bancos de dados
resultado.
relacionais. Esta teoria auxilia na concepção de banco de
dados relacionais e no processamento eficiente das As operações tradicionalmente usadas na teoria dos
requisições de informação feitas pelos usuários do banco de conjuntos (união, interseção, diferença e produto
dados. cartesiano) podem também ser definidas em termos de
relação. Em todas, com exceção do produto cartesiano, as
Relação duas relações do operando têm que ser união-compatíveis,
Como o próprio nome diz, uma relação é a “matéria prima” isto é, elas devem possuir a mesma estrutura.
para a construção de toda a teoria do modelo relacional e,
A união de duas relações A e B é o conjunto de todas as
por conseqüência, é o alicerce teórico de todo sistema de
tuplas que pertencem a A ou B.
banco de dados baseado no modelo relacional.
A interseção de duas relações A e B é o conjunto de todas
Nos sistema de banco de dados relacionais as relações são
as tuplas que pertencem a A e B.
representadas através de tabelas. Uma tabela é geralmente
A diferença entre duas relações A e B (nessa ordem) é o
uma entidade identificada no processo de análise do sistema
conjunto de todas as tuplas que pertencem a A mas não a B.
que se está implementando.
O produto cartesiano de duas relações A e B é o conjunto
Uma tabela é constituída de linhas e colunas. Toda tabela
de todas as tuplas t tais que t é a concatenação de uma tupla
deve possuir um nome e um conjunto de atributos (ou
a de A com uma tupla b pertencente a B.
campos). As colunas que representam os atributos da tabela
devem também possuir um nome, juntamente com o tipo de
dado que será armazenado na coluna.
Pagina 7
3
A Linguagem SQL
Embora se fale que a linguagem SQL é uma linguagem de
Data Control Language (DCL)
consulta, essa linguagem possui outras capacidades além de
É o conjunto de comandos que fazem o cadastramento de
realizar consultas em um banco de dados. A linguagem
usuários e determina seu nível de privilégio para os objetos
SQL possui recursos para definição da estrutura de dados,
do banco de dados. Os principais comandos são: GRANT,
para modificar dados no banco de dados e recursos para
REVOKE.
especificar restrições de segurança e integridade.
originalmente chamada SEQUEL, foi implementada como das transações. Diversas implementações permitem o
parte do projeto System R no início dos anos 70. A trancamento explícito de dados para o controle de
linguagem SEQUEL evoluiu e seu nome foi mudado para concorrência. (COMMIT, ROLLBACK, SAVEPOINT)
Para evitar que em algum momento um campo de uma create table funcionario
(matricula decimal(5) NOT NULL PRIMARY KEY,
tabela possa conter valor nulo (null) deve-se utilizar a nome char(30) NOT NULL,
cláusula NOT NULL após a definição do campo. rg decimal(9) NOT NULL UNIQUE,
sexo char(1),
create table funcionario
depto decimal(5),
(matricula decimal(5) NOT NULL PRIMARY KEY,
endereço varchar(40),
nome char(30) NOT NULL,
cidade varchar(20) DEFAULT ‘São Paulo’,
rg decimal(9),
salario decimal(10,2) )
sexo char(1),
depto decimal(5),
endereço varchar(40), Evitando valores inválidos
cidade varchar(20), Existem situações onde um campo pode receber apenas
salario decimal(10,2) )
alguns determinados valores. Para que o valor de um campo
No exemplo acima, o preenchimento do campo nome será fique restrito a um determinado conjunto de valores, utiliza-
obrigatório. Caso o usuário se esqueça de preenche-lo, o se a cláusula CHECK.
SGBD apresentará uma mensagem de erro. create table funcionario
(matricula decimal(5) NOT NULL PRIMARY KEY,
Evitando valores duplicados nome char(30) NOT NULL,
rg decimal(9) UNIQUE,
Podem existir situações onde o valor armazenado em um
sexo char(1) CHECK( sexo in (‘M’, ‘F’) ),
campo de um registro deve ser único em relação a todos os depto decimal(5),
registros da tabela. Isto é, não pode haver dois registros endereco varchar(40),
cidade varchar(20) DEFAULT ‘São Paulo’,
com o mesmo valor para um determinado campo. salario decimal(10,2) CHECK(salario>350) )
No exemplo acima, caso o usuário atribua ao campo RG um definição do campo depto da tabela funcionario.
valor já existente em outro registro desta mesma tabela, o O campo depto da tabela funcionario é portanto uma chave
SGBD apresentará uma mensagem de erro. estrangeira e só será permitido armazenar valores que
estejam previamente cadastrado no campo codigo da tabela
Observação: departamento.
No Interbase é obrigatória a utilização da cláusula NOT
NULL juntamente com a cláusula UNIQUE.
Pagina 10
A Linguagem de Definição de Dados DDL
create table funcioário alter table T
(matricula decimal(5) NOT NULL PRIMARY KEY, drop A1,
nome char(30) NOT NULL, drop A2,
. . .
rg decimal(9) NOT NULL UNIQUE,
sexo char(1) CHECK( sexo in (‘M’, ‘F’), onde T é o nome de uma tabela e Ai é uma lista dos atributos a
depto decimal(5) REFERENCES departamento(codigo), serem removidos.
endereco varchar(40), Para alterar o nome de um atributo de uma tabela utiliza-se
cidade varchar(20) DEFAULT ‘São Paulo’,
salario decimal(10,2) CHECK(salario>350) )
a cláusula alter...to.
alter table T
Assim como na definição da chave primária, pode-se alter A1 to nA1,
alter A2 to nA2,
definir a chave estrangeira após a especificação de todos os . . .
campos da tabela. onde T é o nome de uma tabela, A é o nome do atributo a ter o
seu nome alterado para nA.
create table cliente
(matricula decimal(5) NOT NULL,
Exemplo:
nome char(30) NOT NULL,
rg decimal(9) NOT NULL UNIQUE, Alter table departamento
sexo char(1) CHECK(sexo in (‘M’, ‘F’)), Alter Codigo to dep_Codigo,
depto decimal(5), Alter Nome to dep_Nome
endereco varchar(40),
cidade varchar(20) DEFAULT ‘Sao Paulo’, Para alterar o tipo de um atributo utiliza-se a cláusula
primary key (matricula), alter...type.
FOREIGN KEY (depto) REFERENCES
departamento(codigo) ) alter table T
alter A1 type t1,
Removendo uma tabela alter A2 type t2,
. . .
Para remover uma relação de um banco de dados SQL, usa- onde T é o nome de uma tabela, A é o nome do atributo a ter o
se o comando DROP TABLE. O comando DROP TABLE seu tipo alterado para D.
Pagina 11
A Linguagem de Definição de Dados DDL
Pagina 12
5
Linguagem de
Manipulação de Dados
Aluno “Remover todos os alunos da terceira série A”
RA Nome Serie Turma Endereço delete from aluno
112121 Maria Pereira 2 A Rua Pio XII, 23 where serie = 3
123251 José da Silva 3 B Rua Direita, 45 and turma = ‘A’
321233 Rui Barros 1 B Rua Edson, 32
Alteração de registros
453627 Ivo Pitanga 3 A Praça Redonda, 34
Para alterar o valor de um campo de um determinado
Inserção de registros registro ou de registros que obedecem a determinada
Para inserir dados em uma tabela utiliza-se o comando condição utiliza-se a instrução UPDATE.
INSERT INTO onde são especificados os valores de cada
Suponha que o aluno José da Silva (ra=123251) será
campo do novo registro.
transferido para a quarta série.
Suponha que desejamos inserir um aluno com os seguintes update aluno
dados: set serie = 4
where ra = 123251
RA 123251
Nome José da Silva
Suponhamos agora que todos os alunos da terceira série B
Serie 3
Turma B serão transferidos para a quarta série.
Endereco Rua Direita, 45 update aluno
set serie = 4
insert into aluno
where serie = 3
values (123251, ‘José da Silva’, 3, ‘B’,
and turma = ‘B’
‘Rua Direita, 45’)
Consultando os dados
No exemplo acima, os valores são especificados na ordem
O principal comando da Linguagem de Manipulação de
na qual os campos foram definidos na tabela.
dados (DML) é o comando SELECT-FROM-WHERE.
Caso o usuário não se lembrar da ordem dos atributos, é
♦ A cláusula SELECT corresponde à projeção da álgebra
permitido que os atributos sejam especificados como parte
relacional. É usada para listar os campos desejados no
da instrução INSERT.
resultado de uma consulta.
insert into aluno(nome,ra,serie,endereco,turma)
values (‘José da Silva’, 123251, 3, ♦ A cláusula FROM corresponde ao produto cartesiano
‘Rua Direita, 45’, ‘B’)
da álgebra relacional. Na cláusula FROM são listadas
Remoção de registros todas as tabelas a serem utilizadas na consulta.
A remoção de registros de uma tabela é feita através da
♦ A cláusula WHERE corresponde à seleção da álgebra
instrução DELETE.
relacional. Consiste em um predicado (condição)
delete from T envolvendo atributos das tabelas que aparecem na
where P
cláusula FROM.
onde P representa um predicado (condição) e T representa uma
tabela. Uma típica consulta SQL tem a forma:
select A1, A2, A3, ...
“Excluir todos os alunos” from T1, T2, ...
delete from alunos where P
onde Ai representa os atributos, Ti as tabelas envolvidas na
consulta e P um predicado ou condição.
Linguagem de Manipulação de Dados
“Apresentar os alunos da terceira série” através da utilização da palavra DISTINCT após a cláusula
select Ra, Nome SELECT.
from aluno
select serie select DISTINCT serie
where serie = 3
from aluno from aluno
123251 José da Silva
2 2
453627 Ivo Pitanga
3 3
1 1
A condição (ou predicado) que segue a cláusula WHERE 3
pode conter operadores de comparação
A SQL permite o uso da palavra ALL para especificar
= Igual > maior < Menor
explicitamente que não queremos que as duplicações sejam
<> diferente >= maior ou igual <= menor ou igual
removidas.
e os operadores booleanos AND, OR e NOT.
select ALL serie
“Apresentar o RA e o Nome from aluno
dos alunos da terceira série B” 2
select ra, nome
3
1
from aluno
3
where serie = 3
and turma = ‘B’
Uma vez que a duplicação dos registros resultantes é o
123251 José da Silva
padrão, a utilização da cláusula ALL torna-se opcional.
A cláusula WHERE pode ser omitida e a lista de atributos
Ordenando o resultado de uma consulta
(A1, A2, ...) pode ser substituída por um asterisco (*) para
A linguagem SQL oferece uma maneira de controlar a
selecionar todos os campos de todas as tabelas presentes na
ordem que a resposta de uma consulta será apresentada. A
cláusula FROM.
cláusula ORDER BY permite ordenar o resultado de uma
“Apresentar todos os dados dos alunos” consulta.
select * SELECT A1, A2, ...
from aluno FROM r1, r2, ...
WHERE P
112121 Maria Pereira 2 A Rua Pio XII, 23 ORDER BY A1 [ASC/DESC],
123251 José da Silva 3 B Rua Direita, 45 A2 [ASC/DESC],
321233 Rui Barros 1 B Rua Edson, 32 ...
453627 Ivo Pitanga 3 A Praça Redonda, 34
Onde Ai, após a cláusula ORDER BY, são nomes de atributos
que servirão de parâmetros para o ordenamento do resultado da
“Apresentar todos os dados dos alunos da terceira série” consulta.
select * A cláusula ORDER BY permite ordenar as linhas do
from aluno
resultado da consulta em ordem crescentes ou decrescentes.
where serie = 3
Quanto utilizada, a cláusula ORDER BY sempre deve
123251 José da Silva 3 B Rua Direita, 45
453627 Ivo Pitanga 3 A Praça Redonda, 34 aparecer na última linha da consulta.
Pagina 14
Linguagem de Manipulação de Dados
“Apresentar a série e o nome do aluno em ordem select nome, serie, turma
decrescente da série e em ordem crescente de nome” from aluno
where serie = 3
select serie, nome
INTERSECT
from aluno
select nome, serie, turma
order by serie DESC, nome ASC
from aluno
3 Ivo Pitanga where turma = ‘B’
3 José da Silva
2 Maria Pereira José da Silva 3 B
1 Rui Barros
Para achar todos os alunos que cursam a segunda ou a
Operações de Conjunto terceira série:
A SQL inclui as operações UNION, INTERSECT e select nome, serie, turma
from aluno
MINUS.
where serie = 2
UNION
“Apresentar o nome dos aluno
select nome, serie, turma
que cursam a terceira série”
from aluno
select nome where serie = 3
from aluno
Maria Pereira 2 A
where serie = 3
José da Silva 3 B
Ivo Pitanga 3 A
“Apresentar o nome dos alunos
que estejam na turma B” Como padrão, a operação UNION elimina as linhas
select nome duplicadas. Para reter duplicações precisamos escrever
from aluno
UNION ALL no lugar de UNION.
where turma = ‘B’
Para encontrar todos os alunos que fazem a terceira série
Para achar todos os alunos que cursam a terceira série ou
mas não são da turma B podemos escrever:
que estejam na turma B podemos utilizar o seguinte
select nome
comando: from aluno
where serie = 3
select nome, serie, turma
minus
from aluno
select nome
where serie = 3
from aluno
UNION
where turma = ‘B’
select nome, serie, turma
from aluno Ivo Pitanga 3 A
where turma = ‘B’
Pagina 15
6
Predicados
Cliente select nome, cidade
from emprestimo, cliente
Codigo Decimal(5)
where cliente=cliente.codigo
Nome char(30) and agencia = ‘Ipiranga’
Endereco char(40)
Cidade char(20) A linguagem SQL utiliza conectivos lógicos and, or e not.
Código decimal(4)
ao invés de
Cidade char(20)
select numero
Ativos decimal(16,2)
from conta
where saldo >= 90000 and saldo <= 100000
“Apresentar o número da(s) conta(s) e o respectivo saldo
dos clientes que possuem empréstimo”
Da mesma forma, pode-se usar o operador de comparação
select conta.numero, saldo
NOT BETWEEN.
from emprestimos, conta
where emprestimo.cliente = conta.cliente A SQL inclui um operador de substituição de cadeia para
comparações em cadeias de caracteres. Os padrões são
Note que a SQL usa a notação relação.atributo para evitar
descritos usando dois caracteres especiais:
ambigüidade nos casos em que um atributo aparece no
esquema de mais de uma relação. Poderia ter sido escrito ♦ % (por cento) Substitui qualquer subcadeia
conta.saldo em vez de saldo na cláusula SELECT. No ♦ _ (sublinhado) Substitui qualquer caracter
entanto, uma vez que o atributo saldo aparece em apenas Os padrões são sensíveis à forma; isto é, os caracteres
uma das relações referenciadas na cláusula FROM, não há maiúsculos não substituem os caracteres minúsculos, ou
ambigüidade quando escrevemos apenas saldo. vice-versa. Para ilustrar a substituição de padrão, considere
Vamos entender a consulta anterior e considerar um caso os seguintes exemplos:
mais complicado no qual queremos também os clientes com ♦ ‘Jose%’ substitui qualquer cadeia começando com
empréstimos na agência Ipiranga: “Jose”;
“Apresentar o nome e a cidade dos clientes com ♦ ‘%ari%’ substitui qualquer cadeia contendo “ari” como
empréstimo na agência Ipiranga”
uma subcadeia, por exemplo, “Maria”, “Mariana”,
Para escrever esta consulta, devemos utilizar duas restrições
“Itaparica”;
na cláusula WHERE, conectadas pelo operador lógico
♦ ‘_ _ _’ substitui qualquer cadeia com exatamente três
AND.
caracteres;
Predicados
♦ ‘_ _ _ %’ substitui qualquer cadeia com pelo menos três select cliente
from emprestimo
caracteres.
where agencia = 38
Os padrões são expressos em SQL usando o operador de and cliente in
(select cliente
comparação LIKE. Considere a consulta:
from conta
where agencia = 38 )
“Apresentar os nomes de todos os clientes cujas ruas
possuem a subcadeia ‘Lima’ “
É possível escrever a mesma consulta de diversas formas
select nome
em SQL. Isto é benéfico, uma vez que permite a um usuário
from cliente
where endereco like “%Lima%” pensar sobre a consulta no modo que lhe aparenta ser mais
natural.
Para que os padrões possam incluir os caracteres especiais
% e _, a linguagem SQL permite a especificação de um No exemplo anterior, testamos membros de uma relação de
caractere de escape, representado por um caracter definido um atributo. É possível testar um membro em uma relação
Página 17
Predicados
definidas em uma subconsulta não são “enxergadas” por “Quais os clientes que possuem conta em alguma agência
onde o cliente de código 12345 tem conta”
subconsultas de nível superior. Se uma variável tupla é
select distinct C.cliente
definida tanto localmente em uma subconsulta quanto
from conta C, conta T
globalmente em uma consulta, a definição local prevalece. where C.cliente = 12345
Isto é análogo às regras usuais de alcance usadas para and C.agencia = T.agencia
variáveis em linguagens de programação. Quando Observe que não podemos usar a notação contas.agencia,
escrevemos expressões da forma relação.atributo, o nome uma vez que não estaria claro qual referência a contas é a
da relação é, de fato, uma variável tupla definida desejada.
implicitamente.
Um modo alternativo para expressar esta consulta é
As variáveis tupla são mais úteis para comparação de duas select distinct cliente
tuplas na mesma relação. from conta
where agencia in
(select agencia
from conta
where cliente = 12345)
Página 18
7
Comparação de Conjuntos
“Apresentar os nomes das agências que possuem ativos select nome
maior do que alguma agência localizada em São Paulo” from agencia
where ativos >all
select distinct T.nome
(select ativos
from agencia T, agencia S
from agencia
where T.ativos > S.ativos and
where cidade = “Sao Paulo”)
S.cidade = ‘Sao Paulo’
Uma vez que isto é uma comparação “maior que”, não Como na cláusula some, a SQL permite comparações <all,
podemos escrever a expressão usando a construção in. <=all, >=all, =all e <>all.
A SQL oferece um estilo alternativo para escrever a As construções in, >some, >all, etc; nos permitem testar um
consulta acima. A frase “maior do que algum” é valor simples contra membros de um conjunto. Uma vez
representado na SQL por >some. Esta construção permite que SELECT gera um conjunto de tuplas, podemos querer
reescrever a consulta em uma forma que se assemelha comparar conjuntos para determinar se um conjunto contém
intimamente à fórmula da nossa consulta em português. todos os membros de algum outro conjunto. Tais
comparações são feitas na SQL usando as construções
select nome
from agencia contains e not contains.
where ativos >some
(select ativos “Apresentar o código dos clientes que possuem conta em
from agencia todas as agências localizadas em São Paulo”.
where cidade = ‘Sao Paulo’)
Para cada cliente, precisamos ver se o conjunto de todas as
A primeira subconsulta exists testa se o cliente tem uma encontra todas as agências na qual S.nome_cliente possui
conta na agência Ipiranga. A segunda subconsulta exists uma conta. Assim, o SELECT externo pega cada cliente e
testa se o cliente tem um empréstimo na agência Ipiranga. testa se o conjunto de todas as agências de São Paulo menos
o conjunto de todas as agências nas quais o cliente tem uma
A não-existência de tuplas em uma subconsulta pode ser
conta, é vazio.
testada usando a construção not exists.
Página 20
8
Funções Agregadas
Clientes “Apresentar o saldo médio de conta em cada agência”
Nome_cliente char(30) select nome_agencia, avg(saldo)
Endereco char(40) from contas
Cidade char(20) group by agencia
♦ total: sum cláusula group by. Para expressar tal consulta usamos a
cláusula having. Os predicados na cláusula having são
♦ contar: count
aplicados depois da formação dos grupos, para que funções
As operações como a avg são chamadas funções agregadas
agregadas possam ser usadas.
porque operam em agregações de tuplas. O resultado de
select nome_agencia, avg(saldo)
uma função agregada é um valor único. Para ilustrar, from contas
Página 22
9
Visões
Uma visão (view) é uma tabela virtual cujo conteúdo é
definido por uma consulta ao banco de dados. A visão não é create view todos_clientes as
(select nome_agencia, nome_cliente
uma tabela física, mas um conjunto de instruções que from contas)
retorna um conjunto de dados. Uma visão pode ser union
(select nome_agencia, nome_cliente
composta por algumas colunas de uma única tabela ou por from emprestimos)
colunas de várias tabelas.
Nomes de visões aparecem em qualquer lugar que um nome
O uso de visões é particularmente útil quando se deseja dar
de relação possa aparecer. Usando a visão todos_clientes,
foco a um determinado tipo de informação mantida pelo
podemos achar todos os clientes da agência Ipiranga:
banco de dados. Imagine um banco de dados corporativo
select nome_cliente
que é acessado por usuários de vários departamentos. As from todos_clientes
informações que a equipe de vendas manipula certamente where nome_agencia = ‘Ipiranga’
Controlar o aceso ao banco de dados é uma das principais GRANT privilégio/ALL PRIVILEGES
ON objeto
tarefas que um administrador tem. Para realizar esse TO usuário1, usuário2,... /PUBLIC
[WITH GRANT OPTION]
controle, os bancos de dados contam com um mecanismo
privilégio nome do privilégio
que permite cadastrar um usuário. Cada usuário cadastrado
ALL PRIVILEGES todos os privilégios
recebe uma senha de aceso que precisa ser fornecida em
Objeto Geralmente tabela ou visão
diversas situações.
Usuário um determinado usuário
PUBLIC todos os usuários
Privilégios
WITH GRANT OPTION parâmetro opcional que permite
Um privilégio é uma autorização para que o usuário acesse que o usuário que recebe o privilégio possa concede-lo a outros
e manipule um objeto de banco de dados de uma certa usuários
a estrutura das tabelas e outros objetos. retirá-lo. O comando SQL responsável por essa tarefa é o
comando REVOKE.
Existem dois tipos de privilégio: os privilégios de sistema e
os privilégios de objetos. REVOKE [GRANT OPTION FOR] privilégio
ON objeto
Um privilégio de sistema é o direito ou permissão de FROM usuário1, usuário2,.../PUBLIC
executar uma ação em um tipo específico de objeto de GRANT OPTION FOR parâmetro opcional que retirar a
permissão de repassar o privilégio
banco de dados.
privilégio nome do privilégio
O privilégio de objeto é o direito de executar uma
ALL PRIVILEGES todos os privilégios
determinada ação em um objeto específico, como o direito
Objeto Geralmente tabela ou visão
de incluir um registro em uma determinada tabela. Os
Usuário um determinado usuário
privilégios de objeto não se aplicam a todos os objetos de PUBLIC Todos os usuários
banco de dados.
Def.
ATRIBUTO MONOVALORADO
é um atributo que possui um único
valor para uma mesma entidade
Exemplo: nome
UFU/FACOM Página 22
ER – Notação alternativa (min, max)
ER – Grau de Tipo-Relacionamentos
Def. GRAU DE UM TIPO-RELACIONAMENTO é o
número de tipos de entidade que participam.
Ex: relacionamentos de grau 2 (binário) e 3 (ternário)