-- CREATE DATABASE locadora_de_fitas-- Tabelas Primarias (Chave primaria)CREATE TABLE ATORES ( idAtor SERIAL PRIMARY KEY NOT NULL, nomeReal VARCHAR(120) NOT NULL, dataNasc DATE NOT NULL);CREATE TABLE CATEGORIAS ( idCategoria SERIAL PRIMARY KEY NOT NULL, nome VARCHAR(120) NOT NULL);-- Tabelas Secundaria(Chave primaria e estrangeira)CREATE TABLE CLIENTES ( idClient SERIAL PRIMARY KEY NOT NULL, nome VARCHAR(120) NOT NULL, idAtor INTEGER NOT NULL, FOREIGN KEY (idAtor) REFERENCES ATORES (idAtor));CREATE TABLE DEPENDENTES ( idClient INTEGER PRIMARY KEY NOT NULL , grau_parentesco VARCHAR(20) NOT NULL, FOREIGN KEY (idClient) REFERENCES CLIENTES (idClient));CREATE TABLE FILMES ( idFilme SERIAL PRIMARY KEY NOT NULL, titulo VARCHAR(120) NOT NULL, idCategoria INTEGER NOT NULL, FOREIGN KEY (idCategoria) REFERENCES CATEGORIAS (idCategoria));CREATE TABLE FITAS ( idFilme SERIAL PRIMARY KEY NOT NULL, numero INTEGER NOT NULL, FOREIGN KEY (idFilme) REFERENCES FILMES (idFilme));CREATE TABLE ESTRELA ( idFilme INTEGER PRIMARY KEY NOT NULL, idAtor INTEGER NOT NULL, FOREIGN KEY (idFilme) REFERENCES FILMES (idFilme), FOREIGN KEY (idAtor) REFERENCES ATORES (idAtor));CREATE TABLE LOCACAO ( numero INTEGER PRIMARY KEY NOT NULL, idClient INTEGER NOT NULL, dataLocacao DATE NOT NULL, dataDevolucacao DATE NOT NULL, FOREIGN KEY (idClient) REFERENCES CLIENTES (idClient) FOREIGN KEY (numero) REFERENCES FITAS (numero));
Configuração do Ambiente:
Postgress; MariaDB;
Tipos de dados e custo de armazenamento
Tabelas, Colunas e Registros
Tabelas: O banco de dados e organizado por tabelas que possuem linha e colunas, cada tabela precisa-se ter um nome único e uma chave-Única para identificar cada linha.
Colunas: Representar um atributo especifico que guardam um tipo de dado especifico: texto, numero, data entre outros.
Registro: São os dados dentro da tabela.
Restrições de Valor:
NOT NULL → Valor não pode ser nulo UNIQUE → Valor tem que ser unico DEFAULT → Define um valor padrão se não for passado valor algum
Chaves-Primarias e Estrangeiras
Primaria → Valor unico na tabela, ele que pode indentificar o registro. ex: CPF, id.
Estrangeira → Chave primaria de outra tabela para futuros relacionamento entre tabelas.
Tipos de dados
Dentro do SQL
Texto
TEXT
Inteiros
INTEGER/INT
Decimal/Numerico
Decimal/ Numeric
Caractere/Varchar
Character/Varchar
Data/Hora
Data/Time
Booleano
Boolean
Auto Incremento→ Informações que incremente automaticamente ex: POSTGRES=SERIAL(Comando começa em 1 e incremente +1 para cada adição de um novo registro)
phpMyAdmin=AUTO_INCREMENT.
Criar uma Tabela
-- Como criar uma TabelaCREATE TABLE NomeTabela{ id SERIAL NOT NULL, nome VARCHAR(255) NOT NULL COMMENT "NOME", data DATE COMMENT "DATA"}
--Como não criar uma tabelaCREATE TABLE NomeTabela{ id INTEGER, nome TEXT, data DATETIME --data e hora}
CRUD
Create → INSERT INTO
Read → SELECT
Update → UPDATE
Delete → DELETE
--CREATEINSERT INTO nome_Tabela (colunaInt,colunaTexto02) VALUES (1,"valorcolunar2")--Exemplos-- PROJETOSINSERT INTO PROJETOS (descricao, categorias) VALUES ('Projeto 1', 'Desenvolvimento, front-end, back-end, banco de dados');-- CATEGORIASINSERT INTO CATEGORIAS (tipoProjeto, descricao, horasNecessarias) VALUES ('Banco de dados', 'Desenvolvimento de banco de dados', INTERVAL '46 hours');-- FUNCIONARIOINSERT INTO FUNCIONARIO (nome, funcao) VALUES ('João', 'Desenvolvedor');-- CLEINTESINSERT INTO CLIENTES (cpnj_cpf, investimento, nomeEmpresa) VALUES ('123456789', 10000.00, 'Empresa 1');--ReadSELECT (informacoes vc quer) FROM (de que tabela?) WHERE (CONDIÇÕES) AND (JUNÇÃO)-- 1 Retorna todo os projetos de um clienteSELECT cl.idcliente ,ct.idprojetos, p.descricao, p.categorias FROM projetos p, clientes cl, contratos ct WHERE cl.idcliente=3 AND ct.idcliente=cl.idcliente AND p.idprojetos=ct.idprojetos--UpdateINSERT INTO nome_Tabela SET (colunaInt=1,colunaTexto02="novo texto") WHERE colunaInt=1-- o where e a condição para que seja um registro unico e não atualizar todos dados da tabela--DeleteDELETE FROM nome_tabela WHERE colinaInt=1-- o where e a condição para que seja deletado um unico registro e não deletar todos dados da tabela
Alterando e Excluindo Tabelas
Alter Table → Alterar informações da tabela ou excluir, modificar restrições, indices, renomear tabelas dentre outros.
Drop Table → Deleta a tabela 👿
--Alterar TabelaALTER TABLE nome_tabela RENAME novatabela;-- Dependo do dado da coluna o comando pode ser diferenteALTER TABLE nome_tabela MODIFY COLUMN colunaVAR150 VARCHAR(255);--Deletar TabelaDROP TABLE nome_tabela;
Mudando informações Existente Cuidados
ON DELETE → Especifica o que acontecer com o registros dependentes quando um registro “PAI” e excluído.
ON UPDATE → Define o comportamento dos registros dependentes quando um registro “Pai” e alterado.
CASCADE →
SET NULL →
SET DEFAULT →
RESTRICT →
Normalização de dados
Inconsistência dos dados? como resolver isso e so Normalizar a entrada de dados.
Formular os dados que entram por exemplo: CPF e String ou int? Você vai dizer e adotar como padrão.
6FN → tem como objetivo eliminar a redundância
1FN → ATOMICIDADE DE DADOS
2FN → Todos atributos não chaves devem depender da Chave-Primaria.
3FN → Nenhum coluna que não e chave pode depender de outra coluna que não e Chave
UPDATE nometabela SET rua= SUBTRING_INDEX(SUBSTRING_INDEX(endereco, ',',1),',',-1);
Consultas com junções e Sub Consultas
inner join,
left join
Right join
Full Join
Sub-Consultas
SELECT * FROM nomeTabela WHERE id NOT IN (SELECT id_coluna FROM tabela2);
Funções agregadas e agrupamento de resultados
Índices
Funções Agregadas
COUNT → Conta o numero de registros
SUM → Soma os valores de uma coluna numerica
AVG → Calcula amedia dos valores de um coluna numerica
MIN → REtorna o valor minimo de uma coluna
MAX → Retorna o valor maximo de uma coluna
Agrupamento de Resultados
group by
Indices de Buscas
idx_index
Editando e removendo dados
Permissionamento e Views
Índices
View
CREATE VIEWCREATE MATELIZE VIEW
Stored Procedures
Pode ser armazenados de forma compilada no catalogo do SGBD;
Procedures não retorna um valor para o usuario (função retorna valor para o usuario)
Procedures → Rotina para o SGBD não precisa retorna nada
Function → Rotina que retorna-ra uma valor para o usuario.
Salva em cache do banco
O codigo e armazenado na stored procedures no banco
Aumenta a manipulação de tipos de dados complexos usados pelos procedimentos
Aumenta a segurança por limitar o acesso de alguns usuarios ao BD
Call
Desvantagem: Quando voce ultiliza mais de 1 SGBD,
Podem ser implementadas de varios modos; Lingugagens não-procedurais;
Procedurais → Seguem o padrão SQL/PSM(ISO Starndard);
Linguagens externas geralmente C++;
Implementação (lingugagem procedural)
SQL/PSM → Persistent Stored Modules
Cada SGBD ofere sua propria linguagem (Oracle Pl/SQL)
PostgreSQL → SPs não retornam valores, e plpgsql
PostgreSQL 11 introduziu o comando CREATE PROCEDURE com suporte a transações.
Diferança entre Funciton e Procedure
Funciton → Chamada parte de um query Select, não permite realizar commit ou rollback;
Procedure → Chamada de modo isolado usando call; Pode realizar commit ou rollback;
CREATE [OR REPLACE] PROCEDURE name ([[argname] argtyoe[, ...]])LANGUAGE plpgsqlAS && DECLARE --Declaraçao variavel BEGIN --Corpo da stored procedure END;$$;CALL procedure_name (params, 'Rua dos Corsarios 120', '47 99999-9999');
Não seguem o modelo de tabelas e relacionamento( pode ser chave valor)
Alto volume dad dados
Alta escalabilidade.
Alta Flexibilidade na estrutura de dados
Tolerância a falhas.
Comumente utilizados onde o cenário de consistência imediata dos dados não e critica.
Tipos
key-values
Documentos
Colunas
Grafos
…
Key-Value→ Armazenamento por chave valores
Exemplos: Redis, Riak, Amazon DynamoDB.
Document → Armazenam dados em documentos semiestrturados(JSON).
Exemplos: MongoDB, Counchbase, Apache, CouchDB.
Colunas → Armazenam em formato d colunas, permite alta escalabilidade e eficiencia em determinados tipos de consultas
Exemplos: Apache Cassandra, ScyllaDB, HBase
Grafo → Armazem e consultar dados interconectados, onde os relacionamentos entre os dados são tão importante quanto os proprios dados
Exemplos: Neo4j, Amazon Neptune, JanusGraph.
MongoDB
DataBase →
Coleção → Agrupamento de documentos, Não Existe uma estrutura de documento.
OBS: nome de coleção devem seguir algumas regras: devem começar com uma letra ou um underscore (_); Podem conter letras, números ou underscores; Não podem ser vazios; Não podem ter mais de 64 bytes de comprimento.
Documentos → São armazenados dem BSON(BINARY JSON), que são estruturas flexiveis e semiestruturadas; Cada documento possui um indentificador unico chamado _id; Composto por pares de chaves e valores.
OBS: Tamanho maximo de 16MB; Aninhamento de documentos; Flexibilidade na evolução do esquema;
TIPOS DE DADOS SIMPLES
STRING
NUMBER
BOOLEAN
DATE
NULL
OBJECTID
Dados complexos → Arrays; Documento Embutido(Embedded Document); Referência, GeoJSON;
Dados aninhados são específicos para o documento pai; Os dados aninhados são sempre acessados juntamente com o documento pai; A cardinalidade do relacionamento e um-para-muitos(parentes, enderecos);
Se os dados precisam ser consultado e atualizados independentemente do documento pai, e mais adaquedado ultilizar coleções separadas.