Skip to content

Instantly share code, notes, and snippets.

@FernandoLins8
Last active February 18, 2022 12:19
Show Gist options
  • Save FernandoLins8/a72a3ab30b41858a4672d73ffc2ccf16 to your computer and use it in GitHub Desktop.
Save FernandoLins8/a72a3ab30b41858a4672d73ffc2ccf16 to your computer and use it in GitHub Desktop.

Banco de Dados

Conceitos: dados, tabela e banco

Segundo Navathe: Podemos descrever um banco de dados como uma coleção de dados relacionados.

Sendo "dados" certos fatos conhecidos que podem ser registrados e que possuem um significado implícito.


Exemplo: Mostrar imagem com tabela com filmes

Temos uma coleção de dados de filmes, com seus nomes, ano, etc.

Esses dados tem um significado implícito, por exemplo, o filme tal é do ano tal.


Gerenciar um banco de dados manualmente é uma tarefa trabalhosa, é preciso lidar com:

  • Inserções de dados (inclusive de dados inválidos);
  • Atualizações;
  • Remoções;
  • Leituras;
  • Lidar com acessos e atualizações simultâneas;
  • etc;

Para facilitar a tarefa complexa de manter um banco de dados existem os Sistemas de Gerenciamento de Banco de Dados (ou SGBDs);

São exemplos de SGBDs: MySQL, PostgreSQL, MongoDB, Redis, Neo4j;

Existem tipos diferentes de SGBDs, variando em linguagem para consulta, modo de armazenar e representar os dados, etc.

Estudaremos um SGBD relacional, o MySQL.

SGBDs relacionais são os mais difundidos e consolidados no momento, se baseiam no modelo relacional e tem como linguagem de consulta o SQL.

Usam "tabelas" para representar seus dados.


O banco é composto de tabelas e uma tabela define uma estrutura para os dados a serem inseridos.

Mostrar tabela

As tabelas de um banco relacional são compostas de:

  • Linhas - cada uma é uma instância do que a tabela representa;
  • Colunas - as colunas definem os atributos que as linhas terão;

  • Uma Chave Primária (Primary Key, PK) - que é uma coluna (ou combinação) escolhida para diferenciar uma linha das demais, os valores desta coluna devem ser únicos para cada linha;

  • Chave Estrangeiras (Foreign Key, FK) são colunas utilizadas para implementar relacionamentos entre linhas diferentes, com a FK de uma linha fazendo referência à PK de outra linha.


  • Os valores nas colunas são atômicos e monovalorados;

MER: O que é, relacionamentos, processo de criação do ER, converter ER para BD

Durante a construção de um banco de dados, podemos usar uma forma mais abstrata para representar a estrutura do mesmo;

Assim, é possível focar em como o banco estará organizado sem se preocupar com detalhes da implementação no SGBD;

Utilizaremos da abordagem entidade-relacionamento que é uma técnica para construir um modelo entidade-relacionamento;


São conceitos importantes para a abordagem entidade-relacionamento:

  • Entidade
  • Atributo
  • Relacionamento
  • Cardinalidade

Entidade

Conjunto de objetos sobre os quais deseja-se manter informações.

Exemplo: entidade filme

  • Notar que uma entidade se refere a um conjunto. Para se referir a um objeto do tipo dessa entidade falamos instância ou ocorrência.

  • Podemos adicionar propriedades às entidades.


Atributo

É um dado ou informação associado à cada instância de uma entidade.

Exemplo: entidade filme com atributos id, titulo e ano

  • Atributos devem ser obrigatórios e monovalorados.

Cada entidade deve possuir ainda um identificador - um conjunto de um ou mais atributos e relacionamentos para distinguir as ocorrências de uma mesma entidade.


Relacionamento

Além de atributos, podemos também expressar relacionamentos entre entidades quando estes forem importantes para o banco de dados.

Exemplo: relacionamento atuação (filme e artista)

  • Um relacionamento é um conjunto de associações entre instâncias de entidades.

Cardinalidade

Existem dois tipos de cardinalidade:

Máxima

Representa o número máximo que uma instância de uma entidade pode ter de um tipo de relacionamento.

  • A cardinalidade máxima 1 indica que uma instância só pode participar daquele relacionamento uma vez.

  • A cardinalidade máxima n indica que uma instância pode participar daquele relacionamento várias vezes.

Exemplo cardinalidade máxima avaliacao n-1 filme


Mínima

Representa a obrigatoriedade (ou não) de uma instância de uma entidade participar de um relacionamento.

  • A cardinalidade mínima 0 (opcional) indica que é uma instância pode ou não participar daquele relacionamento.

  • A cardinalidade mínima 1 (obrigatória) indica que toda instância da entidade deve participar do relacionamento.

Quando específicamos a mínima e a máxima colocamos a mínima à esquerda. Exemplo com cardinalidade mínima filme(0,n)-(1,n)categoria


Mapeamento ER-Relacional

  • Notar que um mesmo modelo ER pode gerar diferentes modelos relacionais.

Modelos diferentes irão trazer diferentes performances e facilidades (ou dificuldades) na manutenção.

Conversão de Entidades

Cada entidade será representada por uma tabela no relacional;

  • Atributos irão virar colunas;
  • Atributos identificadores serão as chaves.

Conversão de Relacionamentos

Há três formas de converter os relacionamentos para o modelo relacional:

  • Fusão de tabelas;
  • Adição de colunas;
  • Tabela própria.

No geral se busca diminuir a necessidade de junções entre tabelas e o número de chaves.

Portanto, quando possível geralmente é preferível fusão de tabelas, seguido de adição de colunas e por último tabela própria.

A escolha de como converter os relacionamentos é dependente das cardinalidades.

Fusão de Tabelas

Indicada para relacionamentos 1:1, com exceção de quando ambas as cardinalidades mínimas forem 0.

Implementa em uma única tabela ambas as entidades relacionadas com os atributos de ambas além dos pertencentes ao relacionamento.

Vantagens:

  • Evita a necessidade de junções;
  • Diminui o número de chaves.
Adição de Colunas

Indicada para 1:n ou 1:1 com ambas entidades opcionais.

Consiste em adicionar uma chave estrangeira em uma tabela de cardinalidade 1. Esta FK irá referenciar a outra tabela.

Vantagens:

  • Menor número de junções se comparada à alternativa de tabela própria.
Tabela Própria

Única alternativa possível para relacionamentos n:n.

Pode ser usada independente das cardinalidades.

SQL

Vimos anteriormente que a linguagem SQL (Structured Query Language) é a linguagem padrão para o uso em bancos relacionais.

Podemos usá-la tanto para definir a estrutura do nosso banco, como para inserir, atualizar, remover e consultar dados no mesmo.

Chamamos a parte da linguagem para definição do banco de Linguagem de definição de Dados (LDD), enquanto para manipulação em sí temos a Línguagem de Manipulação de Dados.

É importante destacar que apesar de existir um padrão, há variações entre diferentes SGBDs, com isso é necessário fazer algumas alterações no caso de mudança entre SGBDs relacionais.

LDD (DDL - Data Definition Language)

Como já vimos, para utilizar um banco relacional devemos primeiramente especificar o formato deste (tabelas, tipos de dados e relacionamentos).

Para manipular a estrutura do banco temos os seguinte comandos:

  • CREATE;
  • ALTER;
  • DROP;

CREATE

O CREATE é usado para criar:

  • Um banco de dados:
CREATE DATABASE filmes;
  • Uma tabela:
CREATE TABLE `filme` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `titulo` varchar(255) NOT NULL,
  `sinopse` longtext NOT NULL,
  `lancamento` YEAR NOT NULL,
  PRIMARY KEY (`id`)
);

ALTER

Com o ALTER TABLE é possível adicionar, modificar e remover colunas, adicionar chaves e renomear colunas.

ALTER TABLE `filme` MODIFY `lancamento` year NOT NULL;

DROP

Podemos remover tanto databases quanto tabelas com o comando DROP:

DROP DATABASE filmes;
DROP TABLE filme;

LMD (DML - Data Manipulation Language)

Com as tabelas criadas e tipos definidos podemos agora manipular os dados em sí.

Para isso temos os comandos:

  • INSERT;
  • UPDATE;
  • DELETE;
  • SELECT.

INSERT

O comando INSERT é usado para inserir um ou mais registros (linhas) na tabela.

INSERT INTO `filme` VALUES
(default, 
'Matrix', 
'Em um futuro próximo, Thomas Anderson (Keanu Reeves), 
um jovem programador de computador que mora em um cubículo escuro, 
é atormentado por estranhos pesadelos nos quais encontra-se 
conectado por cabos e contra sua vontade, em um imenso sistema 
de computadores do futuro.',
1998);

UPDATE

O comando UPDATE é usado para atualizar registros já existentes.

UPDATE `filme` SET `lancamento` = 1999 WHERE `titulo` = 'Matrix';

DELETE

O comando DELETE serve para remover um ou mais registros numa tabela.

Exemplo DELETE

DELETE FROM `filme` WHERE `id` = 1;

SELECT

Usamos o comando SELECT para retornar informações do banco.

É possível especificar tanto os registros retornados, como as colunas.

Exemplo SELECT

SELECT * FROM `filme`;

Para retornar as informações da forma desejada podemos:

  • Usar "*" para todas as colunas ou escrever os nomes das colunas desejadas separadas por vírgula;
  • Renomear colunas com AS;
  • Retornar valores distintos com DISTINCT;
  • Usar LIMIT para retornar um número máximo de registros;
  • Ordenar por quaisquer combinação de colunas com o ORDER BY.

É possível usar vários operadores na clausura WHERE para filtrar registros, por exemplo:

  • Operadores lógicos (AND, OR, NOT);
  • Operadores Relacionais (=, >, <, >=, <=, !=);
  • Operadores IN e BETWEEN, LIKE, IS NULL;

Funções de Agregação

Temos ainda no SELECT as funções de agregação, usadas para sumarizar resultados:

  • COUNT, usada para retornar a quantidades, o número de linhas por exemplo;
  • MAX e MIN para retornar o valor máximo ou mínimo de uma coluna;
  • AVG e SUM retornam a média (average) ou a soma dos valores de uma coluna.

GROUP BY

O Operador GROUP BY serve para agrupar linhas com os mesmos valores.

Podemos combina-lo com funções de agregação para por exemplo:

SELECT `lancamento`, COUNT(*) FROM `filme` GROUP BY `lancamento`;

Junções

É possível ainda, no comando SELECT combinar as informações de tabelas diferentes:

SELECT f.nome, a.nota, a.descricao FROM filme f join avaliacao a on f.id = a.filme; 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment