Apostila BancoDados
Apostila BancoDados
Apostila BancoDados
INFORMÁTICA
Banco de Dados I
INTRODUÇÃO
CONCEITOS BÁSICOS
Alguns dos principais conceitos da área de banco de dados serão apresentados a seguir
com o intuito de diferenciar os termos mais utilizados, que normalmente podem ser
confundidos.
Bancos de Dados – são conjuntos de dados relacionados e acessíveis. Dados são fatos
conhecidos, que podem ser registrados e possuem significado.
Mini-Mundo Bancos de
Dados
Modelagem
Uma definição mais completa para o termo Banco de Dados é um conjunto de dados
armazenados, cujo conteúdo informativo representa, a qualquer instante, o estado de
uma determinada aplicação. Um BD é um modelo de uma determinada parte da
realidade, geralmente denominada de Universo de Discurso.
Um primeiro exemplo apenas para fixar estes primeiros conceitos, poderia considerar
um Universo de Discurso de uma livraria. Esta livraria possui diversas características
que a define, tais como, o seu nome, a sua localização, os proprietários, os funcionários,
os livros e outros produtos que estão sendo comercializados, etc.
Algumas características deverão ser descritas num banco de dados, porém nem todas
devem ser de interesse, como, por exemplo, a cor da pintura da livraria, pois este é um
dado que não possui importância nos negócios realizados na livraria. Um primeiro
passo, então, na criação de um BD da livraria, seria a identificação das características de
interesse para seus negócios, pois estes geralmente são os utilizados num programa de
aplicação.
Uma vez definidos quais são os dados que constituirão o BD, definem-se também as
suas estruturas, tais como, que tipo de dado este será, se um texto formado por palavras,
ou um valor numérico, ou um valor de data, etc.
Resumindo, os passos para a criação de um Banco de Dados:
• Análise a Estrutura da Empresa;
• Escolha do SGBD;
• Coleta de Informações (Entrevistas);
• Modelo Conceitual (MER);
• Modelo Lógico (Relacional);
• Implementação.
MODELOS
MODELO CONCEITUAL
Estes modelos são usados na descrição de dados nos níveis: conceitual e de visões.
Estes modelos fornecem capacidades de estruturação flexíveis e admitem restrições de
dados para serem explicitamente especificados. Alguns dos mais conhecidos são:
• modelo entidade-relacionamento;
• modelo orientado a objeto;
• modelo binário;
• modelo semântico de dados;
• modelo infológico;
• modelo funcional de dados.
Como representantes da classe de modelos conceituais, examinar-se-á o modelo
entidade-relacionamento (ênfase) e o modelo orientado a objeto.
Este modelo é baseado numa percepção de um mundo real que consiste em uma coleção
de objetos básicos chamados entidades, e em relacionamentos entre esses objetos. Uma
entidade é um objeto que se distingue de outro por um conjunto específico de atributos.
Por exemplo, os atributos matrícula e sit_tesouraria descrevem uma situação financeira
particular em uma universidade. Um relacionamento é uma associação entre várias
entidades. Por exemplo, um relacionamento AlunoNotas associa um aluno a cada
disciplina/nota que ele possui. O conjunto de todas a entidades de um mesmo tipo e o
conjunto de relacionamentos do mesmo tipo são denominados conjuntos de entidades e
conjuntos de relacionamentos, respectivamente.
A estrutura lógica geral de um banco de dados pode ser expressa graficamente por um
diagrama E-R (DER), que consiste nos seguintes componentes:
• Retângulos: representam conjuntos de entidades;
• Elipses: representam atributos;
• Losangos: representam relacionamentos entre conjuntos de entidades;
• Linhas: ligam atributos a conjuntos de entidades e conjuntos de entidade
a relacionamentos.
Este modelo está baseado em um conjunto de objetos, onde um objeto contém valores
armazenados em variáveis de instância dentro do objeto. Então, objetos contêm objetos
para um nível arbitrário de encaixamento. Um objeto também possui trechos de código
que operam sobre o objeto. Estes trechos de código são chamados métodos.
Os objetos que contêm os mesmos tipos de valores e os mesmos métodos são agrupados
em classes. Uma classe pode ser vista como uma definição de tipo para objetos. Esta
combinação de dados e código em uma definição de tipo é similar ao conceito de tipos
abstratos de dados em linguagem de programação.
O único modo pelo qual um objeto pode fazer o acesso ao dado de outro objeto é
invocando o método desse objeto. Isto é chamado de enviar uma mensagem ao objeto.
A interface de chamada dos métodos de um objeto define sua parte externa visível. A
parte interna do objeto - as variáveis de instância e o código do método - não são
visíveis externamente.
Para ilustrar o conceito, considere o objeto representando uma situação financeira. Tal
objeto contém variáveis de instância matrícula e sit_financeira. Este objeto contém um
método taxa-juros, que adiciona juros a sit_financeira. Conforme for modificada esta
taxa de juro, sob o modelo orientado a objetos, uma única mudança é feita - dentro do
método taxa-juros. Na maioria dos modelos de dados, esta mudança envolveria
alterações no código de um ou mais programas aplicativos.
REDES
HIERÁRQUICO
RELACIONAL
Cada linha de nossa relação será chamada de TUPLA e cada coluna de nossa relação
será chamada de ATRIBUTO. O conjunto de valores passíveis de serem assumidos por
um atributo será intitulado de DOMÍNIO.
Instância da relação consiste no conjunto de valores que cada atributo assume em um
determinado instante. Portanto, os dados armazenados no Banco de Dados, são
formados pelas instâncias das relações.
As relações não podem ser duplicadas (não podem existir dois estados do Pará, no
conjunto de estados brasileiros, por exemplo), a ordem de entrada de dados no Banco de
Dados não deverá ter qualquer importância para as relações, no que concerne ao seu
tratamento.
Chamaremos de Chave Primária ao Atributo que definir um registro, dentre uma
coleção de registros. Chamaremos de Chave Composta, aquela chave que contém mais
de um atributo (Por exemplo, um cadastro ordenado alfabeticamente por Estado, Cidade
e Nome do Cliente, necessitaria de uma chave composta que contivesse estes três
atributos). Chamaremos de Chave Estrangeira, aquela chave que permitir a ligação
lógica entre uma tabela (onde ela se encontra) com outra na qual ele é chave primária.
Cod_est (E)
Os modelos físicos de dados são utilizados para descrever dados no nível mais baixo.
Estes modelos captam aspectos da implementação de sistemas de banco de dados não
abordados neste estudo.
LINGUAGENS DO SGBD
Depois de concluído o projeto do BD, um SGBD deve ser escolhido para que o sistema
seja implementado. Nos SGBDs existem três tipos de linguagens, que serão explicadas
a seguir.
DCL (Data Control Language) – é a linguagem de controle de dados, usada pelo DBA
para controlar o acesso aos dados pelos usuários. Possui comandos de atribuição e
remoção de privilégios.
DDL (Data Definition Language) – é a linguagem de definição de dados que descreve
a estrutura do BD, usada pelo DBA e pelos projetistas. Possui comandos de criação,
alteração e exclusão de tabelas e visões. Gera um catálogo a partir da descrição dos
dados.
DML (Data Manipulation Language) – é a linguagem de manipulação de dados, que
permite especificar operações de recuperação e alteração dos dados do BD. A DML
pode ser de alto nível, podendo ser utilizada sozinha para especificar operações
complexas de dados; ou de baixo nível, que é embutida em uma linguagem de
programação de uso geral.
A SQL (Structed Query Language) é chamada de linguagem de consulta, por causa do
termo em inglês “query”, que poderia ser traduzida para o português como “consulta”,
mas que na verdade significa não só recuperar ou consultar dados, mas também
atualizá-los. A SQL é formada pelas linguagens: DDL, DML e DCL.
Em 1976 o modelo entidade-relacionamento foi definido por Peter Cher que teve como
base à teoria relacional criada por Edgard F. Codd (1970).
O principal objetivo era levar aos “projetistas ou analistas” a possibilidade de ter uma
única visão de uma realidade; sem redundância e bem resumida.
Para aplicação de banco de dados o modelo entidade-relacionamento é mais utilizado
para representação e entendimento de dados que compõem a essência de um sistema de
informação, porém, é importante reconhecer em um SI (Sistema de Informação) os
objetos que o compõem, que são: Entidades e Relacionamento.
Consiste em mapear o mundo real do sistema em um modelo gráfico que irá representar
o modelo e o relacionamento existente entre os dados.
relacionado com várias vendas, uma venda com vários produtos, um vendedor com
várias vendas, e assim por diante.
Portanto, tendo em vista que as entidades de uma base de dados estão relacionadas e
que, através desse relacionamento, são geradas informações, como, por exemplo, todos
os produtos vendidos a um cliente, é importante definir todos os relacionamentos entre
as entidades e relacionamentos (diagrama E-R) é fundamental para o projeto de
qualquer base de dados.
CONCEITOS
Cliente Cliente
CPF
CPF
matricul
Aluno Disciplina
ado
Disciplina: Banco de Dados 11
Curso Técnico em Informática E. E. Professor José Monteiro
Ex:
Esposa
Casament
PESSOA o
Marido
CARDINALIDADE DE RELACIONAMENTO
CARDINALIDADE MÁXIMA
1 n
Departamento lotaç Empregado
ão
CARDINALIDADE MÍNIMA
Além da cardinalidade máxima, uma outra informação que pode ser representada por
um modelo ER é o número mínimo de ocorrências de entidade que são associadas a
uma ocorrência de uma entidade através de um relacionamento. A cardinalidade mínima
é representa por 0(zero) e 1.
A cardinalidade mínima 1 - recebe o nome de “associação obrigatória”, já que ela
indica que o relacionamento deve obrigatoriamente associar uma ocorrência de entidade
a cada ocorrência da entidade em questão.
A cardinalidade 0 - recebe o nome de “associação opcional”.
A cardinalidade mínima é anotada no diagrama junto à cardinalidade máxima.
Exemplo:
Um aluno está inscrito em exatamente um curso e um curso pode ter nele inscritos
muitos alunos (inclusive nenhum).
IDENTIFICANDO ENTIDADES
Todo arquivo deverá ter pelo menos um campo definido como chave primária ou
identificadora.
Assim, uma chave identificadora deverá ser exclusiva, ou seja, única por registro do
arquivo e, uma vez designada, nunca deverá ser alterada. Além disso, um dado que faça
parte dessa chave nunca deverá possuir um valor ausente ou nulo, pois perderá sua
utilidade, tanto como identificador de registros como apontador de relacionamento entre
arquivos de dados.
Se uma chave identificadora não existir “naturalmente” entre os elementos de dados que
descrevem as entidades e os eventos de interesse do sistema, uma chave identificadora
exclusiva deverá ser criada, como código do produto, número do funcionário, número
do pedido, etc. Esta chave poderá ser arbitrária, designada possivelmente pelo próprio
sistema, incrementando um número seqüencial para cada novo registro do arquivo, com
o único objetivo de poder acessá-los inequivocamente. Em qualquer caso, a chave
identificadora assim criada deverá ser concisa para facilitar a digitação sem erros e o
acesso o aos dados de cada registro.
O caso mais simples é o da entidade que possui um único atributo como identificador.
No DER, atributos identificadores são representador por um círculo preto. Na figura
abaixo, o atributo código é identificador ou chave. Isso significa que cada pessoa possui
um código diferente. Já os atributos nome e endereço não são identificadores – o mesmo
nome (ou o mesmo endereço) pode ser associado a diferentes pessoas. Exemplo:
Código
PESSOA Nome
Endereço
Número do
corredor
PRATELEIRA Número da
Prateleira
capacidade
Para este exemplo temos que produtos ficam armazenados em prateleiras. Estas
prateleiras encontram-se em armários organizados em corredores. Os corredores são
numerados seqüencialmente a partir de um e as prateleiras são numerados
seqüencialmente a partir de um, dentro de um corredor. Assim, para identificar uma
prateleira é necessário conhecer seu número e o número do corredor em que se
encontra.
Finalmente, há casos em que o identificador de uma entidade é composto não somente
por atributos da própria entidade, mas também por relacionamentos dos quais a entidade
participa. Exemplo:
1 N
POSSU
EMPREGADO DEPENDENTES
I
EXEMPLO DE RELACIONAMENTOS
1 N
RELACIONAMENTO 1 : N: Cada venda envolve no máximo vários itens/produtos
vendidos e cada item/produto é parte de apenas uma venda.
envol ITENS DE
VENDA
VENDA
FORNECEDO N N
vende PRODUTO
R
UM-PARA-UM
PRODUTO ESTOQUE
CÓDIGO CÓDIGO
NOME NOME
PREÇO SALDO
PRODUTO NO ESTOQUE
CÓDIGO
NOME
SALDO
PREÇO
Neste caso, as entidades PRODUTO e ESTOQUE não são distintas e, por esse motivo,
deve-se armazená-las num único arquivo de dados, pois o saldo em estoque é apenas um
atributo dos produtos.
Se os dois objetos forem realmente distintos, o relacionamento deverá ser mantido na
base de dados do sistema por um identificador ou chave de relacionamento. Esta chave
de relacionamento deverá estar indicada nas extremidades da linha que representa o
relacionamento, nos dois objetos relacionados, como ilustra a figura a seguir.
1 1
conté
PRODUTO ESTOQUE
m
CARROS SEGUROS
Codcarro (chave) Codseg(chave)
Nome Tipo
Placa Valor
Chassi Data validade
Marca Codcarro(APONTADOR)
Exemplo de chave estrangeira na entidade Seguro
1 1
CARRO POSS SEGURO
UI
codcar codse
nome g
ro codcarr tipo
o
plac Data
a marca validade
valor
chassi
UM-PARA-MUITOS
Como cada objeto de informação sempre possui um arquivo de dados contendo seus
atributos, a chave identificadora do “objeto um” deve ser parte do arquivo que descreve
o “objeto muitos”, podendo ser parte de sua chave identificadora ou não.
RELACIONAMENTO EMPREGADO-DEPENDENTE
EMPREGADO1 DEPENDENTE N
CODEMP(CHAVE) CODDEP
POSS (CHAVE)
EMPREGADO DEPENDENTES
NOMEEMP UI
CODEMP (APONTADOR)
ENDEMP NOMEDEP
NºDEPENDENTE PARENTESCODEP
TELEMP IDADEDEP
... ...
Normalmente, no projeto da base de dados de um sistema aplicativo, deve-se incluir
diversos dados ou chaves externas nos arquivos, com o objetivo de simplificar a
programação necessária para a obtenção das informações que deverão ser fornecidas aos
usuários. A análise das chaves externas ou estrangeiras que deverão ser incluídas em
cada arquivo de dados deve ser feita já nesta fase, com a ajuda do diagrama de entidade-
relacionamento (E-R).
MUITOS-PARA-MUITOS
Um relacionamento muitos-para-muitos sempre deve ser resolvido por dois
relacionamentos um-para-muitos. Neste caso, inicialmente, as chaves de ambos os
objetos deverão ser identificadas e, a seguir, um “objeto de interseção” deverá ser
descoberto ou criado. A chave do objeto de interseção é a combinação ou concatenação
das chaves dos dois objetos originais.
RELACIONAMENTO FORNECEDOR - PRODUTO
FORNECEDO N fornec N
PRODUTO
R
Para determinar os dados que deverão estar contidos no objeto de interseção a ser
descoberto ou criado, deve-se analisar o relacionamento muitos-para-muitos entre
FORNECEDOR e PRODUTO fazendo as seguintes perguntas:
Qual deve ser o objeto que possui uma chave que corresponde à concatenação de um
determinado código de fornecedor (codforn) e de um determinado código de produto
(codprod)?
Quais os dados ou atributos que dependem exclusivamente desta combinação ou
relação?
fornecedor poderá ofertar vários produtos, cada um com o seu respectivo preço e prazo
de entrega, assim como cada produto poderá ser ofertado por vários fornecedores, e para
cada fornecedor haverá um determinado preço e prazo de entrega.
A Figura seguinte ilustra o relacionamento muitos-para-muitos entre
FORNECEDORES e PRODUTOS resolvido por um relacionamento um-para-muitos
entre FORNECEDOR e ORIGEM DO PRODUTO e um relacionamento um-para-
muitos entre PRODUTO e ORIGEM DO PRODUTO.
RELACIONAMENTO N : N RESOLVIDO
ORIGEM DO
FORNECEDOR fornece contem PRODUTO
PRODUTO
ENTIDADE ASSOCIATIVA
n n
consul
MÉDICO PACIENTE
ta
Suponha que seja necessário modificar este modelo da seguinte forma. É necessário
saber que medicamentos existem e que medicamentos foram prescritos em cada
consulta. Para saber que medicamentos existem, cria-se uma nova entidade,
MEDICAMENTO. A questão agora é: com que entidade existente deve estar
relacionada a nova entidade? Se MEDICAMENTO fosse relacionado a MÉDICO, ter-
se-ia apenas a informação de que médico prescreveu que medicamentos, faltando a
informação do paciente que os teve prescritos. Por outro lado, se MEDICAMENTO
fosse relacionado a PACIENTE, faltaria a informação do médico que prescreveu o
medicamento. Assim, deseja-se relacionar o medicamento à consulta, ou seja, deseja-se
relacionar uma entidade (MEDICAMENTO) a um relacionamento (CONSULTA), o
que não está previsto na abordagem ER. Para tal, foi criado um conceito especial, o de
entidade associativa. Uma entidade associativa nada mais é que a redefinição de um
relacionamento, que passa a ser tratado como se fosse também uma entidade.
Graficamente, isso é feito como mostrado na figura abaixo.
n n
consul
MÉDICO PACIENTE
ta
n
prescriç
ão
n
MEDICAMENT
O
Observa-se que, caso não se desejasse usar o conceito de entidade associativa, seria
necessário transformar o relacionamento CONSULTA em uma entidade, que então
poderia ser relacionada a MEDICAMENTO, conforme mostrado na figura abaixo. No
modelo da figura, o relacionamento foi substituído por uma entidade homônima, junto
com dois relacionamentos.
MÉDICO PACIENTE
1 1
n n
n n MEDICAMENT
Prescriç
CONSULTA ão O
Observe-se que, para manter equivalência com o modelo anterior, uma consulta está
relacionada com exatamente um médico e exatamente um paciente. Uma consulta é
identificada pelo paciente e pelo médico a ela ligada. Tendo substituído o
relacionamento CONSULTA pela entidade, basta relacionar a entidade CONSULTA
com a entidade MEDICAMENTO. Observe que as figuras acima são equivalentes.
Equivalente aqui significa que ambos geram o esmo banco de dados relacional.
GENERALIZAÇÃO/ESPECIALIZAÇÃO
PESSOA PESSOA
FÍSICA JURÍDICA
Tipo de funcionário
FUNCIONÁRIO
MOTORISTA SECRETÁRIA
De uma maneira geral, a maioria dos dicionários de dados (DD) é concebida para dar
apoio a um determinado sistema de gerência de banco de dados (SGBD).
Os usos de um dicionário de dados são múltiplos. A seguir relacionamos as áreas onde
ele pode ser utilizado:
• Planejamento e análise de negócios - (Planejamento de dados; Modelagem de
processos).
• Administração de banco de dados (ABD) - (Geração e documentação das
estruturas de dados; Geração das definições sobre segurança de dados).
• Desenvolvimento de sistemas.
• Auditorias e controles.
• Sistemas de teleprocessamento.
Um dos benefícios de se usar um Dicionário de Dados é que além do apoio essencial à
administração de dados e administração de banco de dados, o DD (suas extensões)
proporciona um local centralizado para documentar todas as informações referentes
à fase de análise.
Nesta etapa deve ser definido o conteúdo exato de cada arquivo de dados que irão
compor a base de dados do sistema. Deve-se definir todos os dados ou elementos de
dados que serão armazenados em cada arquivo de dados para descrever os atributos de
cada entidade ou evento do modelo entidade-relacionamento. Além disso, deve-se
também detalhar os dados que formarão a chave apontadora de relacionamentos entre
arquivos.
Após a verificação dos elementos de dados que descrevem todas as entidades e os
eventos deve-se fazer o seguinte questionamento: “Se eu dirigisse esse negócio, o que
gostaria que fosse armazenado no sistema?” Certamente, quanto mais você conhecer
o negócio e compreender os objetivos dos usuários em requisitar o sistema, tanto
melhor poderá responder esta pergunta. Contudo, você não deverá tentar dizer a um
empresário como a empresa deve ser administrada, mas poderá certamente fazer
sugestões. Em geral é mais fácil oferecer uma lista de sugestões de elementos de dados
ao usuário e solicitar que ele elimine e/ou acrescente itens na lista. Deste modo, você
estará dizendo ao usuário “Segundo meus limitados conhecimentos do seu negócio,
parece que seria útil ter essas informações armazenadas no sistema. Há alguma
coisa que eu esqueci? E considerando o custo de coletar e armazenar informações
há alguma coisa na lista que pode ser omitida sem lhe fazer falta no futuro?” Ao
formular estas perguntas, você estará efetivamente envolvendo o usuário no projeto do
sistema fazendo com que ele se sinta comprometido com sua definição e, portanto,
sendo mais cuidadoso e responsável ao respondê-las. A partir dos resultados obtidos,
você poderá produzir uma definição preliminar do conteúdo de cada arquivo de dados
que descreve uma entidade.
Recomenda-se que cada dado tenha uma descrição resumida que deverá explicar
inteiramente a natureza do dado e será utilizada para descrever o dado num dicionário
de dados que fará parte da documentação do sistema. Por exemplo:
ATRIBUTO DESCRIÇÃO
CODPRO Código de Identificação do Produto
NOMPRO Nome que identifica o Produto
UNID Unidade de medida do produto. ex: metros, quilos, caixas.
MODELO RELACIONAL
CONCEITOS BÁSICOS
Na maior parte da literatura relacional, as tabelas são tratadas como relações. Cada linha
de nossa relação será chamada de TUPLA e cada coluna de nossa relação será chamada
de ATRIBUTO. O conjunto de valores passíveis de serem assumidos por um atributo
será intitulado de DOMÍNIO.
Instância da relação consiste no conjunto de valores que cada atributo assume em um
determinado instante. Portanto, os dados armazenados no Banco de Dados, são
formados pelas instâncias das relações.
Para exemplificar melhor, utilizar-se-á um banco de dados contendo fornecedores, peças
e embarques. Os quadros nº 02, 03 e 04 mostram os dados de teste em forma relacional,
isto é, elas representam uma visão relacional dos dados.
Tabela – FORNECEDORES
Tabela – PEÇAS
Tabela – EMBARQUES
Pode-se ver que os dados estão organizados em três tabelas: Fornecedores, Peças e
Embarques.
A abordagem relacional aos dados está baseada na observação de que arquivos que
obedecem a certas limitações podem ser considerados como relações matemáticas, e
conseqüentemente a teoria elementar de relações pode ser usada para lidar com vários
problemas práticos com os dados desses arquivos.
O Quadro a seguir apresenta uma Relação de Funcionário.
Existem algumas condições que devem ser satisfeitas por uma Relação:
a) cada Relação só deve conter um tipo de Tupla;
b) cada Relação deverá conter um número fixo de domínios;
c) cada Relação só possuirá uma Chave Primária (sem duplicatas);
d) uma Relação não deve representar mais que um Relacionamento;
e) todos os Atributos que formam a Chave Primária, devem identificar cada um
dos demais Atributos da Relação.
2 - Integridade Referencial
Se uma determinada tabela A possui uma chave estrangeira, a qual é chave primária em
outra tabela B, então deve:
• Ser igual a um valor de chave primária existente em B; Ou
• Ser NULA (NULL).
Não pode existir na chave estrangeira, um valor que não exista na tabela na qual ela é
chave primária.
As regras de integridade do modelo relacional representam a garantia de que as tabelas
guardam informações compatíveis. São de extrema importância para a confiabilidade
das informações contidas no banco de dados.
REGRAS DE CONVERSÃO
Existem regras precisas que não dão margem a erros, sendo que uma vez projetado o
ER, as tabelas que representam o ER num nível mais baixo podem ser obtidas de forma
clara.
1 N
Departamento tem Funcionário
Departamento Funcionário
Cod Nome do Departamento Mat. Nome Etc. CDEP
SFT ANÁLISE 4534 Soraia Matos ... SFT
COB-2 PROGRAMAÇÃO 6547 Breno Medeiros ... ADP
Peça
Comp
õe Cód. Nome Etc. Códch
4534 Correia ...
1 N 6547 Parafuso ...
7734 Freio ... 6547
1198 Carburador ... 6547
Peça
1 1
CARRO possui SEGURO
CARRO SEGURO
PLACA NOME Etc. Apólice Tipo Etc. PLACA
(CHAVE)
GPP-1212 GOL ... 4534 Total ... GPP-1212
GHH-1515 PALIO ... 6547 Parcial ... GHH-1515
DLL-1818 VECTR ... 7734 Total ... DLL-1818
A
Incluir a chave primária da entidade na própria entidade (chave estrangeira) e gerar uma
estrutura de acesso para ela.
Casada
com
1 1
Pessoa
N N
Alocad
Funcionário o
Projeto
Funcionário Alocado
Mat. Nome Etc MAT CODP DTALOC Projeto
4534 Soraia Mattos ... 4534 PRIB ... Codp Nome do projeto
6547 Breno Medeiros ... 1198 PRIB ... PRIB Ribeira
7734 Gustavo Borges ... 4534 PLV 05/05/94 PLV Linha Vermelha
1198 Ana Ferreira ... 6547 PRIB ... PPIR Piratininga
3289 Telma Ribeiro ... 7734 PPIR 17/02/92 PBG Guanabara
3289 PPIR ...
7734 PRIB 04/05/94
Pré-
Requi Disciplina Pré-Requisito
si-to
Cód. Nome Cód. CPré
N N Disciplina Disciplina
666 Química I 123 888
123 Cálculo III 491 324
Disciplina 324 Física I 491 888
AS GENERALIZAÇÕES
1: N
Funcionário
1
Departa- 1 Te Mat. Nome
Funcioná- Funçã CDEP
mento m rio o
4534 Soraia Matos Eng SFT
6547 Breno Vem ADP
Medeiros
7734 Gustavo Ven COB-2
Borges
1198 Ana Ferreira Sec SFT
3289 Telma Ribeiro Ven ADP
Departamento
Cod Nome do Departamento
SFT ANÁLISE
COB-2 PROGRAMAÇÃO
APD DIRETORIA SISTEMAS
Consiste em retirar da estrutura os elementos repetitivos até que cada dado tenha uma
chave identificadora para cada ocorrência, ou seja, aqueles dados que podem compor
uma estrutura de vetor. Podemos afirma que uma estrutura está normalizada na 1FN, se
não possuir elementos repetitivos. Exemplo:
Estrutura original:
Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Cod. do Cliente, Nome do
cliente, Endereço do cliente, CGC do cliente, Relação das mercadorias vendidas (onde
para cada mercadoria temos: Código da Mercadoria, Descrição da Mercadoria,
Quantidade vendida, Preço de venda e Total da venda desta mercadoria) e Total Geral
da Nota).
Analisando a estrutura acima, observamos que existem várias mercadorias em uma
única Nota Fiscal, sendo, portanto elementos repetitivos que deverão ser retirados.
Como resultado desta etapa ocorre um desdobramento dos dados em duas estruturas, a
saber:
- Primeira estrutura (Arquivo de Notas Fiscais): Dados que compõem a estrutura
original, excluindo os elementos repetitivos.
- Segunda estrutura (Arquivo de Vendas): Dados que compõem os elementos
repetitivos da estrutura original, tendo como chave o campo chave da estrutura original
(Num. NF) e o campo chave da estrutura de repetição (Código da Mercadoria).
Consiste em retirar das estruturas que possuem chaves compostas (campo chave sendo
formado por mais de um campo), os elementos que são funcionalmente dependente de
parte da chave. Podemos afirmar que uma estrutura está na 2FN, se ela estiver na 1FN e
não possuir campos que são funcionalmente dependentes de parte da chave. Exemplo:
Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente e Total
Geral da Nota)
Como resultado desta etapa, houve um desdobramento do arquivo de Notas Fiscais, por
ser o único que possuía campos que não eram dependentes da chave principal (Num.
NF), uma vez que independente da Nota Fiscal, o Nome, Endereço e CGC do cliente
são inalterados. Este procedimento permite evitar inconsistência nos dados dos arquivos
e economizar espaço por eliminar o armazenamento freqüente e repetidas vezes destes
dados. A cada nota fiscal comprada pelo cliente, haverá o armazenamento destes dados
e poderá ocorrer divergência entre eles.
ARQUIVO NÃO
NORMALIZADO (Grupos
repetidos)
ARQUIVO NA PRIMEIRA
FORMA NORMAL
(Sem Grupos Repetidos)
Para arquivos cujas chaves sejam concatenadas, verificar se cada campo não-
chave é dependente da chave como um todo e não apenas de parte dela. Se
necessário, desmembrar o arquivo para conseguir isto.
ARQUIVO NA SEGUNDA
FORMA NORMAL
(Campos não-chave
dependentes da chave
primária)
Verificar se todos os campos não chave são dependentes entre si. Remover
campos redundantes ou, se necessário, desmembrar o arquivo para conseguir
isto.
ARQUIVO NA TERCEIRA
FORMA NORMAL
(Campos não-chave dependentes da chave primária e independentes entre
si)
O que é INTERBASE?
Este banco de dados dispensa maiores estruturas dentro da empresa, (DBA), onde basta
instalar o software e usá-lo, sem a interferência freqüente de profissionais,
especializados na manutenção do banco de dados de produção.
Acompanhando, isso tudo ele ainda dispensa o uso de super servidores, usando pouco
espaço em disco para sua instalação e utilizando pouca memória em situações normais
de uso. Por isso a plataforma necessária para a sua instalação e utilização pode ser
reduzida diminuindo consideravelmente os custos do projeto.
O Interbase tem o seu código distribuído gratuitamente pela Internet (o tão falado Open
Source) sendo que as licenças de utilização e distribuição agora são totalmente FREE!
Isso mesmo, custo 0, de graça.
Vamos criar nosso banco de dados (neste exemplo criaremos um banco de dados Local)
que é um arquivo com a extensão GDB, clique com o botão direito em cima de
Databases e seleciona Create Database e abrirá essa tela:
Agora vamos criar nossa tabela, o sistema de exemplo terá apenas uma tabela, mas você
pode criar várias tabelas dentro de um Database, clique no ícone SQL aquele ícone
verde e amarelo que parece com um marciano correndo com as letras SQL de amarelo
embaixo ou escolher a opção “interactive SQL” no menu Tools ou clicar no ícone SQL.
Com ela, podemos enviar comandos SQL para o servidor Interbase administrar nossos
dados. Ao carregarmos o Interbase Windows ISQL, veremos uma tela dividida em duas
partes, a parte superior aceita comandos SQL e os resultados aparecerão na parte
inferior.
1 2 3 4 5 6 7 8 9 10 11 12
Fica assim:
Com isso estamos criando seis campos, CodCli do tipo inteiro, NomCli, EndCli,
BairroCli e TelCli do tipo texto e DatCli do tipo date, clique em Execute Query ( aquele
ícone com um raio amarelo e um ponto de interrogação azul ), se tudo estiver ok a tela
que digitamos o código para criação da tabela deve ficar em branco, para visualizar a
tabela que criamos nesta tela digite: SELECT * FROM CLIENTE e execute a query,
você vai poder visualizar os campos no Grid abaixo.
O Interbase 6.5 suporta a maioria dos tipos de Dados do SQL. O Interbase, apenas não
tem como tipo de dado, o tipo Boolean. Mas, isto não é uma falha do Interbase, outro
SGDB´s também não tem este tipo de dado. Apesar de não ter este tipo de dados,
podemos criar o nosso “tipo boolean” através de DOMAINS.
• BLOB
Este tipo de campo é o tipo indicado para armazenar Textos Grandes “Memos”, Fotos,
Gráficos, Ícones, isto é, aparentemente não tem um tipo de dado que não possa ser
armazenado no Campo Blob. Campos Blob´s não podem ser indexados.
• CHAR(n) e VARCHAR(n)
Ex : CREATE TABLE … ( … SEXO CHAR(01), NOME VARCHAR(50) NOT
NULL ...)
• DATE
DATE armazena a Data, e seu tamanho é de 32 bits inteiros longos.
Ex : CREATE TABLE … (… DATA_ADMISSAO DATE)
• TIME
TIME armazena a hora, e seu tamanho é de 32 bits inteiros longos.
Ex : CREATE TABLE … (… HORA_ENTRADA TIME, HORA_SAIDA
TIME)
• TIMESTAMP
O tipo de Dado TIMESTAMP, armazena a Data e a hora ao mesmo tempo, e seu
tamanho é de 32 bits inteiros longos.
Ex : CREATE TABLE … (… DATA_HORA_MOVIMENTACAO TIMESTAMP ...)
• DECIMAL e NUMERIC
DECIMAL e NUMERIC armazena dígitos a serem gravados na precisão especificada
na criação da tabela.
Ex : CREATE TABLE … (… SALARIO DECIMAL(15,02) ...) ou
CREATE TABLE … (… SALARIO NUMERIC(15,02) ...)
• SMALLINT
Ex : CREATE TABLE … (… ALTURA SMALLINT ...)
• INTEGER
Ex : CREATE TABLE … (… ID INTEGER NOT NULL PRIMARY KEY )
• FLOAT
Ex : CREATE TABLE … (… VLR_ULT_CMP_ITEM FLOAT ...)
• DOUBLE PRECISION
Este é o tipo de campo recomendado para uso monetário/valores com muitas casas
depois da vírgula no InterBase.
Ex: CREATE TABLE …(…VALOR_TOTAL_MOVIMENTACAO_DIA DOUBLE
PRECISION...)
A LINGUAGEM SQL
INTRODUÇÃO
DQL – Data Query Language – (Linguagem de Consulta aos Dados) → obtêm dados de
tabelas e determinam como os resultados da recuperação devem ser apresentados. O
comando SELECT é a principal instrução dessa categoria.
1
O ANSI (que significa American National Standards Institute) é o órgão dedicado a
estabelecer e manter padrões científicos e de engenharia.
DOMÍNIOS EM SQL
• float→ para armazenamento de números no intervalo de (3.4 x 10-38 até 3.4 x 1038)
com precisão de 7 dígitos.
• date→ é um calendário contendo um ano (com quatro dígitos), mês e dia do mês.
A SQL permite-nos definir domínios usando a cláusula create domain, como mostra o
exemplo:
REGRAS E NOMENCLATURAS
CONSTRAINTS (RESTRIÇÕES)
KEY CONSTRAINTS
A chave primária de uma tabela é um atributo do ente a que se refere à tabela, e serve
para permitir que se consiga chegar a um único ente dessa tabela, caso se conheça um
valor desse atributo.
COLUMN CONSTRAINTS
• CHECK→ valida o valor a ser admitido por uma coluna, contra uma regra
(expressão/equação). Verifica se o dado fornecido à coluna condiz com a expressão
que é apresentada para a constraint.
• UNIQUE→ impõe a coluna que seus valores (dados) não poderão ser repetidos.
Exemplos:
create domain uf as char(2) default 'MG' se dado omitido, a coluna é preenchida com
MG.
create domain x as numeric(2) default 99 se dado omitido, a coluna é preenchida
com 99.
create domain data date default ‘now’ se dado omitido, a coluna é preenchida com a
data atual.
A Column Constraint funciona assim, depois de definida a uma coluna, toda vez que
ocorrer uma inserção ou modificação de dados, a restrição será testada.
DRI CONSTRAINTS
ON DELETE
Especifica os procedimentos que devem ser feitos pelo SGDB quando houver uma
exclusão de registro na tabela pai quando existe um registro correspondente nas tabelas
filhas. Opções:
o ON DELETE CASCADE→ impõe a exclusão, em cascata, de todas as Foreign
Keys que apontem para uma Primary Key que estiver sendo excluída. Determina
se uma exclusão feita na chave primária da tabela pai será replicada
automaticamente na tabela filha. No relacionamento cliente e cidade, a tabela
pai é cidade e a filha é cliente (onde está a chave estrangeira). Então ao usar esta
constraint se apagar uma cidade (Lavras) todos os clientes existentes nesta
cidade serão automaticamente apagados.
o ON DELETE SET NUL→ Então ao usar esta constraint se apagar uma cidade
(Lavras) todos os clientes existentes nesta cidade terá o código da cidade como
nulo. Observação: para isso é necessário que está chave estrangeira dentro da
tabela cidade possa receber valor nulo.
ON UPDATE
Especifica os procedimentos que devem ser feitos pelo SGDB quando houver uma
alteração da chave primária do registro na tabela pai quando existe um registro
correspondente nas tabelas filhas. Opções:
EXEMPLO:
N N N 1
Acessório veic/acess Veiculo
CLIENTE Cliente
vendido
Todos comandos SQL terão seus exemplos baseados no MER apresentado abaixo:
Tabela Acessório
ACESSÓRIO TIPO TAMANHO OPÇÃO
CODACE N 5 OB
DESCACE V 30 OB
Tabela Cliente
CLIENTE TIPO TAMANHO OPÇÃO
CODCLI N 5 OB
NOMCLI V 30 OB
ENDCLI V 50 OB
FONECLI V 15 OP
EMAILCLI V 30 OP
... ... ... ...
Tabela Veículo
VEÍCULO TIPO TAMANHO OPÇÃO
PLACAVEIC V 9 OB
CODCLI N 5 OP
NOMVEIC V 20 OB
MARCAVEIC V 20 OB
VALORVEIC valor OB
... ... ... ...
Tabela VeicAcess
VEICACESS TIPO TAMANHO OPÇÃO
CODACE N 5 OB
PLACAVEI N 5 OB
C
... ... ... ...
COMANDO CREATE
CREATE DATABASE:
Cria um novo banco de dados.
CREATE DOMAIN
Exemplos:
create domain sexo as varchar(1) check(value=‘M’ or value=‘F’);
create domain x as integer not null check(value>=10);
create domain uf as char(2) default 'MG'
create domain valor as numeric(8,2) default 8000 (será usado na criação da tabela
veículo)
CREATE TABLE
Cria uma nova tabela com seus campos e define as restrições de campo.
Obs: A chave primária não pode ser nula, e se for chave composta, estas devem vir
entre ( ) parênteses. Deve-se observar se a tabela a ser criada referencia alguma chave
estrangeira, caso ocorra referência, deve-se certificar que a tabela pai seja criada
primeiro.
Exemplos:
Tabela acessório
create table acessorio (codace numeric(5,0) not null,
descace varchar(30) not null unique,
primary key (codace));
Tabela cliente
create table cliente (codcli numeric(5,0) not null primary key,
nomcli varchar(30) not null,
endcli varchar(50) not null,
fonecli varchar(15),
Observações:
• Para o atributo valorveic foi utilizado o domínio acima.
• Existe uma opção chamada computed by que guarda uma operação.
Ex: create table x ( ..., L1 integer, L2 integer, L3 computed by ( L1+L2), ...)
COMANDO ALTER
ALTER DOMAIN
Altera as definições de um domínio que já tenha sido criado. Pode-se alterar qualquer
elemento de domínio, exceto os domínio de NOT NULL e a troca do tipo de dado. Para
redefinir o tipo de domínio e/ou alterar o NOT NULL, deve apagar o domínio e criá-lo
novamente.
alter domain nome_do_domínio {[set default|drop default] [add check]}
Exemplos:
alter domain x set default 10 → adiciona ao domínio o default de 10
alter domain x drop default → apaga o default
alter domain valor add check(value>=8000)
ALTER TABLE
Exemplos:
COMANDO DROP
DROP DATABASE
Ex: drop database → No Interbase para apagar o bd este deve estar conectado.
DROP DOMAIN
Apaga o domínio. Se o domínio estiver sendo usado por alguma tabela, para solucionar
este problema, o campo tem que ser excluído e após isto apagar o domínio.
drop domain nome_do_domínio
DROP TABLE
Exclui uma tabela, ou seja, são perdidos os dados e a estrutura da tabela.
drop table nome_da_tabela.
Ex: drop table acessorio;
COMANDO DELETE
Exemplos:
delete from veiculo where marcaveic=‘fiat’; Apaga todos os registros dos veículos da
marca Fiat.
delete from acessório; Apaga todos os registros da tabela acessório.
COMANDO INSERT
Adiciona registros a uma tabela. Os valores que forem omitidos recebem valores nulos
ou o valor do default.
OBS: os textos devem vir entre apóstrofes.
Exemplos:
insert into cliente values (1,‘João’,‘R. das Amoreiras’,null, ‘joão@vvv.com.br’);
insert into cliente (codcli,nomcli,endcli) values (2,‘Pedro’, ‘R. das Amoreiras’);
insert into acessorio values (1,‘calota’);
insert into veiculo values (‘ggp-4040’,‘uno’,‘fiat’,14000,1)
insert into veicacess values (1, ‘ggp-4040’)
COMANDO UPDATE
Altera (atualiza) valores de campos em uma tabela, com base em critérios especificados.
Caso não seja usado nenhum critério, serão alterados todos os registros da tabela.
Exemplos:
update veiculo set valorveic=valorveic*1.3; Altera o valor de todos os veículos em
30%
update veiculo set valorveic=valorveic*1.3 where valorveic>=19000;
update cliente set endcli= ‘R. das Flores’ where endcli=‘R. das Aimoreiras’;
update veiculo set valorveic= ‘15000’ where nomveic <> ‘uno’
COMANDO COMMIT
Torna permanente todas as alterações (como os comandos insert, delete e update) feitas
desde o início desta conexão.
Ex: commit;
COMANDO ROLLBACK
Descarta todas as alterações (como os comandos insert, delete e update) feitas desde o
início desta conexão, ou do último comando COMMIT.
Ex: Rollback
COMANDO SELECT
Observações:
• Então entre o SELECT e o FROM são colocados todos os atributos que se deseja
visualizar no final da consulta. Entre o FROM e o WHERE são colocadas todas as
relações das tabelas necessárias para execução da consulta. E depois do WHERE
são colocadas todas as condições que o select deve atender para mostrar o resultado
da consulta.
CLÁUSULA SELECT
Será explicado o que vem antes da cláusula WHERE.
O DISTINCT
Se desejar forçar a eliminação de duplicidade em uma consulta, devemos inserir a
palavra-chave DISTINCT depois de select.
select marcaveic from veiculo; → (mostra todas as marcas dos veículos, mas de forma
repetida).
O ASTERISCO
O asterisco (*) pode ser usado para denotar “todos os atributos”. Se usado em
expressões aritméticas ele vira um operador de multiplicação.
select nomveic from veiculo; → (mostra só o nome dos veículos existentes na tabela
veiculo)
select * from veiculo; → (vai mostrar todos os atributos de veículo, nome,marca, etc)
AS
Ex: select nomcli as nome from cliente → (no cabeçalho ao invés de nomcli aparecerá
nome).
CLÁUSULA WHERE
Na cláusula WHERE são colocadas as condições que devem ser obedecidas para
execução da consulta.
Podem ser usados os operados lógicos and (e), or (ou) e not (negação) entre as várias
condições encontradas na cláusula WHERE.
Considere o exemplo abaixo, onde queremos encontrar todos os veículos da marca Fiat
e com valor igual ou acima de 15000.52, mostrando apenas os campos nome do veículo
e seu valor.
Exemplos:
a) Sem usar apelidos:
select cliente.nomcli, veiculo.nomveic from cliente, veiculo where
cliente.codcli=veiculo.codcli;
Mostra os nomes dos clientes e seus respectivos carros
b) Usando apelidos:
select c.nomcli, v.nomveic from cliente c, Veiculo v where c.codcli=v.codcli;
Mostra os nomes dos clientes e seus respectivos carros
GROUP BY
Organiza os registros através do atributo indicado. Combina registros com valores
idênticos na lista de campos especificada em um único registro. GROUP BY é opcional.
Exemplos:
ORDER BY
Classifica os registros resultantes de uma consulta em um campo ou campos
especificados, em ordem crescente ou decrescente. ORDER BY é opcional. A ordem de
OPERADORES
OPERADOR BETWEEN
A SQL possui o operador de comparação BETWEEN (entre), que especifica que um
valor esta entre os outros valores especificados.
Ex: select nomveic from veiculo where valorveic between 14000.52 and 18000.00
Mostra os veículos cujos valores estejam entre 14000.52 e 18000, inclusive os com
estes valores
OPERADOR IN
Determina se o valor de uma expressão é igual a algum dos vários valores de uma lista
especificada (conjunto). Se expressão for encontrada na lista de valores, o operador In
retornará True; caso contrário, retornará False. Você pode incluir o operador lógico Not
para avaliar a condição oposta (isto é, se a expressão não está na lista de valores).
Exemplos:
select * from cliente where nomcli in ('Maria','João','Marta')
mostra os todos os dados dos clientes com esses nomes, caso eles existam
select nomcli from cliente where codcli not in (select codcli from veiculo)
mostra os clientes que não possuem carro
select * from cliente where codcli in (select codcli from veiculo where marca='fiat')
mostra os clientes que possuem carro da marca Fiat
OPERADOR LIKE
As operações em strings mais usadas são as checagens para verificação de coincidências
de pares, usando o operador like.
Identificamos esses pares por meio de dois caracteres especiais:
• Porcentagem (%)→ o caracter % compara qualquer substring.
• Sublinhado(_)→ o caracter _ compara qualquer caracter.
Comparações desse tipo são sensíveis ao tamanho das letras; isto é, minúsculas não são
iguais a maiúsculas, e vice-versa.
Para ilustrar considere:
• “Fi%” → corresponde a qualquer string que comece com “Fi”.
• “%mar%” → corresponde a qualquer string que possua uma substring “mar”, por
exemplo, mar, maravilha, comarca, etc.
• “%re” → corresponde a qualquer string que termine com “re”
• “_ _ _” → corresponde a qualquer string com exatamente três caracteres;
• “_ _ _%” → corresponde a qualquer string com pelo menos três caracteres.
Exemplos:
select * from cliente where nomcli like ‘Re%’
seleciona todos os clientes cujos nomes iniciam com Re
OPERADOR IS NULL
Determina se o valor de uma expressão é nulo.
Você pode incluir o operador lógico Not para avaliar a condição oposta (isto é, se a
expressão não é nula).
Exemplos:
select * from veiculo where codcli is null
mostra os veículos cujo código do cliente é nulo,ou seja, os veículos que ainda não
foram vendidos
FUNÇÕES
FUNÇÃO AVG
Calcula a média aritmética de um conjunto de valores contido em um campo
especificado em uma consulta.
FUNÇÃO MAX
Retorna o maior valor de um conjunto de valores contido em um campo especificado
em uma consulta.
Ex: select max(valorveic) from veiculo; → mostra o valor mais caro de carro
FUNÇÃO MIN
Retorna o menor valor de um conjunto de valores contido em um campo especificado
em uma consulta.
EX: select min(valorveic) from veiculo; → mostra o valor mais barato de carro
FUNÇÃO SUM
Retorna a soma de um conjunto de valores contido em um campo especificado em uma
consulta. A função Sum ignora os registros que contenham campos Null.
Ex: select sum(valorveic) from veiculo where marcaveic='fiat'; → mostra o valor total
da soma dos carros as marca fiat.
FUNÇÃO COUNT
Calcula o número de registros retornado por uma consulta. A função count não conta
registros que tenham campos Null, exceto quando for usado o asterisco (*). Separe o
nome de campos por um e comercial (&).