Você está na página 1de 61

Universidade Federal Rural de Pernambuco

Bacharelado em Sistema de Informação

Banco de Dados

Revisão
2ª Verificação de Aprendizagem

Prof. Cleyton Trindade


Tutor: Lamartine Barboza
Agenda
• Semana 5
– Modelo Relacional (MR)
• Semana 6
– Normalização
• Semana 7
– estudos sobre SQL
• Semana 8
– estudos sobre SQL (extra – continuação)
Banco de Dados
Modelo Lógico
Modelo Relacional
O Modelo Relacional
 É composto pelos seguintes elementos:
 Tabelas ou Relações
 Atributos ou Colunas (ou campos)
 Tuplas ou Linhas (ou registros)
 Chaves
Regras de Integridade do Modelo
Relacional
• No modelo relacional os relacionamentos
representados no MER passam a ser
representados através de chaves estrangeiras.
Ou seja, as chaves estrangeiras tornam
possível a associação lógica entre tabelas
distintas.
Regras de Integridade do Modelo
Relacional
• Algumas regras
– Restrição de Chave
– Impede que uma chave primária se repita. Um campo
chave primária diferencia de forma única os registros
(linhas) de uma relação (tabela).
– Restrição de Domínio
– Definir o conjunto de valores possíveis ou permitidos
que um campo pode ter.
– Integridade de vazios
– Verifica se um campo pode ou não receber valor
NULL. Sub-item da integridade de domínio.
Regras de Integridade do Modelo
Relacional
• Algumas regras
– Integridade Referencial
– Uma chave estrangeira de uma relação tem que coincidir com uma
chave primária da sua tabela "pai" a que a chave estrangeira se refere.
Ou seja, não só deve existir o atributo (campo), como também, o valor
referenciado.
– Integridade da coluna
– Determina os valores aceitos para a respectiva coluna.
– Integridade definida pelo utilizador
– A integridade definida pelo usuário permite definir regras comerciais
que não se encaixam em outras categorias de integridade. Todas as
categorias de integridade oferecem suporte à integridade definida
pelo usuário.
– violação da integridade referencial
– Existe violação da integridade referencial quando a chave externa
não coincide com a chave primária da sua tabela “pai”.
Transformações Possíveis
• A partir do modelo MER que foi criado na
etapa de modelagem conceitual podemos
derivar o Modelo Relacional (lógico)
• Também é possível, através de engenharia
reversa, fazer o contrário: a partir do modelo
lógico derivar o modelo conceitual.
E para gerar o modelo lógico qual é a
idéia?
• A idéia é mapear conceitos do MER para
conceitos do modelo relacional
Regras de Transformação
Regra Geral
• Cada entidade é traduzida para uma tabela ou
relação
• Cada atributo da entidade define uma coluna
desta tabela
• Atributos identificadores da entidade
correspondem a chave primária da tabela.
Mapeamento de Entidades Fortes
• Cada conjunto de entidades fortes é mapeado como uma
relação que envolve todos os atributos da entidade
correspondente do Diagrama Entidade-Relacionamento (DER)
– Para cada entidade regular E no DER, criar uma relação R que inclua
todos os atributos simples de E
• O(s) atributo(s) identificador(es) da entidade E deve(m) ser
marcado(s) como chave primária (PK) da relação R criada.

A entidade aluno vira a Relação ALUNO. Os


atributos CPF e Nome passam a ser colunas
da relação. Como o atributo CPF é atributo
identificador da entidade aluno, ele passa a
ser a chave primária (PK) da relação criada.
Mapeamento de Entidades Fortes
• Se houver atributos compostos, inclua apenas os
atributos simples que compõem o atributo composto
(ou seja, decomponha o atributo composto)
Mapeamento de Atributos Multivalorados
• Para cada atributo A multivalorado, deve-se criar
uma nova relação R que inclua o atributo
multivalorado A e a chave-primária da relação que
representa o tipo de entidade ou o tipo de
relacionamento que tem A como atributo.

CPF (PK) Nome


1234 Ana
4567 José

CPF (PK) Nome


1234 32221012
1234 99864572
4567 88526478
Mapeamento de Entidades Fracas
• São mapeadas em uma relação formada por todos os
atributos da entidade fraca mais os atributos que
formam a chave primária da relação da qual a
entidade fraca depende.
• O relacionamento não é mapeado
Mapeamento de Relacionamentos
Binários 1:1
• Esse tipo de relacionamento não é mapeado em uma
nova relação
• Seus atributos são colocados em qualquer uma das
relações que mapeiem as entidades envolvidas
– Você escolhe para que lado mapear
• A entidade escolhida para receber os atributos do
relacionamento receberá, também, a chave primária
da outra entidade envolvida, como chave estrangeira
(FK).
Mapeamento de Relacionamentos
Binários 1:1

Veja que empresa é mapeada


normalmente, como uma entidade forte
que é.

Em relacionamento 1:1, como é possível


escolher para qual lado mapear, aqui, eu
escolhi o lado Empregado. Dessa forma,
dentro da relação empregado, eu coloco o
atributo que estava no relacionamento (no
caso DtAdmissao) e coloco também como
chave estrangeira a chave primária da
entidade do lado que eu NÃO escolhi, no
caso a chave (código) da Empresa.
Mapeamento de Relacionamentos
Binários 1:N ou N:1
• Esse tipo de relacionamento não é mapeado em uma
nova relação
• Seus atributos são colocados na relação que mapeia
a entidade com cardinalidade N
• Ou seja, os atributos-chaves da entidade com
cardinalidade 1 passam a fazer parte da entidade
com cardinalidade N, como chave estrangeira (FK)
Mapeamento de Relacionamentos Binários
1:N
Veja que empresa é mapeada
normalmente, como uma entidade forte O relacionamento não é mapeado em
que é. uma relação do modelo lógico, porque é
1:N

Aqui é parecido com o relacionamento 1:1,


só que vc NÃO PODE escolher o lado para
mapear. Obrigatoriamente, vc mapeia o
lado 1 para dentro do lado N. Dessa forma,
dentro da relação EMPREGADO, eu coloco o
atributo que estava no relacionamento (no
caso DtAdmissao) e coloco também como
chave estrangeira a chave primária da
entidade do lado que eu NÃO escolhi, no
caso a chave (código) da Empresa.
Mapeamento de Relacionamentos Binários
N:N
• O relacionamento é mapeado em uma nova relação
que precisa ter, como chave primária (PK) os
atributos chaves das entidades envolvidas no
relacionamento, além de seus próprios atributos, se
existirem
– Relacionamentos N:N são os únicos que dão origem a uma
nova relação. Os outros tipos de relacionamentos (1:1 e
1:N) não dão, como já apresentado.
• Assim, a chave da relação seria a concatenação das
chaves das entidades envolvidas (e, em alguns casos,
também do próprio atributo identificador do
relacionamento)
Mapeamento de Relacionamentos Binários M:N
O relacionamento N:N sempre é
mapeado em uma nova relação

Veja que Projeto e Empregado são


mapeados em relações como entidades
fortes que são.

Veja que, como o relacionamento Aloca é


N:N, ele dá origem a uma nova relação (que
chamamos de ALOCACAO). Essa relação
deve, obrigatoriamente ter como chave
primária, as chaves das relações que ele
interliga (no caso a chave de Projeto e a
chave de Empregado), além dos atributos
que existiam no relacionamento no modelo
conceitual.
Especialização/Generalização

Veja que neste caso, não existe alguém


que é só cliente, a entidade cliente NÃO
DARÁ origem a uma relação

Já as entidades filhas darão origem a


relações (no caso, pessoa física e pessoa
jurídica) que terão como chave primária
(PK) a chave primária da entidade-pai,
no caso o código do cliente.
Especialização/
Generalização
Não-Exclusiva
Como pode existir apenas uma Conta
(entidade-pai), ela deve dar origem a
uma relação

Neste caso, todas as entidades dão


origem a relações (Conta, Poupança e
Investimento), tendo todas como chave
primária a chave da entidade pai, no
caso, a chave de Conta, que é o número
da conta.
Mapeamento de Agregação ou Entidade
Associativa
• Envolvem um relacionamento entre
relacionamentos
• Para fazer o mapeamento:
– 1) Criamos relações para todas as entidades fortes
envolvidas (mapeamento de entidade forte)
– 2) Criamos uma relação para o relacionamento da
entidade associativa, contendo as chaves das
entidades nele envolvidas
– 3) Criamos uma relação para o relacionamento
externo (o que fica interligado com a entidade
associativa), contendo as chaves primárias de todas as
entidades
Depois deve ser criada uma
Primeiro, devem ser criadas relações relação para a entidade
para as entidades fortes. No caso para associativa (Consulta). Ela é
Médico, paciente e medicamento. como se fosse um
relacionamento entre as
entidades Paciente e Médico,
logo vai conter apenas as
chaves primárias dessas duas
relações.

Por último, deve ser criada uma relação para


Agregação o relacionamento entre a entidade
ou associativa e outra entidade qualquer (no
caso, Medicamento). Esse relacionamento
Entidade deve ser tratado como um relacionamento
normal, entre entidades e vai ter a chave
Associativa primária das entidades que ele relaciona.
Mapeando Auto-Relacionamentos
• Um auto-relacionamento deve ser tratado como um
relacionamento comum, apenas considerando a
mesma entidade de cada lado dele. Assim, deve
seguir as regras para relacionamentos 1:1, 1:N ou
N:M.
– Dessa forma, acaba podendo ter mais de uma forma de
mapear, tal qual foi explicado no volume III da disciplina.
Mapeando Auto-Relacionamentos
• Porém, aqui, vamos explicar o caso genérico, que funciona
para qualquer cardinalidade de auto-relacionamento. A opção
é criar duas relações, uma para representar a entidade e outra
para representar o auto-relacionamento
– A relação Empregado seria mapeada como uma entidade
forte
– E o auto-relacionamento seria mapeado em uma relação
que conteria duas entradas da chave primária da entidade:
uma para o empregado e outra para o seu gerente
Banco de Dados
Normalização
Banco de Dados
Estudos sobre SQL
A Importância da Linguagem SQL

• SQL – Structured Query Language:


– Baseada no modelo relacional de Codd:
• Usa uma combinação de construtores em álgebra e cálculo
relacional;
– 1a Versão: SEQUEL, 1974, na IBM;
– Padrão: 1982 pelo ANSI e em 1986 pela ISO.

• Hoje em dia:
– Linguagem comercial mais utilizada no mercado;
– Vários dialetos de SQL.

29
Estrutura SQL

Implementação Segurança, Controle


Ambiente Administração

DDL DML
SQL

30
Usos de SQL (1/2)
• DDL - Data Definition Language:
– Fornece comandos para criar, alterar e excluir
esquemas de dados;
– Exemplos de comandos:
• CREATE, ALTER, DROP.

• DML – Data Manipulation Language:


– Acesso e manipulação interativos dos dados:
• Linguagem de consulta baseada na álgebra e no cálculo
relacional;
– Exemplos de comandos:
• SELECT, INSERT, UPDATE.

31
Usos de SQL (2/2)
• Segurança, Controle e Administração:
– Controle de Acesso:
• Protege os dados de manipulações não autorizadas.
– Compartilhamento dos dados:
• Coordena o compartilhamento dos dados entre usuários que
os acessam concorrentemente:
– Controle de integridade, transações e concorrência.

• Implementação Ambiente:
– Incorporação DML:
• Comandos SQL embutidos em programas de aplicação em
várias linguagens.

32
Vantagens SQL
• Independência do fabricante:
– “Universalização do seu uso”;
– Cuidado com os dialetos!!

• Portabilidade:
– Independência da plataforma;

• Simplicidade da sintaxe:
– Linguagem interativa e próxima da natural;

• Visões dos dados;

• Definição dinâmica dos dados.

33
Criando uma Base de Dados (1/2)
• Uso do comando CREATE DATABASE:

• CREATE DATABASE<basedados>
• (<proprietario>);

– <basedados> – nome da base de dados a ser criada;


– <proprietario> - proprietário da base de dados.

34
Comandos SQL (Padrão ANSI)
• Criação e destruição de tabelas
• Extração de dados de uma tabela
• Inserção, modificação e remoção de dados
• Definição de visões
• Definição de privilégios de acesso

35
Tipos de dados
Para definir os atributos das tabelas, precisamos definir os domínios
de cada um deles. Isso é feito através da especificação do tipo do dado

Char(X): Para dados caracteres, onde X é o tamanho máximo permitdo de caracteres


e esse tamanho é fxo. Ou seja, se for especifcado, por exemplo, um tamanho de
50 caracteres, sempre será ocupado na memória 50 posições, independente da
palavra sendo armazenada.
» Varchar(X): Idem o anterior, mas o tamanho armazenado é variável. Se ocupará
memória apenas para o que for digitado, tendo o X apenas como referência para
tamanho máximo.
» Integer: Para dados numéricos inteiros positvos ou negatvos
» Decimal(X,Y): Pada dados numéricos decimais, onde X é o tamanho máximo
permitdo da parte inteira e Y é o tamanho máximo da parte fracionária
» Date: Para datas. Seu formato depende do SGBD relacional. E cada SGBD pode ter
um tpo diferenciado para armazenamento de datas.
» Logical: Para os valores lógicos TRUE ou FALSE
Criação e remoção de tabelas
• CREATE TABLE
– Sintaxe resumida
create table nome_tabela

• DROP TABLE
– Sintaxe resumida
drop table nome_tabela

37
Criação de tabelas
• CREATE TABLE
– Sintaxe completa
CREATE TABLE Nome_Tabela (
Nome_Atributo1 Tipo [(Tamanho)] [NOT NULL] [DEFAULT valor] [...],
[,Nome_Atributo2 Tipo [(Tamanho)] [NOT NULL] [DEFAULT valor] [...],

[PRIMARY KEY (Primária1[, Primária2 [, ...]])]

[UNIQUE (Candidata1[, Candidata2[, ...]])]

[FOREIGN KEY (Estrangeira1[, Estrangeira2 [, ...]]) REFERENCES


TabelaExterna [(AtributoExterno1 [, AtributoExterno2 [, ...]])]

[CHECK (condição)]
)

38
Criação de tabelas
Onde: ( ) Indica parte da sintaxe do comando e [ ] Indica
opcionalidade do comando.
Vamos explicar agora cada parte do comando completo.
Nome_Atributo: nome do atributo que está sendo defnido.
Tipo: domínio do atributo, ou seja, o tpo do dado do atributo.
Tamanho: alguns tpos de dados necessitam de especifcação do
tamanho do dado.
Por exemplo, o tpo CHAR.
NOT NULL: expressa que o atributo não pode receber valores nulos.
DEFAULT valor: indica um valor a ser atribuído ao atributo, caso não
seja
determinado um valor durante a inserção.
PRIMARY KEY (Primária1, Primária2, ...): serve para especifcar a(s)
chave(s)
primária(s) da tabela.
UNIQUE: indica que o atributo tem valor único na tabela.

39
Criação de tabelas
FOREIGN KEY (Estrangeira1[, Estrangeira2 [, ...]])
REFERENCES TabelaExterna
[(AtributoExterno1 [, AtributoExterno2 [, ...]]): serve
para especifcar os atributos que são
chaves estrangeiras na relação, já relacionando-os às
tabelas onde eles são chave primária
(Integridade Referencial).
CHECK (condição): aqui são especifcadas condições
que devem ser checadas na
inserção de dados na tabela (validações).

40
Exemplos – create table
AUTOR (CodAutor (PK), Nome, Nascimento)
LIVRO (TitLivro (PK), CodAutor (FK), CodEditora
(FK), Valor,Publicacao, Volume,
Idioma)
EDITORA (CodEditora (PK), Razao, Endereco,
Cidade)
Exemplos – create table
AUTOR (CodAutor (PK), Nome, Nascimento)

CREATE TABLE AUTOR(


CodAutor INTEGER NOT NULL,
Nome CHAR(50) NOT NULL,
Nascimento DATE NOT NULL,
PRIMARY KEY (CodAutor),
UNIQUE (Nome) );
Exemplos – create table
EDITORA (CodEditora (PK), Razao, Endereco,
Cidade)
CREATE TABLE EDITORA(
CodEditora INTEGER NOT NULL,
Razao CHAR(50),
Endereco CHAR(50),
Cidade CHAR(30),
PRIMARY KEY(CodEditora ));
Exemplos – create table
LIVRO (TitLivro (PK), CodAutor (FK), CodEditora (FK),
Valor,Publicacao, Volume,
Idioma)

CREATE TABLE LIVRO(


Titulo CHAR(50) NOT NULL,
CodAutor INTEGER NOT NULL,
CodEditora INTEGER NOT NULL,
Valor DECIMAL(3.2),
Publicacao DATE,
Volume INTEGER,
Idioma CHAR (15) DEFAULT = ‘Português’ ,
PRIMARY KEY (Titulo, CodAutor8),
FOREIGN KEY (CodAutor) REFERENCES AUTOR,
FOREIGN KEY (CodEditora) REFERENCES EDITORA,
CHECK Valor > 10.010);
Exemplos – create table
tabela estudante que contenha os atributos
matricula, nome e nivel
CREATE TABLE estudante (
matricula char(10) NOT NULL,
nome char(15) NOT NULL,
nivel char(15) NOT NULL,
PRIMARY KEY (matricula),
CHECK (nivel IN (“Bacharelado”, ”Mestrado”,
”Doutorado”)))
especificando
os valores possíveis
para o atributo nível.
Alterando de tabelas
• ALTER TABLE - permite inserir/eliminar/modifcar
colunas nas tabelas já
existentes, modifcando a estrutura das mesmas

– Sintaxe básica
ALTER TABLE Tabela {
ADD (NomeNovoAtributo NovoTipo [BEFORE
Nome_Atributo] [, ...] ) |
DROP (Nome_Atributo [, ...] ) |
MODIFY ( Nome_Atributo NovoTipo [ NOT NULL ]
[DEFAULT, ... ] )
}
46
Alterando de tabelas
Onde: | Indica escolha de várias opções e { } Indica
obrigatoriedade de escolha de uma opção entre as várias.
Agora, vamos explicar cada parte do comando.
Adicionando um novo atributo (nova coluna) na Tabela

ADD (NomeNovoAtributo NovoTipo [BEFORE


Nome_Atributo] [, ...] ) |
Usando o ADD, é possível adicionar um novo atributo na
Tabela. Dessa forma, o novo atributo deve ser especificado
(nome e tipo). É possível ainda dizer antes de qual
atributo se deseja que esse novo atributo seja inserido
(BEFORE nome_atributo)

47
Adicionando um novo atributo (nova
coluna) na Tabela
Exemplo: adicionar o campo E-MAIL na tabela Autor

ALTER TABLE AUTOR ADD EMAIL CHAR(40);

Os novos atributos terão valores nulos em todas as


linhas. Por isso, não se pode usar NOT NULL
juntamente com ADD (na definição do novo
atributo), quando a tabela já contiver registros
(lembre, com o uso de ADD a nova coluna é
carregada com NULL’s).

48
Deletando um atributo (uma coluna)
da Tabela
Exemplo: eliminar o campo e-mail

ALTER TABLE AUTOR DROP EMAIL ;

Configurações adicionais

DROP Nome_Atributo [CASCADE | RESTRICT] onde:


CASCADE: removeria o atributo de todos os lugares onde ele
estvesse sendo usado
(outras tabelas como chave estrangeira e em visões).
RESTRICT: não permitria a remoção do atributo, se este
estvesse sendo usado em
uma visão ou como chave estrangeira em outra tabela.

49
Modificando um atributo (uma
coluna) da Tabela
Exemplo: modifcar o campo E-MAIL na tabela Autor,
diminuindo seu tamanho de 40 para 30

ALTER TABLE AUTOR MODIFY EMAIL CHAR(30);

O detalhe é que, se se diminuir o tamanho de um


atributo do tpo CHAR, os dados
existentes serão truncados, havendo, assim, perda de
informação.

50
Criando Índices
CREATE INDEX
Sintaxe completa:
CREATE [UNIQUE] INDEX Nome_Indice ON
Nome_Tabela (Nome_Atributo1 [, Nome_Atributo2…])

especificar se o índice deve ser único (UNIQUE), ou seja,


não deve permitir repetições (restrição de chaves) ou se
será apenas um índice usado para
acelerar a busca entre as tuplas da tabela. Depois,
devemos especificar o nome do índice
(Nome_Indice), a qual tabela ele vai pertencer
(Nome_Tabela) e qual(ais) atributo(s) fará
(ão) parte do índice.

51
Criando e Removendo Índices
Ex: criar um índice para o campo código do
autor da tabela Autor
CREATE UNIQUE INDEX CodigoIDX ON Autor
(CodAutor);

índice para pesquisar pelo código do autor e pelo


código da editora ao mesmo tempo

CREATE INDEX AutorEditoraIDX ON Livro


(CodAutor,CodEditora);
Removendo Índices
DROP INDEX Nome-Índice

deletar o índice criado para a data de


nascimento do autor

DROP INDEX NascIDX


DML – Data Manipulation
Language
>>INSERÇÃO/ATUALIZAÇÃO DE DADOS
EM TABELAS.
>>DELEÇÃO DE DADOS DE TABELAS.
>> CONSULTAS EM TABELAS.
Inserção de dados em Tabelas
• Para inserir uma única tupla (linha):
INSERT INTO nome_tabela [(atrib1,atrib2,...)]
VALUES (valor1, valor2,...)
• Para inserir mais de uma tupla (linha):
INSERT INTO nome_tabela [(atrib1,atrib2,...)]
<comando SELECT>
exemplos
• INSERT INTO Autor ( CodAutor, Nome, Nascimento )
VALUES (112, ‘C. J. Date’, ‘03/12/1941’);
• INSERT INTO Editora( CodEditora, Razao, Endereco, Cidade
)
VALUES (1, ‘Editora Campus’, ‘R. Sete de Setembro,111’,
‘Rio de Janeiro’);
• INSERT INTO Livro
VALUES (‘Introdução a Sistemas de Banco de Dados’, 11237,
138, NULL39, ‘2000’);
obs: quando não especificamos a ordem dos atributos,
é tomada a ordem de criação dos atributos na tabela
criação de uma nova tabela
com os mesmos campos da tabela AUTOR . Inserir nesta nova
tabela os autores da tabela AUTOR com nascimento posterior
a 01/01/1980

CREATE TABLE AUTOR_JOVEM (


CodAutor INTEGER NOT NULL,
Nome CHAR(50) NOT NULL,
Nascimento DATE NOT NULL,
PRIMARY KEY (CodAutor),
UNIQUE (Nome, Nascimento) );

INSERT INTO AUTOR_JOVEM


SELECT * FROM AUTOR WHERE Nascimento >
‘01/01/1980’;
Consulta de dados de Tabelas
SELECT → PROJEÇÃO da álgebra relacional
FROM → Onde a pesquisa será feita (uma ou
mais tabelas)
WHERE → Condições da SELEÇÃO
Consulta de dados de Tabelas
OUTRAS CLÁUSULAS

GROUP BY - agrupamento de resultados.


HAVING - condições para a defnição de grupos na tabela
de resultados.
INTERSECT - permite a interseção de tabelas.
MINUS - permite a diferença entre tabelas.
UNION - permite a união de tabelas.
ORDER BY - estabelece a ordenação lógica da tabela de
resultados (ASC – ordenação
ascendente, DESC – ordenação descendente).
Consulta de dados de Tabelas
Exemplos:
SELECT CodAutor, Nome, Nascimento FROM AUTOR; ou
SELECT * FROM AUTOR;

SELECT Editora.razao, Editora.cidade FROM Editora

Uma coluna (atributo) também pode ser especificada,


colocando antes dele o nome de sua tabela (útil apenas
quando existem atributos de nomes iguais em tabelas
diferentes)
Consulta de dados de Tabelas
Exemplos:
SELECT razao AS Nome_empresa FROM Editora;
NomeColuna AS NomeColunaRenomeada

SELECT Titulo, Valor * 2 AS Dobro FROM Livro;


Renomear um atributo também é útil, quando realizamos
algum tpo de operação sobre o resultado do atributo
selecionado. Por exemplo, selecionar todos os titulos dos
livros e seus valores em dobro