• BANCO DE DADOS: • Conceitos e Fundamentos: • SGBD

Propaganda


BANCO DE DADOS:
Conceitos e Fundamentos:
 Sistemas de Arquivos armazenam registros permanentes de forma desorganizada,
espalhada, já os Sistemas de BD armazenam de forma a possibilitar:





compartilhamento de dados em entre diferentes aplicações;
controle de redundância
integridade dos dados (problema: um funcionário que trabalhou 400h na semana)
concorrência
segurança dos dados.
 Arquitetura de 3 níveis: possibilita o entendimento (ao usuário) em separado das 3
aplicações de BD:



nível de visão (conceitual): como um usuário enxerga, apenas com ideias iniciais
sobre o dado contexto;
nível lógico (externo): a representação, contendo a estrutura do BD (projeto do BD);
nível físico (interno): como o armazenamento ocorre de fato.
 Catálogo de dados servem para armazenar esquemas internos, conceituais e
externos, mapeamentos e metadados.
 Esquema de BD é o projeto geral de um BD, após as definições necessárias,
contendo todos os elementos (tabelas, restrições, visões e domínios);
 Instância é um conjunto de informações constantes em um BD, em dado momento;
 Transação é um programa em execução ou processo que inclui um ou mais acessos
ao banco de dados, que efetuam leitura ou atualizações de seus registros. tem como
propriedades:





Atomicidade: tem que ser atômica, ou executa por completo ou não executa;
Consistência: tem que agir sem bagunçar o BD, de forma consistente;
Isolamento: em 2 transações paralelas, uma tem que estar isolada da outra;
Durabilidade: sempre que um BD for mudado, não pode ser perdido. Uma vez que
uma transação tenha sido executada, suas atualizações tornam-se permanentes.
SGBD:
 Conjunto de programas com o intuito de efetuar gerenciamento de uma base de
dados, de forma a permitir: criar, manter e compartilhar um banco de dados.
 Uma das funções do SGBD é limitar dados redundantes em múltiplos sistemas.
 Na orientação a objetos, os bancos de dados projetados para trabalhar com o
"pensamento OO", considera dados como sendo de 2 formas:



Dados persistentes: são armazenados fora de uma transação e sobrevivem
às atualizações. Persistência é a capacidade de um objeto persistir por meio
de diferentes chamadas do programa;
Dados transientes: são somente válidos dentro de um programa ou
transação, que tão logo terminam, os dados são perdidos .
Modelo Relacional:
 Oriundo da teoria dos conjuntos, consideram que para os usuários não importa
muito onde os dados estão e nem como eles estão;

Os outros modelos de dados são:

Hierárquico: em forma de árvore, com navegação do topo para as folhas e da direita para a esquerda;

Em rede: o formato de árvore sai e o que ficam são grafos... relacionamentos N:M podem ocorrer, diferentemente do hier.

modelo OO: são organizados numa hierarquia de tipos, com dados armazenados como objetos, podendo conter referências a outros
objetos e só podem ser acessados por outros métodos.

 A estratégia de modelagem pode ser do tipo bottom-up, inside-out ou top-down.



bottom-up: (Baixo-Acima) A partir da análise de requisitos, por exemplo, são
levantadas necessidades e nelas se baseiam todas as ideias para o BD;
inside-out: Parte-se dos conceitos mais importantes e gradativamente se vai
adicionando conceitos periféricos. Inicia-se com uma entidade importante (por
exemplo, que tenha muitos relacionamentos) e a partir dela se encontra outras
entidades com que se relaciona;
top-down: (Cima-Abaixo) Parte-se dos conceitos mais abstratos, para depois ir
chegando nos mais detalhados, por exemplo pega-se os conceitos corporativos da
organização para ir filtrando até os de interesse prático.
 Busca descrever as "coisas" do mundo real, em tabelas/entidades, com os detalhes:
 Entidades ou Tabelas: partes de um assunto segregado de forma
organizada, que mostrará nas linhas as instâncias e nas colunas os atributos
 Relacionamento: elo de ligação entre as entidades
 Atributo: propriedades de cada "coisa", colunas de uma tabela. um atributo é
um dado associado a cada ocorrência dentro de uma entidade. Para





representar chaves primárias, deve ser destacado um dos atributos ou mais,
que seja monovalorado, ou seja, que aceite apenas um valor por ocasião.
Registro ou Tupla: dados cadastrados, linhas de uma tabela
Domínio: conjunto de valores atômicos que um atributo pode assumir
Índice: elementos que auxiliam a localização rápida de um registro, tupla...
Chaves: podem ser do tipo PRIMARIA ou ESTRANGEIRA. A PRIMARY
KEY – PK identifica de forma única um campo em uma tabela, de forma a
não deixar cadastrar valores repetidos. Chave estrangeira, FOREING KEY –
FK, servem em uma 2ª tabela, para se referenciar a uma chave primária da
1ª tabela, efetivando-se assim a ligação entre as 2.
Dicionário de dados: estrutura física que armazena metadados sobre a estrutura das tabelas (metadados são dados sobre dados)
ENTIDADES FRACAS são as que não possuem atributos que sirvam como PK.
a cláusula CHECK faz a análise do que pode, dentro do domínio
Atributos podem ser DERIVADOS, quando se originam de outro.
Cancelar atualizações ainda não confirmadas: ROLLBACK TO SAVEPONTI
VIEW: materializadas, são aquelas armazenadas em BD
uma SUPERCHAVE pode possuir um nº maior de ATRIBUTOS do
que o mínimo necessário para formar a CHAVE CANDIDATA

Normalização
esse relacionamento indica PARTICIPAÇÃO TOTAL de um
conjunto de entidades em um conjunto de relacionamentos,
já o outro relacionamento ocorre de forma parcial
 Uma técnica de decomposição utilizada para busca de uma forma mais organizada e
consistente em tabelas de um Banco de Dados, evitando redundâncias e anomalias
 1ª Forma Normal - 1FN:
 Parte da definição formal de uma relação no modelo relacional básico;
 Não pode haver dados repetidos em sua estrutura;
 Tem que segregar em tabelas as colunas multivaloradas.
 2ª Forma Normal - 2FN:
 Deve estar na 1FN e todo atributo não chave tem que ser totalmente;
 Dependente da chave primária;
 Não pode existir uma dependência parcial da chave primária.
- Neste exemplo, há 2 chaves primárias;
- Os atributos NomeProd e VlrUnit se referem ao
CodProd, e não tem nada a ver com o
NumeroVenda;
- Os outros atributos é que tem relação com
aquela chave primária, portanto, precisa-se
aplicar a 2ª forma normal;
- Assim, foram separados os atributos em 2
tabelas, corrigindo o problema.
 3ª Forma Normal - 3FN:
 Deve estar na 2FN e nenhum atributo não chave primária pode deixar de ser
dependente da chave primária;
 Atributos não chave não podem se referir a outros atributos não chave.
 FORMA NORMAL DE BOYCE-CODD: uma tabela está assim se, e somente se, cada determinante é
uma chave candidata.

Modelo Entidade-Relacionamento:
 Um BD relacional é composto por um conjunto de relações e tuplas relacionadas. No
esquema de um banco de dados relacional, você define a estrutura por meio de um
conjunto de esquemas de relações e restrições de integridade.
 O modelo relacional compreende:
 RELAÇÃO  TABELA ; ATRIBUTO  COLUNA ; TUPLA  LINHA
 Processo de Montagem do DER:

Há casos em que o relacionamento pode receber atributos, por exemplo,
qual o relacionamento que há entre as entidades engenheiro e projeto?







Observações:
não pode haver atributo com mesmo nome de entidades;
o relacionamento tem um nome simples;
atributo é uma característica comum a todas as ocorrências da entidade;
atributo não deve ser no plural;
atributo geralmente em minúsculas;
É necessário que se defina a Cardinalidade. Cardinalidade é o número de entidades ao qual outra entidade pode estar associada via relacionamento.


Um para um:
(chave estrangeira em uma das duas)

Um para muitos:

Muitos para muitos:
(chave estrangeira fica na direção de muitos)
(requer a criação de uma nova tabela para representar tal relacionamento.
Uma nova entidade, como por exemplo: LOTAÇÃO_PROJETO)


É possível ainda que sejam necessários Especialização/Generalização
Controle de Concorrência:
 Restrições no BD, significam os limites do modelo do BD. Podem ser:
 Restrições de Integridade: nenhum dos atributos da chave primária po ter
valor nulo, garantindo a unicidade de uma tupla; Podem ainda ser:



integridade de domínio: o valor de um campo é do tipo definido;
integridade do campo vazio: o valor não pode ser nulo;
integridade referencial: os valores dos campos que são chave estrangeira,
devem aparecer na tabela de origem como PK.
IMPASSE: no controle de concorrência, uma transação espera
liberação de um recurso, que foi bloqueado por outra transação, que
por sua vez aguarda por um recurso bloqueado por aquela transação.






BLOQUEIO COMPARTILHADO: transação pode ler, mas não pode escrever.
Restrições de domínio: atributo pode assumir somente um tipo de valor
Restrições de Chave: cada linha da tabela tem que ser diferente uma da
outra. Jamais posso ter 2 linhas totalmente iguais, em uma mesma tabela
Restrições semânticas: (para não quebrar regras de negócio) ex.: um
funcionário não pode trabalhar mais de 24h/dia
Restrições de Estado: determina um estado válido que um BD deve ter.
Restrições de Transição: determina tratamento de mudanças do estado do BD
Restrições em razão da cardinalidade: determina que o número máximo de
instâncias de relacionamento seja aquele que foi modelado (1:N, N:N...)



Restrições por gatilhos (triggers) ou operações de tratamento de violação de
restrições: restrições impostas por triggers ou por operações de delete,
insert ou update
Restrições em razão da participação: também chamada de restrição de
cardinalidade mínima determina se a existência de uma entidade depende
de sua existência relacionada à outra entidade por meio do tipo do
relacionamento. Ou seja, determina um número mínimo de instâncias de
relacionamento em que cada entidade pode participar.
SQL - LINGUAGEM DE CONSULTA ESTRUTURADA:
 É uma linguagem normalizada, baseada no modelo relacional (só existe no modelo
relacional), que permite a comunicação com a base de dados, podendo ser
embutida nas principais linguagens de programação.
 É declarativa, ou não procedural, ou seja, os detalhes de implementação do código
digitado ficam por conta do SGBD. As LPs que não são declarativas, são chamadas
de procedurais, em que tem se que explicar como será feito, etc...
 É amplamente utilizada, por vários SGBDs, independentemente de fabricantes,
oferecendo portabilidade entre sistemas, comandos em inglês...
 Pode ser separada em DDL (Linguagem de definição aos dados) ou DML
(linguagem de manipulação dos dados).
 DDL é um conjunto de comandos para definir a estrutura de BD:
 create
TIPOS DE INDEXAÇÃO: ordenado ou por hash
 drop
CANALIZAÇÃO: tipo de técnica que reduz o nº de arquivos temporários, nas consultas
 alter
 cláusulas: constraint, foreign key, primary key, rename, deferrable, not
deferrable, initially immediate, initially deferred
 DML é um conjunto de comandos para definir os dados manipulados no BD:
 select, insert, delete e update.
 Há entendimentos ainda sobre outras 3 siglas, dentro da DML:
 DQL: data query laguage, que compreende o SELECT;
 DTL: data transaction language, para transações (COMMIT,
ROLLBACK e SAVEPOTIN);
 DCL: data control language, para comandos relativos a permissões
ou privilégios (GRANT e REVOKE).
 Principais comandos:
 CREATE table <tabela>  cria tabela (com o nome dado)
 DROP table <tabela>  apaga toda a tabela (de cujo nome)
 ALTER table <tabela>  altera estrutura da tabela
 INSERT INTO <tabela> values <registro>  insere na tabela (de nome dado
e campos informados) os valores (tal, tal, tal e tal)
 UPDATE <tabela> SET <valor> where <condição>  altera valor informado
na tabela tal, para o novo valor tal, onde ocorra assim assim e assado;
 DELETE <tabela> where <condição>  deleta tais valores, onde...;
 SELECT <atributos> from <tabela>  faz uma consulta ao banco de dados.
 TRUNCATE table <tabela> ...  deleta todas as linhas de uma tabela
 SQL GRANT...  usado para prover acesso ou privilégios para os usuários
no BD
 REVOKE...  serve para remover permissões e privilégios de acesso ao BD
RESTRIÇÕES:
- not null: restrição imposta para não aceitar valores nulos
- default: para inserir um valor padrão
- unique: colocada para impor que naquele atributo não haja valores repetidos
Ex.: em uma tabela PESSOA havia os atributos CPF e TITULO, ambas chaves candidatas. Se CPF tiver
sido a PK, cabe colocar UNIQUE na outra, como forma de fortalecer a integridade.
PRIVILÉGIOS DE ACESSO:
- GRANT <privilegio> ON <objeto> TO <usuario>  isto concede acesso
- REVOQUE...  serve para retirar aquele acesso dado.
 Exemplos de comandos:
 Criação de tabela:
CREATE TABLE clima (cidade varchar(80), temp_min int,
temp_max int, data date );
- Não Aceitar Nulos cidade varchar(0) NOT NULL
- Valores Únicos na Coluna cidade varchar(0) UNIQUE

Inserir dados nas linhas da tabela:
INSERT INTO clima VALUES ('Marabá' , 29 , 34 ,
'2013-11-29' );
obs.: O tipo BOOLEAN, pode ser TINYINT !!
obs.: O tipo ENUM dispõe de "lista prévia"






Selecionar dados nas linhas da tabela:
- tudo da tabela SELECT * FROM clima;
- com 1 condição  SELECT * FROM clima WHERE cidade='Boa Vista';
- com 2 condições  SELECT * FROM clima WHERE cidade='RR' AND temp_min > 30;
- sem linhas duplicadas SELECT DISTINCT cidade FROM clima;
- em ordem  SELECT DISTINCT cidade FROM clima ORDER BY cidade;
- Agregação (contar - count, somar - sum, média - avg, máximo - max e mínimo - min):
SELECT MAX(temp_min) FROM clima;  37
SELECT SUM(temp_min) FROM clima;  313
(SUM soma todos os valores, diferentemente
de COUNT, que apenas conta os registros)
SELECT AVG(temp_min) FROM clima;  34,7
SELECT MIN(temp_min) FROM clima;  34
SELECT COUNT(temp_min) FROM clima;  9
Outras situações:
SELECT COUNT(DISTINCT cidade) from clima
(conta quantos campos CIDADE estão preenchidos, sem repetições, só os distintos).
SELECT * FROM clima LIMIT 0, 50  mostra tudo até o limite de 50 registros
SELECT * FROM clima LIMIT 10, 70  mostra todos, no limite, da posição 10 até a posição 70
- Usando o GROUP BY:
SELECT cidade, MAX(temp_min) FROM clima
GROUP BY cidade;
(vai indicar por exemplo, em cada cidade,
qual foi o máximo alcançado de temp_min,
agrupando-se por cidade)
(Se quisesse por exemplo, saber de cada temp_min,
qual foi a cidade, seria assim)
- Usando HAVING:
SELECT cidade, MAX(temp_min) FROM clima
GROUP BY cidade HAVING max(temp_min) < 29
(Pega a mesma consulta anterior,
"tendo" aquela condição)
(só pode haver HAVING, dentro de GROUP BY
- Usando o ORDER BY:
SELECT cidade FROM clima GROUP BY cidade
ORDER BY cidade ASC
(vai indicar em ordem crescente)
SELECT cidade FROM clima GROUP BY cidade
ORDER BY cidade DESC
(vai indicar em ordem decrescente)
- Usando LIKE:
SELECT * FROM clima
 ... where NOME LIKE 'A%'  começam com A
 ... where NOME LIKE '%A'  terminam com A
 ... where NOME LIKE '%A%'  tenham A em qualquer posição
 ... where CELULAR LIKE '8%' OR TELEFONE LIKE '8%'  todos, com um campo
CELULAR começando por 8 ou no campo TELEFONE, começando por 8
 Existe ainda o NOT LIKE, para o contrário.
- Outras formas de seleção com WHERE:
igual  SELECT * FROM clima WHERE temp_min = 37;
diferente  SELECT * FROM clima WHERE temp_min <> 37;  ou o sinal !=
ou  SELECT * FROM clima WHERE temp_min < 37 OR cidade LIKE '%M';  ou o sinal ||
<=  SELECT * FROM clima WHERE temp_min <= 37;
>=  SELECT * FROM clima WHERE temp_min >= 37;
=  SELECT * FROM clima WHERE temp_min = 37 AND cidade LIKE '%M';  ou o sinal &&
verdadeiro  SELECT * FROM clima WHERE campo IS TRUE;
falso  SELECT * FROM clima WHERE campo IS NOT TRUE;
só nulos  SELECT * FROM clima WHERE campo IS NULL;
só não nulos  SELECT * FROM clima WHERE campo IS NOT NULL;
num intervalo  SELECT * FROM clima WHERE temp_min BETWEEN 27 AND 34
fora do intervalo  SELECT * FROM clima WHERE temp_min NOT BETWEEN 27 AND 34
- SELECT dentro de SELECT:
SELECT * FROM clima WHERE temp_min > (SELECT AVG(temp_min) FROM clima;
(Serão selecionados tudo da tabela clima, desde que temp_min seja maior do que a média
entre todas as temp_min da tabela clima)

Alterar dados nas linhas da tabela:
UPDATE clima SET temp_max = temp_max - 2 WHERE data > '2001-11-28';

Excluir dados das linhas da tabela:
DELETE FROM clima WHERE temp_max = 22;

Chaves primárias na tabela:
CREATE TABLE cliente (
id INT NOT NULL,
cpf VARCHAR(20) UNIQUE,
nome VARCHAR (75),
PRIMARY KEY (cpf)

)
Chaves estrangeiras na tabela:
CREATE TABLE cliente (
id INT NOT NULL,
cpf VARCHAR(20) UNIQUE,
nome VARCHAR (75),
PRIMARY KEY (cpf)
FOREIGN KEY (id) REFERENCES usuario(id)  o "id" desta tabela, pega o "id" de uma
outra tabela, chamada "usuario"
)
- Obs.: Este caso acima trata da cardinalidade de 1:1;
- Poderia ainda ser de 1:N, e em SQL ficaria um campo "id", mas a FOREIGN KEY vem para
um outro campo criado. Exemplo: FOREIGN KEY (banco_id) REFERENCES banco(id), que
indica que no campo desta tabela chamado "banco_id" virá o que houver no campo "id" da
tabela "banco";
- Se fosse uma cardinalidade de N:N, uma 3ª tabela sendo criada, o que ocorre é que na
tabela resultante, vai uma FK de cada tabela originária. Por exemplo, as 2 tabelas "alunos" e
"turmas" tem relação de N:N e portanto é criada uma tabela chamada "alunoTurma", ficando
assim: FOREIGN KEY (aluno_matr) REFERENCES aluno(id),
FOREIGN KEY (turma_num) REFERENCES turma(id).

Joins: servem para extrair informações de 1 ou mais tabelas em um único
conjunto de resultados, com base nos relacionamentos envolvidos.
 2 Tabelas foram criadas, povoadas com dados e a JOIN agora serve para extrair dados das 2 tabelas em conjunto.
 Mas neste caso, os dados foram apenas jogados ali. Sem ordenação.
 Se for utilizada a instrução ON, fica:
 Neste caso abaixo, com o INNER JOIN é mostrado somente os dados que se quer, sem maiores preocupações.
 Neste caso ao lado, com o uso do LEFT JOIN, é possível ver todas os nome de marcas, e mesmo que em um destes não haja
qualquer registro correspondente, é automaticamente preenchido com NULL. Ele pega todos os dados da esquerda, sem se
preocupar com a parte da direita, preenchendo ali com NULL.
.
 Neste caso ao lado, com o uso do RIGHT JOIN, é possível ver todas os nome de marcas, em situação contrária. Ele pega todos
os dados da direita que existem, sem se preocupar com a parte da esquerda, preenchendo ali com NULL.
 Um último caso de JOIN, é o FULL JOIN, que considera todas as da esquerda e da direita, preenchendo o que for vazio com
NULL.

Gatilhos (triggers): definem um conjunto de ações a serem executadas quando ocorre um evento de
BD em uma determinada tabela. Pode ser uma operação de exclusão, inserção ou de atualização. Por
exemplo, se for definido um gatilho para exclusão em uma determinada tabela, a ação do gatilho
ocorre sempre que se remove uma ou mais linhas da tabela. Junto com as restrições, os gatilhos
podem ajudar a impor regras de integridade com ações como exclusões ou atualizações em cascata.
Os gatilhos também podem realizar várias funções como emitir alertas, atualizar outras tabelas, enviar
e-mail, e outras ações úteis. Pode ser definido qualquer número de gatilhos para uma única tabela,
inclusive vários gatilhos para a mesma tabela para o mesmo evento. O gatilho não precisa residir no
mesmo esquema da tabela para a qual é definido. Se for especificado um nome de gatilho qualificado,
o nome do esquema não poderá começar por SYS.
CREATE TRIGGER nome-do-gatilho
{ BEFORE | AFTER }  EM QUE OCASIÃO?ANTES OU DEPOIS?
{ INSERT | DELETE | UPDATE [ OR …] }  EM QUE EVENTO?
ON nome-da-tabela  ONDE SERÁ UTILIZADA?
[FOR EACH { ROW | STATEMENT }]
EXECUTE PROCEDURE
 COMANDOS SQL...
nome-da-função

Os gatilhos são definidos como: BEFORE (antes) ou AFTER (depois). Os gatilhos BEFORE disparam antes das
modificações da instrução serem aplicadas, e de qualquer restrição ser aplicada. Os gatilhos AFTER disparam
após todas as restrições terem sido satisfeitas e as alterações terem sido aplicadas à tabela de destino. Tanto o
gatilho BEFORE, como o AFTER pode ser tanto de linha (ROW) quanto de instrução (STATEMENT).

O gatilho é disparado por um dos seguintes eventos do Banco de Dados, dependendo de como foi definido:
INSERT, DELETE, UPDATE. O gatilho pode ser especificado para disparar antes de tentar realizar a operação
na linha ou após a operação. Se o gatilho for disparado antes do evento, o gatilho pode evitar a operação para a
linha corrente, ou modificar a linha sendo inserida (para as operações de INSERT e UPDATE somente).

Tipos de Dados:













Strings de Caracteres:
 CHAR: especifica um número, já armazenando aquele tamanho em memória,
mesmo que não seja utilizado (acrescenta espaços nos campos vazios);
 VARCHAR: especifica um tamanho, que pode variar até aquele número
máximo, de forma a não preencher com espaços os campos vazios;
 CLOB: Character Large Object, que armazena grandes grupos de caracteres,
até o valor especificado
Strings Binários:
 BLOB: usado para armazenar dados não tradicionais,
como imagens, áudio e arquivos de vídeo
Números: INTEGER; SMALLINT; NUMERIC; FLOAT; DOUBLE
Date: Composto por ano, mês e dia: 2013-12-21;
Time: Composto por hora, minuto e segundo;
DateTime: Combina data e hora em um único tipo, com intervalo de datas;
TimeStamp: Engloba os campos date e time, mais 6 posições para a fração decimal
de segundos e qualificação opcional WITH TIME ZONE;
Bancos de Dados Distribuídos:
Coleção de várias bases, logicamente inter-relacionadas, distribuídos por uma rede, distantes
geograficamente, administrados separadamente, com interconexão lenta e replicação dos dados. Podem ser:
- Homogêneo: compostos pelos mesmos BDs
- Heterogêneo: compostos por mais de uma base de dados.
A replicação pode ocorrer das seguintes formas: SÍNCRONA (cada transação é dada como concluída quando
todos os nós confirmam) ou ASSÍNCRONA (o nó principal manda a confirmação e então manda a transação
aos demais nós)
A fragmentação dos dados pode ser:
- vertical: distribui uma relação em sub-relações, pré-definidos por um conjunto das colunas da relação original;
- horizontal: distribui conjuntos de tuplas entre os bancos
Vantagens: reflete a estrutura organizacional, autonomia local, maior disponibilidade, melhor performance,
econômico e modular
Desvantagens: complexidade, alto custo, segurança e difícil integridade.
Download