Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
O conteúdo neste disposto, são somente trechos identificados como mais relevantes das obras citadas nas
referências bibliográficas, não tendo intuito de ser uma apostila para aprendizado, mas sim um material de
consulta e apontamentos apenas para identificação dos conteúdos vistos em sala para posterior estudo nas
obras indicadas.
APONTAMENTOS DA DISCIPLINA DE BANCO DE DADOS
Até o presente momento, seguindo os preceitos de disciplinas cursadas anteriormente, todo o
armazenamento dos dados dos programas desenvolvidos ficavam unicamente restritos a memória
RAM. É sabido que esta memória além de possuir restrições quanto ao espaço para armazenamento,
possui também a característica de volatilidade, fazendo assim com que os dados armazenados sejam
perdidos ao se desligar ou reiniciar o computador. É notório que em diversas situações temos a
necessidade de armazenar os dados de forma a não perdê-los tão facilmente como em um simples
desligamento do computador o qual pode acontecer até mesmo por fatores alheios a nossa vontade,
como um travamento no sistema operacional, falha de hardware, falta de energia elétrica e etc.
Atualmente para prover uma forma organizada e confiável de efetuar tal persistência de dados,
utilizamos de Sistemas de Gerenciamento de Banco de Dados (SGBDs).
DEFINIÇÕES INICIAIS
Banco de Dados: é uma coleção de dados que contém informações relevantes a uma
empresa.
Sistema Gerenciador de Banco de Dados (SGBD) é uma coleção ou conjunto de
programas para manipular esses dados.
Sistema de Banco de Dados: é a união da coleção armazenada de dados relevantes a uma
empresa com os programas responsáveis por efetuar a manipulação destes dados.
Objetivos de um SGBD:
 Fornecer mecanismos para gerenciar informações de bancos de dados, conveniente e
eficientemente.
 Gerenciar grandes blocos de informações.
 O gerenciamento envolve definição de estruturas para armazenamento, mecanismos para
manipulação, garantias de segurança contra falhas e contra acessos indevidos.
 Fornecer uma visão abstrata dos dados, ocultando certos detalhes de como os dados são
armazenados, com intuito de facilitar o desenvolvimento de sistemas mais complexos.
Exemplos de SGBDs: MySQL e Oracle Database mantidos pela Oracle Corporation,
MariaDB Mantido pela MariaDB Community, Firebird mantido pela Firebird Project, Paradox
Corel Corporation, Interbase mantido pela Embarcadero, PostgreSQL mantido pela PostgreSQL
Development Group, SQL Server da Microsoft, DB2 e Informix da IBM, Advantage Database
Server (ADS) da Sybase.
Nos primórdios da computação, momento em que não haviam ainda os SGBDs como os
conhecemos hoje, a mesma necessidade de persistência de dados foi identificada, e a partir daí
surgiram ideias e consequentes implementações que visavam sanar tal deficiência. A mais relevante
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
1-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
destas , consistia no salvamento de dados através da utilização de arquivos de sistema operacional.
Problemas deste tipo de SGBD baseado em arquivos de Sistema Operacional:
 Redundância e inconsistência;
 Dificuldade de acesso aos dados;
 Isolamento de dados;
 Problemas de integridade;
 Problema de atomicidade;
 Acesso concorrente;
 Problemas de segurança.
ABSTRAÇÃO DE DADOS
Nivel Físico: Possui um nível mais baixo de abstração, que descreve como os dados são
realmente armazenados, ou seja, as estruturas de dados complexas de baixo nível.
Nível Lógico: Nível logo mais alto que o físico, descreve que dados estão armazenados e
que relações existem entre eles. Utilizado por administradores de banco de dados (DBAs) a fim de
decidir que informações armazenar.
Nível View ou visão do usuário: Nível mais alto de abstração que descreve apenas parte de
um banco de dados. Faz-se necessário pois mesmo existindo o nível lógico, este ainda apresenta
muitas informações das quais determinados usuários podem não ter necessidade. O sistema pode
fornecer muitas visões para o mesmo banco de dados.
Esquema: Projeto geral do banco de dados;
Instância: Coleção das informações armazenadas no banco de dados em determinado
momento, ou seja, uma espécie de “retrato” da situação atual do banco de dados.
Os sistemas de banco de dados possuem vários esquemas particionados de acordo com os
níveis de abstração: esquema físico (Nível físico), esquema lógico (Nível lógico) e subesquemas
para nível de visão.
MODELOS DE DADOS
Um modelo de dados oferece uma maneira de descrever o projeto de um banco de dados em
diferentes níveis de acordo com a necessidade. São vistos como uma coleção de ferramentas
conceituais usadas para descrever dados, suas relações, semântica e restrições. Ou uma coleção de
conceitos que podem ser usados para descrever a estrutura de um banco de dados.
MODELO RELACIONAL:
Um modelo de nível lógico, o qual utiliza uma coleção de tabelas para representar os dados
e as relações entre eles. Este modelo baseado em registros é considerado o principal modelo de
dados para aplicações comerciais, sendo a maioria dos sistemas de banco de dados atuais baseados
neste modelo.
Neste modelo as colunas da tabela correspondem aos atributos de tipo.
MODELO ENTIDADE/RELACIONAMENTO:
Modelo conceitual, formados por uma coleção de objetos básicos chamados “Entidades” e
suas “relações”. Uma entidade é uma “coisa” ou “objeto” no mundo real que é distinguível dos
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
2-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
outros objetos. Fortemente empregado no projeto de banco de dados.
MODELO DE DADOS BASEADO EM OBJETOS.
Modelo conceitual. Pode ser visto como uma extensão do modelo E/R com maior apelo ao
paradigma de orientação a objetos, utilizando encapsulamento, métodos e identidade de objetos.
MODELO DE DADOS SEMI-ESTRUTURADO:
Um modelo que se opõe aos modelos de dados anteriores. XML é utilizado para representar
tais tipos de dados.
MODELO RELACIONAL
Considerado um modelo de grande simplicidade e eficiência, devido a isso, acaba por ser o
mais empregado em SGBDs para aplicações comerciais gerais.
Estrutura dos Bancos de dados relacionais:
 Consiste em uma coleção de tabelas, cada uma com um nome único atribuído.
 Cada linha na tabela representa uma relação entre um conjunto de valores.
 Os cabeçalhos (nome das colunas) são denominados atributos e cada cabeçalho deve possuir
um nome único dentro da tabela.
 Cada atributo possui um conjunto de valores permitido, que é o domínio deste atributo.
 Uma tabela com 3 (três) atributos é composta por 3 (três) domínios diferentes e cada linha
então deve ser formada por 3 valores segundo o domínio.
“Os matemáticos definem relação como sendo um subconjunto de um produto cartesiano de
uma lista de domínios”
Termos tabela, linha e Coluna normalmente são substituídos por Relação, Tupla e Atributo
respectivamente.
Uma tabela de N atributos precisa ser um subconjunto de D1 X D2 X...X DN
A ordem que as tuplas aparecem na relação, é irrelevante, já que a relação é um conjunto de
tuplas, assim, duas relações são as mesmas se possuírem o mesmo conjunto de tuplas em ordem
qualquer.
Fazendo uma comparação um tanto superficial do modelo relacional com a linguagem de
programação estudada até o momento, podemos dizer que uma relação é similar a criação de uma
variável, já o esquema de relação simboliza uma definição de tipo em nossa linguagem de
programação.
Em geral, um esquema de relação consiste em uma lista dos atributos e seus domínios
correspondentes e uma relação é instanciada a partir do esquema de relação criado.
Atenção, para melhor padronização da escrita de relações e de esquemas de relações
devemos:
 Usar nomes em letras minúsculas para relações.
 Nomes iniciando com uma letra maiúscula para esquemas de relação
Exemplo de Esquema de relação denominado Esquema_conta e de relação denominado conta:
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
3-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
Esquema_conta = (numero_conta, nome_agencia, saldo);
conta(Esquema_conta);
Na maioria dos casos, para desenvolver a estrutura de um banco de dados, necessitamos
criar mais de um esquema de relação diferente, cada um com a finalidade de armazenar dados
referentes ao mesmo conjunto, ou seja, dados que juntos sejam capazes de identificar ou representar
atributos de algo. Muitas vezes somos tentados a criar um esquema geral, que acabe por englobar
todos os atributos identificados no levantamento de atributos do banco de dados, mas este
procedimento deve ser minuciosamente analisado, pois, na maioria das vezes acaba sendo
necessário inserir itens imutáveis em toda inserção de nova tupla o que pode acarretar em
redundância, inconsistência e desperdício de espaço de armazenamento em nosso banco de dados.
CHAVES
É preciso ter uma maneira de especificar como as tuplas dentro de uma determinada relação
são distinguidas. Isto é expresso em termos de seus atributos. Assim, nenhum par de tuplas em uma
relação pode ter exatamente o mesmo valor para todos os atributos.
Analisar todas as combinações de pares de tuplas possíveis em uma relação é uma ação
bastante custosa. Para diminuir este consumo desnecessário de recursos e visando a otimização do
sistema, a utilização de chaves, principalmente a primária, faz-se necessária.
Superchave: é um conjunto de um ou mais atributos que, tomados coletivamente, nos
permite identificar unicamente uma tupla na relação. Porém este conceito não nos auxilia com a
redução no consumo de recursos necessários, visto que se K é uma superchave, então também será
uma superchave qualquer superconjunto de K. Assim, temos interesse maior em superchaves
mínimas, denominadas chaves candidatas ou chave primária (primary key).
Uma chave primária é uma propriedade da relação como um todo e não da tupla
individualmente.
Para a criação da chave primária não se deve escolher atributos que possam ser repetidos ou
que venham a sofrer mudanças, desta forma nenhum par de tuplas da relação pode ter o mesmo
valor nos atributos da chave primária ao mesmo tempo.
A designação de uma chave primária representa uma restrição constante na empresa real
sendo modelada, por isso devem ser escolhidas com cuidado e observado para atender as regras de
negócio desta empresa sem infligi-las.
Por padrão, os atributos de chave primária de um esquema de relação devem ser listados
primeiro e receberem o sublinhado.
Exemplo de Esquema de relação com identificação de chave primária:
Esquema_conta = (numero_conta, nome_agencia, saldo);
Existem duas categorias de chave primária:
Natural: formada por um ou mais atributos que fazem parte do negócio modelado.
Artificial: Atributo que não representa nenhuma propriedade do negócio.
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
4-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
Um exemplo de chave primária natural em um projeto de banco de dados voltado a cadastro
de clientes de um banco, poderia ser a utilização de um dado pessoal do cliente como o CPF. Já uma
chave primária artificial poderia ser obtida inserindo um código auto-incrementado, gerado pelo
próprio banco de dados.
CHAVE ESTRANGEIRA:
Uma relação R1, pode incluir dentre seus atributos a chave primária de outra relação R2,
esse atributo é denominado Chave Estrangeira (Foreign Key). R1 então é denominada relação
referenciadora e R2 relação referenciada.
Em qualquer instância do banco de dados, dado qualquer tupla da relação referenciadora
deverá haver alguma tupla na relação referenciada tal que o valor do atributo de chave estrangeira
seja igual à chave primária da referenciada.
DIAGRAMA DE ESQUEMAS:
Para demonstrar esquemas de relações utilizamos o diagrama de esquemas devido a sua
simplicidade e agilidade de diagramação. É um diagrama bastante superficial, responsável apenas
por identificar nome de relações e atributos, e quais destes últimos são chaves primária e
estrangeira, além de demonstrar os relacionamentos. Consistem em uma representação gráfica dos
esquemas a serem criados no banco de dados.
Vantagens:
 Rápida construção;
 Simples entendimento;
 Muitas ferramentas permitem a geração de boa parte do banco de dados, apenas utilizando
do diagrama de esquemas;
Desvantagens:
 Estrutura muito superficial;
 Não indica exatamente os itens que serão constados como chave estrangeira;
______________________________________________________________________________
EXERCÍCIOS:
1. Qual a utilidade da chave primária?
2. Por que uma chave candidata não é considerada útil na implementação de um banco de
dados?
3. De que forma a chave primária ajuda a reduzir o processamento em operações de consulta?
4. Por que endereço, nome, nome da mãe, são exemplos de atributos que não devem ser
indicados como chave primária?
_______________________________________________________________________________
INTRODUÇÃO A LINGUAGEM SQL (Structured Query Language)
SQL é uma linguagem primordialmente voltada a consultas, porém permite fazer muito mais
do que simplesmente consultas a dados. Foi desenvolvida inicialmente pela IBM na década de 1970
e chamava-se Sequel, porém, a partir de 1986 deu-se inicio a sua padronização pelo ANSI
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
5-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
(American National Stardards Institute) e sua nomenclatura acabou sendo modificada. Esta
linguagem é divida em várias partes como: Linguagem de definição de dados (DDL), Linguagem de
manipulação de dados (DML), integridade, definição de visões, controle de transação, SQL
embutida e SQL dinâmica, Autorizações.
LINGUAGEM DE DEFINIÇÃO DE DADOS (DDL – DATA DEFINITION LANGUAGE)
A DDL permite a especificação não só de um conjunto de relações, mas também de
informações sobre cada relação, como atributos, seus nomes e domínios
Tipos básicos:
CHAR(n) ou CHARACTER(n): define uma string de caracteres de tamanho fixo n.
VARCHAR(n): define uma string de caracteres de tamanho variável até o tamanho
máximo n.
INT ou INTEGER: define um número inteiro.
SMALLINT: um inteiro pequeno.
NUMERIC(p,d): número de ponto fixo com precisão especificada pelo usuário, com p
dígitos totais incluindo um sinal e d dígitos a direita da vírgula.
REAL, DOUBLE PRECISION: números de ponto flutuante e dupla precisão.
FLOAT(n): número de ponto flutuante com precisão de pelo menos n dígitos.
DATE: Formato com herança de string, na verdade o formato DATE é um string contendo
10 (dez) caracteres e formatação predefinida YYYY-MM-DD. Esta espécie de máscara
pode variar de acordo com configurações do Sistema Operacional e também do SGBD.
TIME: Similar ao tipo DATE, porém com apenas 8 (oito) caracteres e máscara padrão
HH:MM:SS.
Observação: Dependendo o SGBD adotado, comparações entre atributos do tipo CHAR e
VARCHAR podem não retornar corretamente. Tipos como DATE e TIME podem variar sua
máscara padrão de acordo com o idioma adotado pelo Sistema Operacional ou pelo SGBD.
DEFINIÇÃO BÁSICA DE RELAÇÕES (ESQUEMAS):
Uma relação é definida a partir do comando CREATE TABLE, e após isto se deve passar
como parâmetro cada atributo, aqui nomeado com a letra A e o domínio (tipo de dado) ao qual este
atributo estará relacionado. Ao final deve-se explicitar as restrições de integridade, caso existam.
Exemplo:
CREATE TABLE <nome_relação> (A1 D1,
A2 D2,
<restrição de integridade 1>,
...
<restrição de integridade N>);
Podemos efetuar a exclusão de uma relação já criada através do comando DROP TABLE.
Deve-se compreender que devido a este comando excluir toda a relação, os dados presentes nesta
também serão excluídos.
DROP TABLE <nome_relação>;
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
6-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
Além da criação e exclusão de relações, em determinados momentos possuímos a
necessidade de efetuar modificações na estrutura de alguma relação já criada, seja por mudança na
regra de negócio, melhor adequação a esta ou mesmo por falha/esquecimento no momento da
criação desta relação. Para evitar que seja necessário efetuar a exclusão desta relação, o que
resultaria na consequente exclusão de dados já inseridos nesta, podemos utilizar de um comando
pertencente a DDL que efetua a inserção e remoção de atributos de uma relação, respectivamente:
ALTER TABLE <relação> ADD <atributo> <domínio>;
ALTER TABLE <relação> DROP <atributo>;
Mais a frente veremos o comando ALTER TABLE de forma avançada, o que nos permitirá
não somente adicionar atributos, como também manipular restrições.
RESTRIÇÕES MAIS COMUNS:
Chave primária (Primary Key):
Indica quais atributos formarão a chave primária da relação. É necessário que estes atributos
sejam não nulos e únicos e não sofram mudanças.
Chave estrangeira (Foreign Key):
Deve corresponder aos valores dos atributos de chave primária de alguma tupla da relação
referenciada. Sem essa restrição é possível que um campo (atributo) seja especificado em desacordo
com uma tabela a qual deveria restringir domínios;
Existe uma forma de permitir que determinados atributos não possuam valores nulos, ou
seja, utilizando a cláusula NOT NULL excluímos o valor nulo do domínio do atributo. No exemplo
abaixo, o atributo A1 não permite que o usuário deixe este valor nulo no momento da inclusão de
um novo registro (tupla) ou na atualização de um já existente, porém, por não possuir o parâmetro
NOT NULL, o atributo A2 o permite.
Exemplo:
CREATE TABLE <nome_relação> (A1 D1 NOT NULL,
A2 D2,
PRIMARY KEY(A1),
FOREIGN KEY(A2) REFERENCES
<relação_referenciada> (<atributo_referenciado);
Por padrão a SQL não permite que instruções de atualização de banco de dados efetuem a
violação de uma restrição de integridade, assim no momento que houver uma tentativa disso, a SQL
acusará um erro e impedirá a atualização.
LINGUAGEM DE MANIPULAÇÃO DE DADOS (DML – DATA MANIPULATION
LANGUAGE)
A DML é responsável por efetuar operações sobre os dados presentes ou a serem inseridos
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
7-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
nas relações.
Para inserir elementos em uma relação devemos utilizar o comando INSERT INTO,
indicando ao menos qual relação será afetada e quais os valores a serem inseridos.
INSERT INTO <relação> (A1,...An) VALUES (v1,..., vn);
OU
INSERT INTO <relação> VALUES (v1,..., vn);
No primeiro caso, é necessário que se passe explicitamente, logo após o nome da relação,
quais os atributos que serão inseridos, e após a palavra VALUES, quais os valores EM ORDEM
para cada atributo explicitado anteriormente. No segundo caso, por não explicitar quais atributos
serão objeto de inserção, o SGBD admite que TODOS deverão possuir um valor de entrada, assim,
após a palavra VALUES o usuário deverá passar os valores para TODOS os atributos da relação a
ser modificada, observando a ordem de criação de tais atributos.
O comando DELETE tem como objetivo efetuar a exclusão de tuplas de uma relação, mas
mantendo o esquema de relação. O comando DELETE também comporta o teste condicional
advindo da inserção da cláusula WHERE, a qual será explicada mais adiante durante o tópico
referente a consultas em SQL. Caso o comando DELETE não seja seguido de uma cláusula
WHERE que restrinja as tuplas a sofrerem a exclusão, TODAS as tuplas da relação selecionada
serão excluídas, ou seja, todos os dados armazenados nesta tabela.
DELETE FROM <nome_relação>;
A DML ainda conta com um comando para efetuar a alteração em dados já anteriormente
inseridos em uma relação. O comando UPDATE atualiza o valor de determinado atributo de uma
relação que satisfaça uma condição presente na cláusula WHERE, para um valor passado como
parâmetro pelo usuário;
UPDATE <nome_relação> SET <atributo> = <valor> WHERE <condição>;
ESTRUTURA BÁSICA DAS CONSULTAS SQL:
Para efetuar uma consulta SQL, necessitamos basicamente de 3 (três) cláusulas, SELECT,
FROM e WHERE, sendo esta última opcional.
SELECT: utilizado para listar os atributos desejados no resultado de uma consulta;
FROM: lista das relações a serem acessadas pela consulta;
WHERE: predicado envolvendo atributos da relação na cláusula FROM.
Um comando adicional ORDER BY pode ser utilizado ao final de toda a estrutura da
consulta com finalidade de apresentar os dados em ordem crescente <ASC> ou decrescente
<DESC> segundo determinado(s) atributo(s). Caso esta cláusula seja omitida, por padrão os dados
serão exibidos em ordem crescente segundo o atributo mais importante.
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
8-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
A consulta toma como entrada a(s) relação(ões) listada(s) na cláusula FROM, opera sobre
ela(s) de acordo com SELECT e WHERE e depois produz uma relação temporária semelhante a(s)
relação(ões) inicial(ais) como resultado. Assim a(s) relação(ões) base permanece(m) inalterada(s).
O operador * (asterisco), quando posicionado entre as cláusulas SELECT e FROM, indica
que deverão ser selecionados todos os campos (atributos) desta relação. Desta forma não temos a
necessidade de listar todos os atributos, um a um que deverão fazer parte da relação resultante, o
que economiza tempo, facilita a digitação, evita erros e melhora a leitura da instrução.
Consulta sobre uma única relação:
Estrutura de uma consulta.
SELECT <atributo> FROM <relação> WHERE
<teste_condicional> ORDER BY <atributo> ASC/DESC;
Em alguns casos, podemos listar elementos repetidos em relações. A SQL normalmente trata
uma relação como um multiconjunto, assim tuplas duplicadas podem aparecer mais de uma vez em
uma rabela e no resultado de uma consulta. Estes resultados duplicados não são eliminados
automaticamente devido:
 Ser uma operação dispendiosa, pois envolve os passos de classificar os dados,
identificar e eliminar tuplas duplicadas.
 O usuário pode realmente querer ver as tuplas duplicadas.
Para forçar a eliminação das duplicatas, inserimos a palavra DISTINCT após SELECT.
SELECT DISTINCT <atributo> FROM <relação>;
A SQL permite a utilização de operadores aritméticos + (adição), - (subtração), *
(multiplicação), / (divisão), operadores lógicos AND, OR, NOT e operadores de comparação >, <,
>=, <=, <>. = Todos estes são frequentemente utilizados dentro de pesquisas SQL.
SELECT <atributos> FROM <relação> WHERE <atributo> > 10;
Para simplificar o desenvolvimento de expressões onde existam margem mínima e máxima
para se efetuar uma consulta, utilizamos a função BETWEEN. Esta função especifica que o valor
procurado deve estar posicionado entre dois outros valores, suprimindo assim a necessidade de
digitar os operadores >= e =<. Assim para efetuar uma consulta em uma relação denominada
PRODUTO, a fim de listar a descrição dos produtos com quantidade em estoque entre 10 e 100
unidades teríamos:
SELECT DescProduto FROM PRODUTO WHERE QntdProduto
>= 10 AND QntdProduto <= 100;
OU
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
9-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
SELECT DescProduto FROM PRODUTO WHERE QntdProduto
BETWEEN 10 AND 100;
Consulta sobre múltiplas relações:
A consulta sobre múltiplas relações toma por base os mesmos princípios adotados na
consulta sobre relações individuais.
SELECT <atributo1, atributo2, atributoN> FROM <relação, relação2, relaçãoN>;
Deve-se observar que a utilização da cláusula FROM isolada, define um produto cartesiano
das relações listadas.
Caso haja o mesmo nome de atributo em mais de uma relação referenciada por FROM, é
necessário especificar explicitamente antes do atributo a qual relação este pertence.
SELECT <R1.A1, R2.A1> FROM R1, R2;
NATURAL JOIN: Fornece o mesmo resultado da realização de um produto cartesiano
restrito através da cláusula WHERE. Para que este comando funcione corretamente, ele necessita
que somente os atributos a serem comparados, ou seja, chave primária da relação referenciada e
chave estrangeira da relação referenciadora, tenham nomes idênticos.
SELECT <atributo1, atributo2: FROM <relação1> NATURAL JOIN <relação2>;
ESPECIFICAÇÕES E RESTRIÇÕES DE ATRIBUTOS
Cláusula DEFAULT:
Empregada durante a criação de atributos no momento da especificação da relação
(CREATE TABLE). Descreve que um determinado valor padrão será setado ao atributo caso no
momento da inserção de dados este não seja fornecido pelo usuário.
Cláusula CHECK:
Responsável por verificar no momento da inserção ou atualização de dados, se determinado
atributo satisfaz a condição preestabelecida por este.
CREATE TABLE <nome_relação>(
A1 D1 NOT NULL,
A2 D2 DEFAULT <valor>,
A3 D3 CHECK(A3 <condição>),
<restrições_de_integridade>);
Criação de Domínios (DOMAIN)
Além da possibilidade de especificar o tipo de dado para cada atributo individualmente,
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
10-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
pode-se utilizar a declaração de um domínio e seu nome utilizado como propriedade de atributos.
Isto facilita o entendimento, padronização e consequentemente a manutenção de banco de dados.
CREATE DOMAIN <nome_domínio> AS <tipo>;
Infelizmente o SGBD MySQL na versão 5.5.35 a qual foi escolhida para o desenvolvimento
da disciplina, não dá suporte a criação de domínios (DOMAIN) e a cláusula CHECK mesmo sendo
suportada, não efetua realmente o teste necessário, estando presente neste SGBD unicamente para
efeito de compatibilidade com bancos de dados criados por outros SGBDs. Talvez em versões
posteriores tais ferramentas possam ser implementadas e estarem presentes neste.
VALORES NULOS:
Utilizamos NULL para representar valores faltantes, o que pode assumir uma das seguintes
condições:
 Valor Desconhecido: Data de nascimento de uma pessoa pode não ser conhecida;
 Valor indisponível ou retido: Uma pessoa possui um telefone mas omite seu número;
 Atributo não aplicável: Valor do atributo cônjuge NULL para pessoa solteira;
Valores nulos apresentam problemas especiais nas operações relacionais:
Operações aritméticas ( + - * / ): O resultado será nulo se qualquer um dos valores de
entrada for nulo;
Comparações (>, <, >=, <=, =, <>): A SQL trata como UNKNOW (desconhecido) o
resultado de qualquer comparação feita envolvendo um valor nulo.
Operações lógicas: Para casos onde existam operações lógicas envolvendo valores nulos, a
SQL utiliza uma lógica de três valores, sendo eles TRUE, FALSE e UNKWNOW;
AND
TRUE
FALSE
UNKNOWN
TRUE
TRUE
FALSE
UNKNOWN
FALSE
FALSE
FALSE
FALSE
UNKNOWN
UNKNOWN
FALSE
UNKNOWN
OR
TRUE
FALSE
UNKNOWN
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
UNKNOWN
UNKNOWN
TRUE
UNKNOWN
UNKNOWN
NOT
TRUE
FALSE
FALSE
TRUE
UNKNOWN
UNKNOWN
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
11-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
A SQL permite consultas para verificar se um valor de atributo é nulo (IS NULL) ou não (IS
NOT NULL)
SELECT * FROM CLIENTES WHERE
Telefone IS NULL;
OU
SELECT * FROM CLIENTES WHERE
Telefone IS NOT NULL;
RESTRIÇÕES DE CHAVE E INTEGRIDADE REFERENCIAL:
Cláusula UNIQUE
Especifica uma chave secundária sendo possível sua utilização diretamente a frente do
atributo, caso este seja único.
Note que uma coluna que seja especificada como chave primária também deve ser única,
porém um atributo definido como UNIQUE pode não ser ou mesmo não fazer parte de uma Chave
Primária. É possível definir várias restrições UNIQUE em uma mesma relação.
Integridade referencial é especificada por meio da cláusula FOREIGN KEY. Esta
integridade pode ser violada quando tuplas são inseridas ou excluídas ou quando um valor de chave
primária ou estrangeira é modificado.
Por padrão, a SQL rejeita a operação que produza tal violação e esta ação é denominada
RESTRICT. Porém, podemos modificar este comportamento padrão através da inclusão de
cláusulas de tratamento de violação de integridade referencial, sendo elas:
SET NULL: Atualiza o campo da chave estrangeira para um valor nulo (NULL), caso o
item de chave primária da relação referenciada seja atualizado ou excluído.
SET DEFAULT: Possui comportamento semelhante ao SET NULL, porém atualiza o
campo de chave estrangeira para um valor predefinido.
CASCADE: Modifica o valor para os atributos de chave estrangeira de referência para o
novo valor atualizado na chave primária da relação referenciada.
ON DELETE: na exclusão
ON UPDATE: na atualização
As cláusulas SET NULL, SET DEFAULT e CASCADE indicam a ação a ser realizada, já as
cláusulas ON DELETE e ON UPDATE indicam o momento em que esta ação deverá ser realizada.
AUTO_INCREMENT
Controla o incremento em campos de chave primária e não faz parte da SQL padrão, sendo
então um comando próprio do SGBD MySQL. Outros SGBDs utilizam formas diferentes desta
porém com a mesma finalidade.
Cuidado, ao excluir tuplas este campo continua seu incremento sem reajustar seus valores,
sendo então desaconselhável sua utilização em campos que possam gerar sequencias muito grandes
em tipos de dados que não sejam capazes de suportá-las, como o caso de SMALLINT.
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
12-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
ALTER TABLE AVANÇADO:
Como visto anteriormente, o comando ALTER TABLE permite fazer modificações na
estrutura de uma relação (tabela). Normalmente este comando acaba por ser muito utilizado
principalmente para a criação de restrições, permitindo maior controle sobre estas, como por
exemplo a criação de “nomes” individuais, o que permite maior controle e facilidade para
manutenção das mesmas.
Adicionar/Remover Atributo:
ALTER TABLE <Tabela> ADD <Atributo> <Tipo>;
ALTER TABLE <Tabela> DROP <Atributo>;
Renomear Tabela
ALTER TABLE <Tabela> RENAME <Novo_Nome>;
Modificar Tipos
ALTER TABLE <Tabela> MODIFY COLUMN <Atributo> <Novo_Tipo> <Restrição>;
Restrições:
ALTER TABLE <Tabela> ADD CONSTRAINT <Nome_Restrição> <Restrição>;
ALTER TABLE <Tabela> DROP CONSTRAINT <Nome_Restrição>;
Chave Primária:
ALTER TABLE <Tabela> ADD CONSTRAINT <Nome_Restrição>
PRIMARY KEY (<Atributo>);
ALTER TABLE <Tabela> DROP CONSTRAINT <Nome_Restrição>
ALTER TABLE <Tabela> ADD PRIMARY KEY;
Chave Estrangeira
ALTER TABLE <Tabela> ADD CONSTRAINT <Nome_Restrição>
FOREIGN KEY (<Atributo>) REFERENCES
<Tabela> (<Atributo>);
ALTER TABLE <Tabela> DROP CONSTRAINT <Nome_Restrição>;
OU (MySQL)
ALTER TABLE <Tabela> DROP FOREIGN KEY <Nome_Restrição>;
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
13-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
Chave secundária
ALTER TABLE <Tabela> ADD CONSTRAINT <Nome_Restrição>
UNIQUE (<Atributos>);
SUBCADEIAS E OPERADORES:
A SQL possui operadores com finalidade específica para efetuar comparações apenas sobre
partes de uma cadeia de caracteres, sendo eles:
LIKE: responsável por indicar a operação que será realizada sobre determinada subcadeia
(substring).
%: Substitui um número qualquer de caracteres, de zero até a quantidade máxima suportada
pela cadeia completa.
_ (Underline ou sublinhado): Substitui um único caractere.
CRIAÇÃO DE APELIDOS (ALIAS):
A criação de apelidos é útil para auxiliar-nos na tarefa de evitar ambiguidade e
principalmente para agilizar a digitação através da substituição de nomes extensos por apelidos
mais compactos. Para isso, basta dentro da cláusula FROM informar o nome real da relação seguido
da cláusula AS e por fim o apelido adotado.
SELECT F.Nome, F.Bonus, C.Salario FROM
FUNCIONARIO, AS F, CARGO AS C WHERE
F.Codcargo = F.Codcargo;
Os apelidos podem ser utilizados também para melhor apresentar um campo ao usuário,
alterando somente para efeito de visualização o nome padrão de um atributo, por um nome
parametrizado durante o SELECT;
SELECT Nome AS NomeCompleto FROM FUNCIONARIO;
FUNÇÕES DE AGREGAÇÃO EM SQL:
Usadas para resumir informações de várias tuplas em uma síntese de tupla única.
COUNT(<atributo>) Retorna o número de tuplas ou valores.
SUM(<atributo>) Efetua a soma dos valores dos atributos de todos os elementos
pertencentes a relação resultante.
Similarmente a SUM(), temos as funções MAX(), MIN() e AVG() que retornam o valor
máximo, valor mínimo e média aritmética dos valores dos atributos de todos os elementos
pertencentes a relação resultante, respectivamente.
SELECT COUNT(<atributo>), SUM(<atributo>),
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
14-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
MAX(<atributo>), MIN(<atributo>),
AVG(<atributo>) FROM <relação>;
AGRUPAMENTO:
Cláusula GROUP BY:
Aplicada em casos de funções de agregação a subgrupos de tuplas de uma relação a qual os
subgrupos são baseados em algum valor de atributo. Assim, é executado então o particionamento da
relação em subconjuntos de tuplas. Cada grupo consistirá em tuplas que possuam o mesmo valor de
determinados atributos denominados atributos de agrupamento.
SELECT <atributo> FROM <tabela> GROUP BY <atributo_de_agrupamento>;
OUTRAS FUNÇÕES SQL:
Para apresentar os dados do tipo CHAR/VARCHAR de forma padronizada de caixa
alta/baixa (maiúsculas/minúsculas) existem as funções UCASE() e LCASE() respectivamente.
SELECT UCASE(DescProduto FROM PRODUTO;
SELECT LCASE(DescProduto) FROM PRODUTO;
Em determinados momentos necessitamos saber o comprimento de determinada string
existente em um atributo, para isso utilizamos da função LENGH().
SELECT DescProduto AS DESCRIÇÃO,
LENGTH(DescProduto) AS TAMANHO_STRING
FROM PRODUTO;
TRIGGERS (GATILHOS):
Triggers ou gatilhos são utilizados para especificar ações automáticas que o sistema de
banco de dados realizará quando determinados eventos e condições ocorrerem. Eles fazem parte de
uma categoria específica denominada “Bancos de Dados Ativos”.
Todo trigger deve receber um nome para que seja possível removê-lo ou desativá-lo
posteriormente.
Um trigger típico é formado por 3 (três) componentes:
1. EVENTO: Operações de atualização no banco de dados, aplicadas explicitamente a ele. Ao
escrever um trigger é preciso garantir que todos os eventos possíveis sejam considerados. Os
eventos são especificados logo após a palavra-chave que indica o numero da realização do
trigger AFTER (depois) ou BEFORE (antes)
2. CONDIÇÃO: Determina se a ação da regra deve ser executada;
3. AÇÃO: Normalmente é uma sequência de instruções SQL, mas tramem poderia ser uma
transação de banco de dados ou um programa externo que poderia ser executado
automaticamente.
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
15-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
CREATE TRIGGER <Nome_Trigger>
<Tempo> <Evento> ON <Tabela>
FOR EACH ROW
<Condição>
<Ação>;
VISÕES (VIEWS)
Visões são objetos pertencentes diretamente ao banco de dados, as quais são criadas a partir
de instruções SELECT. São na verdade, tabelas virtuais e são assim nomeadas devido a seu
comportamento de retornar uma visão dos dados presentes nas tabelas originárias (Based Tables).
As visões são armazenadas no banco de dados como tabelas e tal qual podem ser verificadas com os
comandos utilizados por estas, como SHOW TABLES, DESCRIBE, etc.
A estrutura básica de criação de uma visão SIMPLES é dada pelo quadro abaixo:
CREATE VIEW <nome_da-View> AS
<Seleção dos dados a serem visualizados>;
Similarmente às tabelas, uma visão pode ser destruída com o comando DROP VIEW e
alterada com o comando ALTER VIEW. Para visualizar os dados de uma visão criada, basta utilizar
de uma função SELECT como o exemplo abaixo:
SELECT * FROM <nome da visão> WHERE <condições>;
É importante saber que como uma tabela, as visões permitem alteração nos dados
apresentados, porém ao se efetuar qualquer modificação nestes, a alteração não será realizada direta
e somente na visão, mas sim nas tabelas que são referenciadas por esta. Devemos nos atentar que ao
criar uma visão com a utilização do operador * (asterisco) fazem com que a visão seja criada com
os atributos existentes na(s) tabela(s) no exato momento da criação da visão, assim, caso haja
posterior adição de campos às tabelas referenciadas, estes NÃO farão parte da visão a menos que
esta seja alterada pelo desenvolvedor.
As principais vantagens da utilização de visões são:
 Evitar retrabalho de montagem de consultas (querys);
 Diminuição mínima de fluxo de rede em sistemas distribuídos;
 Reaproveitamento de querys elaboradas para desempenho.
 Alguns desenvolvedores acreditam que o fato de um rotina estar previamente
armazenada no banco de dados faz com que esta seja executada mais rapidamente, porém é
algo bastante questionável.
Apesar de havermos criado uma visão simples com o comando anteriormente citado, a
criação de visões permite mais configurações que podem ser exploradas através de seu comando
mais completo.
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
16-17
Universidade Estadual de Mato Grosso do Sul – UEMS
Unidade de Nova Andradina
Curso de Licenciatura em Computação – 4ͦ ano.
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
____________________________________________________________________
REFERÊNCIAS BIBLIOGRÁFICAS:
ELMASRI, R; NAVATHE, S. B. Sistemas de banco de dados. São Paulo, Pearson, 6ed., 2011.
SILBERSCHATZ, A.; KORTH, H.; SUDARSHAN, S. Sistema de banco de dados. Rio de
Janeiro: Campus, tradução da 6ed., 2012.
Professor José Gonçalves Dias Neto - 2015
profneto_ti@hotmail.com
17-17
Download

APONTAMENTOS DA DISCIPLINA DE BANCO DE DADOS