Introdução a Bancos de Dados
STRUCTURED QUERY LANGUAGE
- DDL - Definition
- Estrutura (tabelas, visões, sequenciais)
- DML - Manipulation
- Manipulação dos dados (inserir, alterar e excluir)
- DQL - Query
- Consulta (retorna dados, ordena, agrupa, filtra, recupera, faz funções aritméticas)
- DCL - Control
- Acesso aos dados (habilita/revoga)
- DTL - Transaction
- Transações (inicia, concretiza, anula)
Principais Bancos de Dados disponíveis no mercado:
(SGBD = Sistema Gerenciador de Banco de Dados)
Database Management System
--> MySQL (http://www.mysql.com/)
--> PostgreSQL (http://www.postgresql.org.br/)
--> Firebird (http://www.firebirdsql.org/)
--> Oracle (http://www.oracle.com/br/index.html)
--> MS Acess (http://office.microsoft.com/en-us/access/)
A normalização dos dados serve para:
- evitar anomalias
- evitar redundância dos dados
- maximizar a performance
- manter a integridade dos dados
- aumentar o número de tabelas
Tipos de Relacionamentos (ligações entre as tabelas)
- 1:1 cada registro tem apenas um registro correspondente na outra tabela.
- Ex: Pessoas --> Habilitação motorista
- 1:* Cada registro pode ter mais de um correspondente na outra tabela.
- *:* Cada registro pode ter mais de um correspondente na outra tabela e vice-versa.
- Ex: Pessoas --> Profissões
Chaves (contadores simples)
- Chave primária (PK)
- Chave secundária (FK)
Anomalias dos dados
- Anomalia de inserção --> impede a inclusão de registros devido à falta de dados.
- Anomalia de exclusão --> impede a exclusão de registros devido ao relac. com outra tabela.
- Anomalia de alteração --> impede a alteração de registros devido ao relac. com outra tabela.
Formas normais
FN1
Cada linha de tabela deve representar um único registro.
Cada célula de tabela deve conter um único valor.
FN2
Atributos não chave devem depender de alguma das chaves da tabela.
FN3
Atributos não chave da tabela dependem exclusivamente da chave primária da tabela.
FN4 e FN5
Separam em novas tabelas valores que ainda estejam redundates em uma mesma coluna.
Criando um Banco de Dados
Tipos de dados
- Booleano
- Numéricos inteiros
- TinyInt (-128 a 127) ou (0 a 255 unsigned)
- SmallInt (-32768 a 32767) ou (0 a 65535 unsigned)
- Int
- BigInt
- Numéricos com casas decimais
- String
- Char (tamanho definido)
- Varchar (tamanho variado)
- Text
- Armazenamento de grandes informações de strings
- Data e hora
- Date
- Time
- Datetime
- Timestamp
- Listas customizadas
- Blob
- Permite armazenamento de informações binárias, arquivos e imagens
- Redes
- Monetários (com formatação)
- Geométricos
- Informações de formas geométricas
Atributos
- NULL / NOT NULL
- Signed / Unsigned
- Auto_increment
Boas práticas de armazenamento
- Espaço em disco
- Processamento e busca
- Mau uso de tipos de dados
Criando um banco de dados
- CREATE DATABASE nome
- ALTER DATABASE nome propriedade/função
- DROP DATABASE nome --> Irreversível
Criando uma tabela
- CREATE TABLE nome (campos)
--> Tipo de dado nome Atributos (NULL, zerofill, unsigned, auto-increment, chave)
- ALTER TABLE nome propriedade
- DROP TABLE nome --> Irreversível
- CONSTRAIN nome FOREIGN KEY (nome) REFERENCES tabela (campo)
Criando um índice
- CREATE INDEX nome ON tabela e coluna
- ALTER INDEX nome propriedade
- DROP INDEX nome
Criando sequência (campo de auto incremento)
- CREATE SEQUENCE nome
- ALTER SEQUENCE nome propriedade
- DROP SEQUENCE nome
- INSERT INTO tabela (campo1, campo2) VALUES (valor1, valor2)
- SELECT campos FROM tabela
- UPDATE tabela SET campo=valor
- DELETE FROM tabela --> deleta todos os registros
Filtros de seleção
- WHERE
- Operadores relacionais:
- =; !=; >; <; >=; <=; IS NULL; IS NOT NULL; BETWEEN; LIKE (valor parcial)
- AND; OR; NOT
Consultando dados com filtros
- SELECT campos FROM tabela WHERE condição
- UPDATE tabela SET campo=valor WHERE condição
Atributos especiais
- SELECT campos FROM tabela apelido...
- SELECT campo AS apelido FROM...
- SELECT... UNION ALL SELECTION...
- SELECT... UNION SELECTION... (Não traz registros duplicados)
- SELECT ... FROM t1 JOIN t2 ON t1.FK=t2.PK
- SELECT ... FROM t1 JOIN t2 USING chave
- INNER JOIN --> Só mostra no resultado os registros que possuem correspondência entre as tabelas.
- SELECT * FROM tab1 JOIN tab2 ON tab1.campoX = tab2.campoY
- EQUI JOIN
- SELECT * FROM tab1 JOIN tab2 USING(campo)
- NON EQUI JOIN
- OUTER JOIN
- LEFT JOIN, LEFT OUTER JOIN
- RIGHT JOIN, RIGHT OUTER JOIN
- FULL OUTER JOIN
- SELF JOIN
- CREATE VIEW nome AS expressão
- ALTER VIEW nome propriedade
- DROP VIEW nome (Os dados permanecem na tabela de origem)
Funções Especiais e Subqueries
Funções de Agregação
- COUNT
- SUM; AVG (Média); MAX; MIN
Função de Paginação
- DISTINCT - seleciona valores únicos, sem repetição
- ORDER BY (ASC e DESC)
- LIMIT - limita o número de resultados retornados
- OFFSET - indica quantos registros devem ser avançados
Funções de Agrupamento
- GROUP BY - agrupamento de registros para operações
- SELECT campo1, AVG(campo2) FROM tab1 GROUP BY campo1
- HAVING - filtrar categorias de registros
- SELECT campo1, AVG(campo2) FROM tab1GROUP BY campo1 HAVING AVG(campo2)>150
Garantir que somente pessoas autorizadas possam realizar ações com os dados.
- Servidor - Coluna - Banco
- Registro - Operação - Tabela
- CREATE USER 'nome'@'local' IDENTIFIED BY 'senha'
- DROP USER nome
- GRANT - habilita acessos
- GRANT ação ON estrutura TO usuário
- REVOKE - nega acessos
- REVOKE ação ON estrutura FROM usuário
*Ações: ALL, SELECT, INSERT, UPDATE, DELETE
*Estruturas: TABLE, VIEW, SEQUENCE
- Atomicidade --> "tudo ou nada"
- Consistência
- Isolamento --> "uma de cada vez"
- Durabilidade
Fonte: Curso de SQL Completo elaborado por André Milani.
www.softblue.com.br