Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
FACULDADE DE ENGENHARIA
1
Administrao de Base de
Dados
3O ano Engenharia Informtica 2016
4.1 Strings
4.2 Matemticas
4.3 - Agrupamento (Agregao)
4.4 - Data/Hora
4.5 - Formatao de Tipos de Dados
4.6 - Converso de Tipos (CAST)
Captulo 5 - Funes Definidas pelo Usurio e Triggers
5.1 - SQL
5.2 - PlpgSQL
5.3 Triggers
Captulo 6 - DCL (Data Control Language) -
Administrao
6.1 - Administrao de usurios, grupos e privilgios
1
Adquirir conhecimentos avanados sobre bases de dados,
Prof: Santos
5 Prof: Msc. Hugo Dias Dos Santos
Modelo Entidade Relacionamento
1.Reviso de conceitos Gerais do MER
6
1.Reviso de conceitos
7
1.Reviso de conceitos
8
No Modelo Conceitual:
Modelo Entidade Relacionamento,
Modelos Orientados a Objectos,
Modelo de Semntica de Dados,
Modelo Infolgico.
Modelo Lgico:
Modelo Relacional,
Modelo Hierrquico,
Modelo em Rede.
Modelo Fsico:
Modelo de Dados
Prof: Msc. Hugo Dias Dos Santos
Fases de um projecto de construo de
BD
10
1.Reviso de conceitos
11
12
conceitos(Atributo)
Atributo: um dado que associado cada ocorrncia de uma
entidade ou relacionamentos.
Domnio: o conjunto de valores vlidos que um atributo pode assumir.
Tipos de Atributo:
Opcional: O atributo pode ter o valor nulo. Ex: numero de telefone.
Mandatrio: O atributo deve possuir um valor vlido no nulo. Ex: Nome do
cliente
Monovalorado: O atributo assume um unico valor dentro do domnio. Ex:
Data de Nascimento
Multivalorado: O atributo pode ter um numero qualquer de valores dentro do
dominio. Ex : contactos
Atmico: O atributo no pode ser decomposto em outros atributos. Ex: idade.
Composto: composto por mais de um atributo. Ex Endereo
13
conceitos(Atributo)
Identificador de entidades: o atributo
ou conjunto de atributos que tm a
capacidade de identificar univocamente
cada ocorrncia de uma entidade.
O identificador deve ser nico,
monovalorado e mandatrio
Entidade Associativa (Agregao): um
relacionamento que passa a ser tratado
como entidade devido a existncia de
um relacionamento com uma entidade.
Prof: Msc. Hugo Dias Dos Santos
Modelo
Relacional
2. Modelo Relacional (Reviso)
14
Dependncia Funcional
17
Dependncia Funcional
18
Normalizao
19
Formas Normais.
20
lgebra Relacional
21
22
diferena
A unio entre duas relaes R1 e R2 s
possvel se ambas tiverem o mesmo nmero de
atributos e se estes atributos forem do mesmo tipo.
Produto Cartesiano
23
Restrio
24
Projeco
26
A forma geral da operao JOIN sobre duas relaes R(A 1, A 2, ..., An ) e S(B1 ,
B2 , ..., Bm ) : R <condio join>S.
O resultado de JOIN uma relao Q com n+m atributos Q(A1 , A2 , ..., An , B1 ,
B2, ..., Bm ) .
Nesta ordem; Q tem uma tupla para cada combinao de tuplas (de R e de S)
onde quer que a combinao satisfaa a condio join. Esta a principal
diferena entre CARTESIAN PRODUCT e JOIN; em JOIN, apenas combinaes de
tuplas que satisfazem a condio join que aparecer no resultado, j no
CARTESIAN PRODUCT, todas as combinaes de tuplas so includas no resultado.
muito comum encontrar JOIN que envolva condies joins com apenas a
comparao de igualdade. Um JOIN, onde apenas o operador de comparao =
utilizado chamado EQUIJOIN. Os dois exemplos anteriores eram EQUIJOIN.
Note-se, que no resultado de uma EQUIJOIN sempre ter um ou mais pares de
atributos que tem valores idnticos em todas as tuplas. Devido a esta duplicao
ser desnecessria, uma nova operao chamada NATURAL JOIN foi criada.
Denota-se o join natural por *, que basicamente um equijoin seguido da
remoo de atributos desnecessrios.
Prof: Msc. Hugo Dias Dos Santos
Exerccios
30
de
Aplicao.
Prof: Msc. Hugo Dias Dos Santos
31
II:SQL,DDL,
DML & DQL
Prof: Msc. Hugo Dias Dos Santos
2.1.SQL: Linguagem de Consulta
Estruturada
32
Oracle SyBase
Informix DB2
Ingress MySQL
SQL Server PostgreSQL
Interbase WampServer
Modificar ou Alterar;
Tabelas
ALTER TABLE [Nome tabela];
Vistas
ALTER VIEW [Nome_vista] AS SELECT
[lista_de_colunas] FROM nome_tabela;
Insero:
INSERT INTO nome_tabela [([col1],[col2],[coli],
[coln] )] VALUES [([val1],[val2],[vali],[valn] )] ;
Seleo:
SELECT (Lista_de_atributos) FROM
(Lista_de_tabelas);
Actualizao:
UPDATE nome_tabela SET coluna=valor WHERE
(condio);
Deleo:
DELETE FROM nome_tabela WHERE (condio);
Prof: Msc. Hugo Dias Dos Santos
Criao de Tabelas
46
A opo ON DELETE CASCADE indica que se o registo da chave referenciada for apagado
ento geram-se apagamentos em cascata para todos os registos dependentes desse.
CREATE TABLE alunos2 (numero INT(10) PRIMARY KEY, nome VARCHAR(40) NOT NULL,
Bi INT(10) UNIQUE, morada VARCHAR(80),
ndep INT(3) CONSTRAINT fk_ndep_alunos REFERENCES departamentos(ndep)
ON DELETE CASCADE ) ;
Ou no WampServer
CREATE TABLE alunos2 (numero INT(10) PRIMARY KEY, nome VARCHAR(40) NOT NULL,
Bi INT(10) UNIQUE, morada VARCHAR(80),
departamento INT(3) REFERENCES departamento(ndep)
ON DELETE CASCADE ) ;
Quando se inserem registos numa tabela possvel no especificar todos os valores de todos os campos.
Os campos em falta sero inseridos com um valor por omisso, se este estiver definido, ou com o valor
NULL.
A sintaxe para definir um valor por omisso para uma coluna a seguinte:
CREATE TABLE tabela
(coluna1 tipo_coluna1 DEFAULT valor1 [ restries_coluna1]...) ;
EXEMPLO
CREATE TABLE empregados
Premios INT(6));
Wamp
CREATE TABLE empregados
(numero INT(10) PRIMARY KEY,
Nome VARCHAR(40) NOT NULL,
data_entrada Varchar(20),
Funcao VARCHAR(20) DEFAULT Programador,
Sal INT(10) Default 200000 ,
Premios INT(6));
Os nomes das restries so usados por vrios SGBDs para dar uma
pista ao utilizador do que que correu mal durante uma instruo SQL.
importante definir nomes de restries que permitam saber
exactamente que tipo de restrio (em que tabela, em que coluna,
chave primria, chave forasteira, NOT NULL, etc.) impediu a execuo
normal do comando.
Cada programador ou equipa de programadores deve definir o seu
prprio esquema de nomeao de restries.
No existe nenhuma regra fixa mas uma sugesto usar:
descrio_coluna_tabela
Onde descrio indica que tipo de restrio se est a usar
(pk=PRIMARY KEY, fk=FOREIGN KEY, ck = CHECK, nn=NOT NULL, uni
=UNIQUE), coluna o nome sobre o qual a restrio actua e tabela
o nome da tabela dessa coluna.
Exerccios
de
avaliao
Prof: Msc. Hugo Dias Dos Santos
Os ndices
67
Exerccios
de
Prof: Msc. Hugo Dias Dos Santos
DQL: Linguagem de Consultas de Dados
78
Exerccios
de
aplicao
Prof: Msc. Hugo Dias Dos Santos
87
III:
Funes
Prof: Msc. Hugo Dias Dos Santos
O que so Funes?
88
So pedaos de cdigo, definidos pelo utillizador ou pr-definidos pela
linguagem, utilizados para manipular dados.
Aceitam um ou mais argumentos, devolvendo um valor. O argumento
uma constante, varivel ou o nome de uma coluna. O valor devolvido
serve para classificar a funo(numrica, char, Date).
As funes so utilizadas para manipular dados, tornando mais potentes
as consultas.
Dividem-se em trs grandes grupos:
Manipulao de linhas: neste grupo encontramos funes para manipular
caracteres, nmeros, datas e funes que permitem converter dados de
um tipo para outro;
Manipulao de grupos de linhas: As funes de grupo permitem obter um
valor que depende do grupo de linhas, por exemplo uma mdia, varincia ou
um mximo;
Funes analticas: Estas misturam os dois tipos anteriores: devolvem um valor
por cada linha, mas esse valor depende do grupo.
Em Oracle o utilizador pode definir as suas prprias funes usando a
linguagem de programao PL/SQL ou JAVA.
Prof: Msc. Hugo Dias Dos Santos
3.2 Funes de linha
89
ABS( ) ROUND( )
MOD( ) TRUNC( )
LOG( ) CEIL( )
SIN( ) FLOOR( )
SINH( ) POWER( )
TAN( ) EXP( )
TANH( ) SQRT( )
COS( ) SIGN( )
COSH( )
Prof: Msc. Hugo Dias Dos Santos
3.2.4 Funes para manipular datas
94
Estas funes operam sobre datas Oracle. Todas devolvem um valor do tipo data,
excepto MONTHS_BETWEEN que produz um nmero.
Formato da data:
As datas podem ir de 1 e Janeiro de 4712 AC a 31 de Dezembro de 4712 DC. O
ORACLE armazena as datas num formato numrico, que contem 7 bytes. Cada
byte armazena um dos componentes abaixo e por esta ordem:
Sculo;
Ano;
Ms;
Dia;
Horas;
Minutos;
Segundos;
A parte inteira do nmero corresponde ao ano+ms+dia, sendo a parte dcimal
as horas+minutos+segundos. A unidade de "medida" o dia.
O comando abaixo altera o formato de apresentao da data para todos os
comandos que sejam executados dentro da mesma sesso no ORACLE:
ALTER SESSION SET nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
DATE_FORMAT(<data_para_fomatar>,<formato_desejado): como
o nome indica nos permite mudar o formato da apresentao da
data. Se a letra Y fornecida em parametros for minscula ento a
dota retornada tera apenas dois digitos para o ano especificado.
EX: Select date_format(current_date(),%D/%M/%Y);
DATEDIFF (data1,data2): Retorna a diferena em dias entre
data1 e data dois. O resultado pode ser negativo.
Ex: obter a diferena de dias entre o primeiro pedido e todos
pedidos da tabela pedido;
R: SELECT data, DATEDIFF(data,(select data from pedido where
cod_pedido=1)) " diferena de dias" from pedido;
DAYOFYEAR(data): Retorna o numero do dia no ano da data em
paramentro.
Ex1: Select DAYOFYEAR(current_date());
Sintaxe:
CREATE TRIGGER nome {BEFORE|AFTER} {evento[OR...]} ON tabela
[FOR[EACH] {ROW|STATEMENT} ]EXECUTE PROCEDURE nome_da_funo
(argumentos)
O gatilho fica associado tabela especificada e executa a funo
especificada nome_da_funo quando determinados eventos
ocorrerem.
O gatilho pode ser especificado para disparar antes de tentar realizar a
operao na linha (antes das restries serem verificadas e o comando
INSERT, UPDATE ou DELETE ser tentado), ou aps a operao estar
completa (aps as restries serem verificadas e o INSERT, UPDATE ou
DELETE ter completado).
evento Um, entre INSERT, UPDATE ou DELETE; especifica o evento que
dispara o gatilho.
Vrios eventos podem ser especificados utilizando OR.
Exempo:
TRIGGER
DELIMITER $$
CREATE TRIGGER Update_empregados BEFORE UPDATE ON cliente
FOR EACH ROW BEGIN
INSERT INTO cliente_auditoria
SET acao = 'update',
cod_cliente = OLD.cod_cliente,
status = OLD.status,
modificadoem = NOW(); END$$
DELIMITER ;
Prof: Msc. Hugo Dias Dos Santos
Exemplo2
112
Administra
o
Prof: Msc. Hugo Dias Dos Santos
DCL: Linguagem de controlo de dados
120
V:Controlo de
Concorrncia
Exemplo em anexo C.
Prof: Msc. Hugo Dias Dos Santos
4. SERIALIZABLE / SERIABILIDADE
157
update teste
set nome= 'CCCCCC' A Sesso 1 executa um UPDATE e confirma a alterao,
8 where id=3; terminando a transaco. Esta alterao visvel na
commit; Sesso 1.
Select*from teste;
Administrao
8.1 - Backup e Restore
8.2 - Importar e Exportar
8.3 - Converter
8.4 - Otimizao e
Desempenho
Prof: Msc. Hugo Dias Dos Santos
164
Ob
rig
Pe ado
Ate la
n
o
Perguntas ou dvidas???
Prof: Msc. Hugo Dias Dos Santos
Prof: Santos
Outros Comandos
168
CHR
CONCAT
INITCAP
LOWER
retorno
LPAD
LTRIM
numrico
NLS_INITCAP
NLS_LOWER ASCII
NLSSORT
NLS_UPPER INSTR
REGEXP_REPLACE
REGEEXP_SUBSTR
REPLACE
LENGTH
RPAD
RTRIM
REGEXP_INSTR
SOUNDEX
SUBSTR
TRANSLATE
TREAT
TRIM
UPPER
DEREF CV
MAKE_REF ITERATION_NUMB
REF ER
REFTOHEX7 PRESENTNNV
VALUE PRESENTV
PREVIOUS
ANEXO
B
ANEXO B: MASCARA_DATA
184
MASCARA_DATA
A tabela abaixo mostra os valores possveis para a
mscara da data:
FORMATO: SIGNIFICADO
SCC ou CC: Sculo; 'S' faz preceder de '-' as datas
'BC' (Antes de Cristo)
YYYY ou SYYYY: Sculo; 'S' faz preceder de '-' as datas
'BC' (Antes de Cristo)
YYY ou YY ou Y:Ultimos 3 digitos do ano ou 2 ultimos
ou ltimo digito do ano
Y,YYY:Ano com separador dos milhares nessa posio
insert into
teste (id,nome)
values
A Sesso 1 insere uma linha e confirma a alterao,
12 (4,'dddddd');
commit; terminando a transaco. A alterao visivel na Sesso 1.
select * from
teste;
A Sesso 2 continua na mesma transaco e executa o
select *
mesmo SELECT pela sexta vez, obtendo um resultado
13 from
teste; diferente das execues anteriores. Estamos numa situao
PHANTOM READ.
14 commit; A Sesso 2 termina a transaco actual.
select *
15 from A Sesso 2 continua a ver o que j via.
teste;
Triggers
Um TRIGGER ou gatilho um objeto de banco de dados, associado
a uma tabela, definido para ser disparado, respondendo a um
evento em particular. Tais eventos so os comandos da DML (Data
Manipulation Language): INSERT, REPLACE, DELETE ou
UPDATE. Podemos definir inmeros TRIGGERS em uma base de
dados baseados diretamente em qual dos comandos acima ir
dispar-lo, sendo que, para cada um, podemos definir apenas um
TRIGGER. Os TRIGGERS podero ser disparados para
trabalharem antes ou depois do evento.
Firma
Select * from pedido join ped_produto on
(pedido.cod_pedido=ped_produto.cod_pedido) join produto on
(ped_produto.cod_produto=produto.cod_produto);
Firma 4 tabelas
select cliente.nome, quantidade, produto.nome,
cliente.cod_cliente from (cliente join pedido on
(cliente.cod_cliente=pedido.cod_cliente) join
ped_produto on (pedido.cod_pedido
=ped_produto.cod_pedido)) join produto on
(ped_produto.cod_produto =produto.cod_produto)
where cliente.nome="claudia";