Banco de dados – DebugEverything https://blog.debugeverything.com Uma nova maneira de aprender programação Fri, 17 Feb 2023 09:00:20 +0000 pt-BR hourly 1 https://wordpress.org/?v=7.1.4 https://blog.debugeverything.com/wp-content/uploads/2021/04/cropped-DE_white-32x32.png Banco de dados – DebugEverything https://blog.debugeverything.com 32 32 Bancos de Dados Relacionais e Não-Relacionais: Diferenças e Exemplos https://blog.debugeverything.com/pt/bancos-de-dados-relacionais-e-nao-relacionais-diferencas-e-exemplos/ https://blog.debugeverything.com/pt/bancos-de-dados-relacionais-e-nao-relacionais-diferencas-e-exemplos/#respond Fri, 17 Feb 2023 09:00:19 +0000 https://blog.debugeverything.com/?p=2515 Um banco de dados é uma ferramenta essencial para a maioria dos projetos de software. Quando se trata de escolher um banco de dados, uma das decisões mais importantes é se você deseja usar um banco de dados relacional ou não-relacional. Neste artigo, vamos explorar as diferenças entre esses dois tipos de bancos de dados e dar exemplos de quando é melhor usar cada um.

O que é um Banco de Dados Relacional?

Um banco de dados relacional é um banco de dados que armazena informações em tabelas. Cada tabela é composta de colunas que definem os tipos de dados que podem ser armazenados, e linhas que representam os registros individuais. Um exemplo comum de um banco de dados relacional é o MySQL.

Existem várias vantagens em usar um banco de dados relacional. Em primeiro lugar, é fácil de entender e de usar. Os dados são organizados em tabelas, o que torna a estrutura dos dados fácil de entender. Em segundo lugar, um banco de dados relacional é altamente estruturado e fortemente normalizado, o que ajuda a manter a integridade dos dados. Finalmente, um banco de dados relacional é altamente seguro, com muitas opções para proteger os dados e impedir o acesso não autorizado.

O que é um Banco de Dados Não-Relacional?

Um banco de dados não-relacional é um banco de dados que armazena informações sem a estrutura de tabela rígida de um banco de dados relacional. Em vez disso, ele usa uma variedade de estruturas de dados, como documentos, grafos ou pares de chave-valor. Um exemplo comum de um banco de dados não-relacional é o MongoDB.

Existem várias vantagens em usar um banco de dados não-relacional. Em primeiro lugar, é altamente flexível e escalável, o que o torna ideal para aplicativos em que os dados estão em constante mudança ou em que você precisa armazenar grandes quantidades de dados. Em segundo lugar, um banco de dados não-relacional é altamente eficiente, com tempos de resposta rápidos e baixo consumo de recursos.

Comparação entre Bancos de Dados Relacionais e Não-Relacionais

Aqui estão algumas das principais diferenças entre bancos de dados relacionais e não-relacionais:

  • Estrutura de Dados: Um banco de dados relacional usa uma estrutura de tabela rígida, enquanto um banco de dados não-relacional usa uma variedade de estruturas de dados, como documentos, grafos ou pares de chave-valor.
  • Flexibilidade: Um banco de dados não-relacional é mais flexível do que um banco de dados relacional, permitindo que você adicione campos ou coleções de dados sem afetar a estrutura do banco de dados como um todo.
  • Escalabilidade: Um banco de dados não-relacional é mais escalável do que um banco de dados relacional, tornando mais fácil lidar com grandes quantidades de dados.
  • Integridade de Dados: Um banco de dados relacional é altamente estruturado e fortemente normalizado, o que ajuda a manter a integridade dos dados, enquanto um banco de dados não-relacional pode ser menos estruturado e, portanto, pode haver menos controle sobre a integridade dos dados.
  • Consultas: Um banco de dados relacional usa a linguagem SQL para consultas, enquanto um banco de dados não-relacional usa outras linguagens, como JavaScript ou JSON. Isso pode fazer uma grande diferença na forma como as consultas são escritas e executadas.

Exemplos de Bancos de Dados Relacionais e Não-Relacionais

  • MySQL: O MySQL é um exemplo de um banco de dados relacional. É uma das opções mais populares para bancos de dados relacionais e é usado por muitos aplicativos da web.
  • Oracle: O Oracle é outro exemplo popular de um banco de dados relacional. É usado por muitas empresas em todo o mundo e é conhecido por sua escalabilidade e segurança.
  • MongoDB: O MongoDB é um exemplo de um banco de dados não-relacional. É um dos bancos de dados não-relacionais mais populares e é usado por muitos aplicativos que exigem escalabilidade e flexibilidade.
  • Couchbase: O Couchbase é outro exemplo popular de um banco de dados não-relacional. É conhecido por sua escalabilidade, flexibilidade e alto desempenho.
  • Redis: O Redis é um exemplo de um banco de dados não-relacional que é usado para armazenamento em cache e para gerenciamento de sessões em aplicativos da web.

Conclusão

Na escolha entre um banco de dados relacional ou não-relacional, é importante considerar as necessidades específicas do seu projeto. Se você está trabalhando em um projeto em que a estrutura dos dados é importante, um banco de dados relacional pode ser a melhor escolha.

Se você precisa de um banco de dados altamente escalável e flexível, um banco de dados não-relacional pode ser a melhor escolha. Em última análise, a escolha do banco de dados dependerá das necessidades do seu projeto e da forma como você deseja armazenar e acessar seus dados.

Esperamos que este artigo tenha ajudado a esclarecer as diferenças entre bancos de dados relacionais e não-relacionais e ajudado a escolher a opção certa para o seu projeto.

]]>
https://blog.debugeverything.com/pt/bancos-de-dados-relacionais-e-nao-relacionais-diferencas-e-exemplos/feed/ 0
MongoDB vantagens e desvantagens https://blog.debugeverything.com/pt/mongodb-vantagens-e-desvantagens/ https://blog.debugeverything.com/pt/mongodb-vantagens-e-desvantagens/#comments Wed, 18 May 2022 12:44:38 +0000 https://blog.debugeverything.com/?p=2356 Antes de falarmos sobre as vantagens e desvantagens do MongoDB, é importante saber o que é o MongoDB, e obter uma compreensão básica de suas características e funcionamento. Se você ainda não sabe o que é o MongoDB, talvez seja melhor começar com esse post: MongoDB para iniciantes – Introdução ao MongoDB, depois você volta aqui.

O que é Mongo DB?

Mas de forma muito breve, o MongoDB é um banco de dados de código aberto que utiliza um esquema de armazenamento de dados que pode ser personalizado (mais sobre isso no post).

Foi lançado em 2007, e hoje é um dos banco de dados não relacional mais populares, ele foi construído pensando em escalabilidade, máxima disponibilidade e bom desempenho, e se encontra atualmente (2022) na versão 5.0.

E qual a diferença entre base de dados relacional e não relacional? Um banco de dados NoSQL armazena dados de forma diferente dos bancos de dados relacionais; em vez de armazenar dados em tabelas de linhas e colunas, todos os registros em bancos de dados MongoDB são documentos definidos em uma representação binária de dados chamada BSON. Esta informação é recuperada por aplicativos em formato JSON.

NoSQL significa ‘Não apenas SQL’, e há muitos tipos nele, como colunas, documentos, gráficos, pares de valores chave, etc.; MongoDB é do tipo de documento como mencionado acima.

Em bancos de dados relacionais, os desenvolvedores precisam traduzir tabelas para o modelo de objeto para torná-las adequadas para uso no aplicativo; entretanto com MongoDB, tanto os dados armazenados quanto o modelo de objeto são da mesma estrutura BSON.

Vantagens

Maior flexibilidade com documentos

Como citado antes MongoDB utliza documentos como base de armazenamento de dados, isso permite que praticamente qualquer estrutura de dados possa ser modelada e manipulada facilmente. O formato de dados BSON do MongoDB, inspirado no JSON, permite que você tenha objetos em uma coleção com diferentes conjuntos de campos , por exemplo, se um usuário é casado, devemos também guardar o nome do cônjuge, se o usuário é solteiro, esse campo simplesmente não precisa existir.

MongoDB collection

Esta flexibilidade é uma vantagem incrível ao lidar com dados do mundo real e mudanças nas exigências ou no regras do negócio.

Amplamente suportado e acesso nativo em código

A maioria dos bancos de dados nos força a usar frameworks, wrappers ou ferramentas pesadas, como ORMs (Object-Relational Mappers), para obter dados na forma de Objetos para uso em programas.

Com a decisão do MongoDB de armazenar e representar dados em um formato de documento significa que você pode acessá-los de qualquer linguagem, em estruturas de dados nativas dessa linguagem (por exemplo, dicionários em Python, objetos em JavaScript, Maps em Java, etc).

No entanto, você vai sim precisar de um driver (Uma biblioteca que cria uma conexão entre sua aplicação e o banco de dados MongoDB), você pode conferir a lista com todos os MongoDB drivers nesse link.

Nesse exemplo abaixo, podemos ver como você poderia fazer para conectar e salvar novos registros em um banco de dados MongoDB usando PHP.

<?php

$cliente = new MongoDB\Client("mongodb://localhost:27017");
$colecao = $cliente->demo->alunos;

$resultado = $colecao->insertOne( [ 'name' => 'Gustavo', 'turma' => '9A' ] );
echo "Novo aluno ID: '{$resultado->getInsertedId()}'";

$resultado = $colecao->insertOne( [ 'name' => 'Tomas', 'turma' => '9C', 'turno' => 'diurno' ] );
echo "Novo aluno ID: '{$resultado->getInsertedId()}'";
?>

No exemplo, eu abro uma conexão com o banco de dados chamado demo e procuro pela coleção alunos, nessa coleção eu insiro dois novos registros, e como você pode notar o registro 2 tem parâmetros diferentes se comparado ao registro 1, o que é algo totalmente aceitável com MongoDB.

Alto desempenho

Graças ao modelo de documento utilizado no MongoDB, as informações podem ser incorporadas dentro de um único documento em vez de depender de operações JOIN dos bancos de dados relacionais tradicionais.

Por exemplo, no modelo tradicional de banco de dados, teríamos uma tabela para os nossos clientes, e uma tabela separada com os endereços desses clientes.

É claro que conseguimos reproduzir facilmente esse mesmo modelo em MongoDB simplesmente criando duas coleções, uma para os clientes e uma para os endereços. E para criar a referência entre os documentos cada endereço teria um parâmetro que seria responsável por fazer o link, nesse caso o cliente_id.

// documento do cliente
{
   _id: "72c4hxrt",
   nome: "Joe Bookreader"
}

// documentos dos endereços
{
   cliente_id: "72c4hxrt", // referencia ao documento do cliente
   rua: "123 Rua dos anjos",
   cidade: "São Paulo",
   estado: "SP",
   codigo_postal: "200128-120"
}

{
   cliente_id: "72c4hxrt",
   rua: "1 Rua Oliveira ",
   cidade: "Salvador",
   estado: "BA",
   codigo_postal: "291021-122"
}

Com MongoDB podemos simplificar e unir toda a informação em apenas um documento de forma bem mais simples utilizando o padrão de documento agregado (Embedded Document Pattern), nesse caso, agregar os endereços do cliente no documento do cliente, é o que faz mais sentido.

// documento do cliente
{
   _id: "72c4hxrt",
   nome: "Joe Bookreader",
   enderecos: [
      {
         rua: "123 Rua dos anjos",
         cidade: "São Paulo",
         estado: "SP",
         codigo_postal: "200128-120"
      },
      {
         rua: "1 Rua Oliveira ",
         cidade: "Salvador",
         estado: "BA",
         codigo_postal: "291021-122"
      }
   ] 
}

Isto torna as consultas muito mais rápidas e retorna todas as informações necessárias em uma única chamada para o banco de dados, veja como ficaria o novo documento agregando os endereços.

Quando se trata de desempenho de escrita, o MongoDB oferece funcionalidades para inserir e atualizar vários registros de uma só vez com o insertMany e o updateMany. Estas duas funções oferecem um aumento significativo de desempenho quando comparadas a gravações em lotes em bancos de dados tradicionais.

Para o nosso exemplo, onde criamos dois registros de alunos em duas chamadas distintas do método insertOne, poderíamos ter escrito utilizando o método insertMany como você pode ver abaixo.

<?php

$cliente = new MongoDB\Client("mongodb://localhost:27017");
$colecao = $cliente->demo->alunos;

$resultado = $colecao->insertMany( 
            [ 'name' => 'Gustavo', 'turma' => '9A' ], 
            [ 'name' => 'Tomas', 'turma' => '9C', 'turno' => 'diurno' ] 
);
?>

Outra grande vantagem do MongoDB, é que ele armazena a maior parte dos dados na RAM ao invés do disco rígido o que permite um desempenho mais rápido durante a execução de consultas. Para o garantir um processamento mais rápido, certifique-se de que seus índices cabem inteiramente na RAM para que o sistema possa evitar a leitura do índice a partir do disco.

MongoDB suporta transactions

Um banco de dados transacional é um banco de dados que suporta transações ACID (atomicidade, consistência, isolamento e durabilidade). Uma transação é um conjunto de operações de leitura e escrita de banco de dados onde todas ou nenhuma das operações são bem sucedidas.

As operações com um único documento sempre foram atômicas em MongoDB. O MongoDB adicionou suporte para ACID transactions multi-documento na versão 4.0, e expandiu esse suporte para incluir transações distribuídas na versão 4.2.

As garantias fornecidas pela MongoDB garantem o isolamento completo enquanto um documento é atualizado; qualquer erro faz com que a operação seja revertida retornando o documento inalterado.

Com a modelagem adequada as transações que incluem vários registros nem sempre são necessárias. Os dados em MongoDB, como vimos anteriormente, podem ser relacionados e modelados em uma única estrutura de dados, usando uma variedade de tipos, incluindo sub-documentos e arrays, fazendo isso, os usuários de MongoDB conseguem as mesmas garantias de integridade de dados que as fornecidas pelas bases de dados relacionais.

Estrutura amigável à mudanças

Se você está acostumado a ter que derrubar seu site ou aplicação para mudar a estrutura de dados, você está com sorte: MongoDB foi projetado para mudanças.

Ao contrário dos bancos de dados SQL, onde você deve determinar e declarar o esquema de uma tabela antes de inserir dados, as coleções do MongoDB, por padrão, não exigem que seus documentos tenham o mesmo esquema.

Isso significa que não há tempo de inatividade para mudar os esquemas, você pode começar a escrever novos dados com estruturas diferentes a qualquer momento, sem interromper suas operações.

Esta flexibilidade facilita o mapeamento de documentos para uma entidade ou objeto. Cada documento pode ser mapeado com os campos de um Objeto, mesmo que o documento tenha uma variação substancial em relação a outros documentos da coleção.

Na prática, porém, os documentos de uma coleção compartilham uma estrutura semelhante, e é possível aplicar regras de validação de documentos para uma coleção durante as operações de atualização e inserção.

Desvantagens

Assim como qualquer software, MongoDB também tem suas desvantagens. A sua grande maioria na verdade, são limitações que podem ser futuramente corrigidas ou melhoradas, mas no momento (2022), alguns dos pontos que vou citar abaixo poder vir a um problema para quem está pensando em usar MongoDB.

Tamanho do documento BSON

O tamanho máximo do documento BSON é de 16 megabytes.

O tamanho máximo do documento ajuda a garantir que um único documento não possa usar uma quantidade excessiva de RAM ou, durante a transmissão, uma quantidade excessiva de largura de banda. Para armazenar documentos maiores do que o tamanho máximo, o MongoDB fornece o GridFS API.

Limite de aninhamento em documentos BSON

MongoDB suporta não mais de 100 níveis de aninhamento para documentos BSON. Cada objeto ou matriz adiciona um nível.

Para exemplificar essa limitação:

{
  "_id": 1,
  "Universo": {
    "Virgo Cluster": [
      {
        "Virgo Supercluster": {
          "Local Group": {
            "Milky Way": {
              "Solar System": [
                {
                  "Earth": [
                    { "Asia": ["Countries", "..."], "Europe": ["Countries", ".."], "America": ["Countries", "..."] }
                  ]
                }
              ]
            }
          }
        }
      },
      { "Laniakea Supercluster": "..." }
    ]
  }
}

Operações de ordenação com limites

Se MongoDB não puder usar um índice ou índices para ordenar os campos de um documento, MongoDB inicia uma operação de ordenação com bloqueio de dados (blocking data sort).

O nome refere-se a um processo SORT onde todos os documentos de uma coleção são lidos para retornar um documento de saída, nesse caso o fluxo de dados para aquela consulta específica deve ser bloqueada.

Se MongoDB exigir o uso de mais de 100 megabytes de memória do sistema para a operação de ordenação, MongoDB retorna um erro a menos que a consulta especifique cursor.allowDiskUse() (Novo no MongoDB 4.4).

allowDiskUse() permite que MongoDB use arquivos temporários em disco para armazenar dados que excedam o limite de 100 megabytes de memória durante o processamento de uma operação de ordenação.

db.COLLECTION_NAME.find().sort({KEY:1})

MongoDB Principais Termos/Conceitos

SQL Termos/ConceitosMongoDB Termos/Conceitos
banco de dadosbanco de dados
tabelacoleção
linhadocumento ou BSON documento
colunacampo
indexindex
chave_primaria
Especifica uma coluna única ou combinação de colunas como chave primária.
chave_primaria
Em MongoDB, a chave primária é automaticamente definida para o campo _id.
]]>
https://blog.debugeverything.com/pt/mongodb-vantagens-e-desvantagens/feed/ 1
SQL: Comandos Essenciais https://blog.debugeverything.com/pt/sql-metodos-essenciais/ https://blog.debugeverything.com/pt/sql-metodos-essenciais/#respond Wed, 25 Aug 2021 13:23:52 +0000 https://blog.debugeverything.com/?p=2243 Certo, nesse artigo vamos ver os conceitos básicos necessários para você escrever as suas primeiras queries em SQL.

Se você tem duvidas ainda do que é SQL eu recomendo você ler esse artigo primeiro.

SQL SELECT

Vamos começar pelo mais básico e simples, SQL SELECT.

Essa comando é utilizado para selecionar dados de um banco de dados. Olha o exemplo abaixo.

SELECT coluna1, coluna2, ...
FROM nome_tabela;

Nós podemos traduzir isso como: “Selecione as colunas ‘coluna1’ e ‘coluna2’ da tabela ‘nome_tabela’;

Aqui, coluna1, coluna2, devem ser os nomes dos campos da tabela da qual você deseja selecionar os dados. Se você quiser selecionar todos os campos disponíveis na tabela, use a seguinte sintaxe:

SELECT * FROM nome_tabela;

Assim que você executa esse comando, os dados retornados são armazenados em uma tabela de resultados, chamada de conjunto de resultados.

Eu acho que da para mostrar melhor com um exemplo. Vamos então criar uma tabela para praticar.

A tabela que vamos usar será essa. Tabela “clientes”

idnomeenderecocidadepais
1
Rodrigo NascimentoBerguvsvägen 8BerlinAlemanha
2Marcio MorenoAv. Brasil 222Rio de JaneiroBrasil
3Antonio PereiraAv. Paulista 321São PauloBrasil
4
Clovis OliveiraP. Sherman 42, Wallaby WaySydneyAustralia
5Helder Santos120 Hanover Sq.BrisbaneAustralia
Tabela: clientes

A seguinte instrução SQL seleciona as colunas “nome” e “cidade” da tabela “clientes”:

SELECT nome, cidade FROM clientes;

E o seu conjunto de resultados deve ser parecido com esse:

idnomecidade
1Rodrigo NascimentoBerlin
2Marcio MorenoRio de Janeiro
3Antonio PereiraSão Paulo
4Clovis OliveiraSydney
5Helder SantosBrisbane
Conjunto de resultados

SQL WHERE

Como acabamos de ver, com o SELECT você consegue filtrar as colunas, certo? Agora digamos que você queira filtrar alguns dos elementos em cada linha.

Por exemplo, você quer saber quais são os clientes que moram no Brasil ou na Australia. Usando apenas SELECT isso não é possível.

Para isso nós precisamos do WHERE.

A cláusula SQL WHERE é usada para especificar uma condição quando se vai buscar os dados de uma única tabela ou unindo com várias tabelas.

Se a condição dada for satisfeita, ela retorna todos os registros que batem com essa condição.

O objetivo é usar a cláusula WHERE para filtrar os registros e buscar somente os registros necessários.

Para o exemplo acima, poderíamos escrever uma query assim:

SELECT nome, cidade FROM clientes WHERE pais = 'Brasil';
idnomecidade
2Marcio MorenoRio de Janeiro
3Antonio PereiraSão Paulo
Conjunto de resultados

Ok, um coisa que você precisa ter em mente, SQL requer aspas simples em torno de valores de texto como no ‘Brasil’ aí em cima (a maioria dos SGBD também vão aceitar aspas duplas).

Entretanto, para campos numéricos não se deve colocar entre aspas:

// Errado
SELECT nome, cidade FROM clientes WHERE id = '1';

//Correto
SELECT nome, cidade FROM clientes WHERE id = 1;

SQL LIKE

Nada mais conveniente que dar continuidade a essa lista com o operador LIKE, pois ele é usado em uma cláusula WHERE para procurar um padrão especificado em uma coluna.

Já sei, melhor com exemplo né?

Digamos que precisamos atualizar o endereço dos clientes no nosso banco de dados.

Precisamos trocar todo Cliente que tem no endereço a abreviação “Av” para “Avenida”, para ajudar na logística de entregas.

Mais antes dessa atualização o gerente precisa ver quantos clientes serão afetados com esse alteração.

Como “Avenida” ou “Av” não são colunas da nossa tabela, não temos como usar apenas o WHERE.

Para isso precisamos usar o LIKE, a query fica assim:

SELECT nome, endereco FROM clientes
WHERE endereco LIKE 'Av%';
idnomeendereco
2Marcio MorenoAv. Brasil 222
3Antonio PereiraAv. Paulista 321
Conjunto de resultados

Você deve estar se perguntando o que diabos esse “%” ta fazendo ali, ou que eu cometi algum erro de digitação, mas não, ta tudo certinho.

Existem dois wildcards (coringas) frequentemente usados em conjunto com o operador LIKE:

  • O sinal de porcentagem (%), que pode representar zero, um, ou múltiplos caracteres.
  • O sinal de sublinhado (_), que representa um único caracter.

Existem muitas possíveis combinações, mas vou listar aquelas que considero as mais importantes.

Operador LIKEDescrição
WHERE coluna LIKE ‘a%’Encontre quaisquer valores que comecem com “a”.
WHERE coluna LIKE ‘%a’Encontre quaisquer valores que terminam com “a”.
WHERE coluna LIKE ‘%or%’Encontre quaisquer valores que tenham “ou” em qualquer posição
WHERE coluna LIKE ‘_r%’Encontre quaisquer valores que tenham “r” na segunda posição
WHERE coluna LIKE ‘a_%’Encontre quaisquer valores que comecem com “a” e tenham pelo menos 2 caracteres de comprimento
WHERE coluna LIKE ‘a__%’Encontre quaisquer valores que comecem com “a” e tenham pelo menos 3 caracteres de comprimento
WHERE coluna LIKE ‘a%o’Encontra quaisquer valores que começam com “a” e terminam com “o”.
Operador LIKE

Então no nosso exemplo, estou usando o primeiro comando dessa tabela. E ele deve me retornar os clientes com id = 2 e id = 3.

Mas se quiser, você pode ser bem especifico, e usar o LIKE sem nenhum coringa. Assim:

SELECT * FROM clientes
WHERE endereco LIKE 'Av. Brazil 222'; 

SELECT * FROM clientes
WHERE endereco LIKE 'Av. Paulista 321';

Ainda podemos dar um upgrade nessa query, ao invés de executar duas, podemos executar apenas um query que vai resolver nosso problemas. Os nossos próximos operadores estão aqui pra isso.

Operadores AND, OR e NOT

Agora podemos combinar cláusula WHERE com os operadores AND, OR, e NOT, e dar uma simplificada na querry.

E para deixar claro, o AND e OR são usados para filtrar registros com base em mais de uma condição, exatamente como nosso exemplo acima.

E o NOT para negar uma condição, ou seja, qualquer coisa que NÃO seja igual a condição.

Usando esses operadores, você vai escrever suas queries usando essa sintaxe:

//AND
SELECT coluna1, coluna2, ...
FROM nome_tabela
WHERE condicao1 AND condicao2 AND condicao3 ...;

//OR
SELECT coluna1, coluna2, ...
FROM nome_tabela
WHERE condicao1 OR condicao2 OR condicao3 ...;

//NOT
SELECT coluna1, coluna2, ...
FROM nome_tabela
WHERE NOT condicao;

Na tabela abaixo tem uma breve descrição do que cada operador faz.

OperadorDescrição
ANDExibe um registro se todas as condições separadas por AND forem VERDADEIRAS.
ORExibe um registro se qualquer uma das condições separadas por OR for VERDADEIRA.
NOTExibe um registro se a(s) condição(ões) NÃO for(em) VERDADEIRA(s).
Operadores AND, OR e NOT

Então, como disse antes, podemos simplificar a query do nosso ultima exemplo, ao invés de usar duas queries separadas, podemos escrever apenas uma, usando um dos operadores acima, nesse caso, vamos usar o OR.

Depois de simplificar nossa query o resultado é esse:

SELECT nome, endereco FROM clientes
WHERE (endereco LIKE 'Av. Brazil 222' or endereco LIKE 'Av. Paulista 321');
idnomeendereco
2Marcio MorenoAv. Brasil 222
3Antonio PereiraAv. Paulista 321
Conjunto de resultados

SQL UPDATE

Agora já temos dois métodos para para selecionar e visualizar os dados. Mas geralmente queremos fazer alguma coisa com esses dados certo?

Por exemplo, digamos que um dos nossos clientes se mudou de cidade ou talvez até de país, então os campos “endereco”, “cidade” e “pais” vão mudar, e precisamos atualizar o registro desse cidadão. Como fazer?

Bom, o primeiro passo é selecionar o Cliente que está se mudando, certo? E isso já sabemos como fazer, usando SELECT e WHERE.

Mas agora vamos usar o método UPDATE, para fazer exatamente a mesma coisa, com um extra step, vamos atualizar os valores ao mesmo tempo. Assim:

UPDATE clientes
SET cidade = 'Paris', pais= 'Franca', endereco = '60 rue La Boétie'
WHERE id = 1;
idnomeenderecocidadepais
1
Rodrigo Nascimento60 rue La BoétieParisFranca
Tabela: clientes

Aqui temos no lugar do SELECT o comando UPDATE. E logo depois temos a linha com o comando(ou palavra chave) SET, é usado com o comando UPDATE para especificar quais colunas e valores devem ser atualizados em uma tabela.

Então, o que estamos fazendo aqui é simples, vamos traduzir esse comando.
“Atualize dentro da tabela ‘clientes’ a ‘cidade’, ‘pais’ e ‘endereco’ do cliente cujo o id é igual 1”.

Simples, não? Acabamos de enviar o Rodrigo pra França.

Agora, atenção!

Tenha cuidado ao atualizar os registros em uma tabela! Observe o comando WHERE na declaração UPDATE. A cláusula WHERE especifica que registro(s) deve(m) ser atualizado(s). Se você omitir a cláusula WHERE, todos os registros da tabela serão atualizados!

SQL DELETE

Todo mundo, uma vez ou outra na vida faz uma pequena 💩 certo?

No caso do banco de dados, se você guardou um registro que não deveria no banco, e precisa remover, esse é o método que você vai usar.

Vamos imaginar esse cenário, que o cliente Clovis não queira mais fazer parte do nosso clube de clientes. Pela politica da empresa, todos os dados daquele cliente precisam ser apagados.

Essa é a deixa para o usar o DELETE.

No exemplo, isso ficaria assim:

DELETE FROM clientes WHERE nome='Clovis Oliveira';
idnomeenderecocidadepais
1
Rodrigo NascimentoBerguvsvägen 8BerlinAlemanha
2Marcio MorenoAv. Brasil 222Rio de JaneiroBrasil
3Antonio PereiraAv. Paulista 321São PauloBrasil
5Helder Santos120 Hanover Sq.BrisbaneAustralia
Tabela: clientes

E é isso, aquela linha será completamente apagada do banco de dados.

Mas atenção!

Se você não fornecer um WHERE na cláusula com DELETE, os dados da tabela inteira serão excluídos!

!!! ISSO IRÁ APAGAR TODOS OS DADOS DESSA TABELA !!!
DELETE from clientes;

Só rode esse comando se você tiver certeza do que está fazendo. De preferência somente o faça em um banco de dados de teste.

SQL Joins

Structured Query Language (SQL) é uma linguagem de programação que é usada em banco de dados relacional. E por “relacional” quero dizer que dados entre tabelas tem algum tipo de relação entre si. E para tratar muitos desses casos, os comandos que vimos até aqui são insuficientes. Vamos expandir nosso vocabulário SQL com JOINS.

Sem duvida uma das cláusulas SQL mais importantes, Vamos entender o que ele faz e como funciona.

A cláusula JOIN é usada para combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas.

Ok, para explicar melhor o que esse comando faz, vamos precisar de alguns exemplos.

Para esses exemplos vamos precisar de uma segunda tabela, que vamos chamar de “pedidos”.

IDcliente_idvalor_totalvencimento
12R$ 34212/08/2022
24R$ 62904/11/2022
Tabela: pedidos

Observe que a coluna “cliente_id” na tabela “pedidos” se refere ao “id” na tabela “clientes”.

Daí podemos extrair a nossa relação, porque quando falamos de um cliente queremos saber se ele tem algum pedido, e quando olhamos para a lista de pedidos, precisamos saber de quem aquele pedido pertence.

O JOIN resolve esse problema pra gente, e o resultado você confere na tabela abaixo.

SELECT pedidos.valor_total, pedidos.vencimento, clientes.nome
FROM pedidos
INNER JOIN clientes ON pedidos.cliente_id=clientes.id;
valor_totalvencimentonome
R$ 34212/08/2022Marcio Moreno
R$ 62904/11/2022Clovis Oliveira
SQL JOIN resultado

Ok, não é a mais simples das queries, mas é fácil de entender. Vamos traduzir isso para bom português.

“Selecione as colunas “valor_total” e “vencimento” na tabela “pedidos” e a coluna “nome” na tabela “clientes” da tabela “pedidos” fazendo união com a tabela “clientes” onde a coluna “cliente_id” na tabela “pedidos” for igual ao “id” na tabela “clientes””.

Ainda confuso? Vamos separar por partes, pra ver se ajuda.

A primeira parte já vimos no exemplo do SELECT. Bem similar

Selecione as colunas “valor_total” e “vencimento” na tabela “pedidos” e a coluna “nome” na tabela “clientes” da tabela “pedidos”.

SELECT pedidos.valor_total, pedidos.vencimento, clientes.nome
FROM pedidos

Certo, temos duas coisa a pontuar aqui, uma é que estamos usando “pedidos.valor_total” ao invés de apenas “valor_total”. a outra é que temos “clientes.nome” que não tem nada a ver com a tabela pedidos.

Essa é a magica do comando JOIN, ele te ajuda a unir colunas de várias tabelas em um único resultado.

Temos as colunas “vencimento” e “valor_total” que estão vindo da tabela pedido e “nome” que está vindo da tabela “clientes”, por isso precisamos especificar de onde cada dado está vindo.

Fazemos isso usando a notação: tabela.coluna

Agora a novidade é a segunda parte:

INNER JOIN clientes ON pedidos.cliente_id=clientes.id;

Que se traduz como algo do tipo:

Faça união com a tabela “clientes” onde a coluna “cliente_id” na tabela “pedidos” for igual ao “id” na tabela “clientes””.

O resumo então, quando “cliente.id” e “pedido.cliente_id”coincidirem, me mostre essas três colunas pedidos.vencimento, pedidos.valor_total, clientes.nome.

Um INNER JOIN nada mais é do que uma união, você provavelmente viu isso na escola, se não fugiu das aulas de matemática. Era aquela aula que falavam dos Diagramas de Venn. Aqui vai uma imagem para ajudar.

Diferentes tipos de SQL JOINs
Diferentes tipos de SQL JOINs
TipoDescrição
(INNER) JOINRetorna registros que têm valores correspondentes em ambas as tabelas
LEFT (OUTER) JOINRetorna todos os registros da tabela da esquerda, e os registros combinados da tabela da direita
RIGHT (OUTER) JOINRetorna todos os registros da tabela da direita, e os registros combinados da tabela da esquerda
FULL (OUTER) JOINRetorna todos os registros quando há uma correspondência na tabela da esquerda ou da direita
Diferentes tipos de SQL JOINs

Pela tabela acima, você vê que temos vários tipos de JOINS, o que estamos usando nesse exemplo é o INNER JOIN, mas poderíamos ter usado qualquer um dos outros, se eles resolvessem o nosso problema.

Dê uma lida na descrição de cada método e tente entender o que cada um faz.

Conclusão

E é isso. Acredito que quem quer dar o ponta pé inicial com SQL, esses métodos e cláusulas já são um bom começo, sem duvidas. Deixe um comentário se ficou faltando alguma coisa, eu leio todos, juro.

Se você quiser praticar um pouco do que aprendeu, da uma olhada nesse link, você pode testar as queries com um banco de dados de verdade, é bem legal.

Até a próxima!

]]>
https://blog.debugeverything.com/pt/sql-metodos-essenciais/feed/ 0
MySQL não é um banco de dados https://blog.debugeverything.com/pt/mysql-nao-e-um-banco-de-dados/ https://blog.debugeverything.com/pt/mysql-nao-e-um-banco-de-dados/#comments Sun, 01 Aug 2021 10:06:23 +0000 https://blog.debugeverything.com/?p=2197 O que é o MySQL então? E o que é um banco de dados? 🤔

Vamos responder a ambas resposta nesse post.

O que é MySQL?

Ok já sabemos o que o MySQL não é, ele não é um banco de dados.

MySQL é um sistema de gestão de banco de dados relacional. 🤯

Ok, agora precisamos definir o que é um sistema de gestão de banco de dados.

O que é um Sistema de Gestão de Bases de Dados (SGBD)?

Um Sistema de Gestão de Bases de Dados (SGBD) é um software desenvolvido para armazenar, recuperar, definir, e gerir dados ou estrutura de dados em um banco de dados.

Os dados em SGBD são armazenados em objetos de base de dados chamados tabelas. Uma tabela é uma coleção de entradas de dados relacionados e é constituída por colunas e linhas.

Aos usuários desse sistema são dadas ferramentas para executar vários tipos de operações sobre as estruturas da tabela ou sobre os dados.

Um SGBD funciona principalmente como uma interface entre o usuário final e a base de dados, gerindo simultaneamente os dados e a estrutura da base de dados, a fim de facilitar a organização e a manipulação dos dados.

Alguns exemplos de SGBD incluem MySQL, PostgreSQL, Microsoft Access, SQL Server e Oracle.

O que é um banco de dados?

Uma base de dados é uma coleção organizada de dados, tipicamente armazenados electronicamente num sistema digital em formas de tabelas.

Nesse post estamos levando em consideração apenas os bancos de dados relacionais, mas existe uma outra categoria de banco de dados, chamada de banco de dados não relacionais, como MongoDB, você consegue entender melhor a diferença entre base de dados relacional e não relacional aqui.

Uma base de dados é geralmente controlada por um sistema de gestão de bases de dados (SGBD). Juntos, os dados o SGBD e aplicações associadas, são referidos como um sistema de base de dados, muitas vezes abreviado para apenas base de dados.

Banco de dados com tabelas

Os dados, dentro dos tipos mais comuns de bases de dados atualmente em funcionamento, são tipicamente modelados em linhas e colunas numa série de tabelas para tornar eficiente o processamento e consulta de dados.

Os dados podem então ser facilmente recuperados, geridos, modificados, atualizados, controlados, e organizados. A maioria das bases de dados utiliza SQL para escrever e consultar dados.

Qual é a diferença entre uma base de dados e uma planilha de Excel?

As bases de dados e as planilhas do Excel são ambas formas convenientes de armazenar informação. As principais diferenças entre as duas são:

  • Como os dados são armazenados e manipulados
  • Quem pode ter acesso aos dados
  • Quantos dados podem ser armazenados

As planilhas foram originalmente criadas para um usuário, ou para um pequeno número de usuários que não precisam fazer uma grandes quantidades de manipulação no dados.

As bases de dados, por outro lado, foram desenvolvidas para conter coleções muito maiores de informação. As bases de dados permitem múltiplos usuários ao mesmo tempo gerindo e consultando os dados de forma rápida e segura, utilizando lógica e uma linguagem mais complexa.

O que é SQL?

SQL (Structured Query Language) ou em bom português, Linguagem de Consulta Estruturada, é a linguagem padrão para consulta e manipulação de bases de dados relacionais.

Sim, SQL é uma linguagem de programação. Oferece loops, diretivas lógicas, variáveis, e assim por diante.

Mas em vez de ser uma linguagem de programação para construir websites, aplicações, ou software, SQL é uma linguagem centrada no armazenamento, recuperação, e manipulação de dados em bases de dados.

Aqui estão alguns exemplos de comandos SQL:

SELECT * FROM table_name WHERE column_name='...';
CREATE TABLE table_name (COLUMN_NAME DATATYPES[,....]);  
ALTER TABLE table_name ADD column_name COLUMN-definition; 
DROP TABLE table_name;  
TRUNCATE TABLE table_name;  

O que dá pra fazer com SQL?

  • SQL pode executar consultas em uma base de dados
  • SQL pode recuperar dados a partir de uma base de dados
  • SQL pode inserir registos numa base de dados
  • SQL pode atualizar registos numa base de dados
  • SQL pode apagar registos de uma base de dados
  • SQL pode criar novas bases de dados
  • SQL pode criar novas tabelas numa base de dados
  • SQL pode definir permissões em tabelas, procedimentos, e views

Como SQL e SGBD se relacionam um com o outro?

SGBD é um sistema de gestão de bases de dados. E SQL é a linguagem utilizada para comunicar com os dados de um SGBD.

Ou, pondo em termos simples:

SGBD é um livro e SQL é a linguagem que está sendo utilizada no livro. Quer ler ou escrever no livro? Use SQL.

MySQL Workbench

MySQL Workbench é uma ferramenta de design visual para bases de dados que integra o desenvolvimento, administração, design, criação e manutenção de bases de dados SQL num único ambiente de desenvolvimento integrado (IDE) para o sistema de bases de dados MySQL.

MySQL Workbench fornece um conjunto de ferramentas para melhorar o desempenho de aplicações MySQL, fornece uma plataforma visual para administrar ambientes MySQL e ganhar melhor visibilidade em bases de dados, também oferece ferramentas visuais para criar, executar, e otimizar consultas SQL.

Conectando as partes

Para entender como todas essas peças se conectam, da um olhada na imagem abaixo.

Funcionamento do MySQL
]]>
https://blog.debugeverything.com/pt/mysql-nao-e-um-banco-de-dados/feed/ 2
O que é um Banco de dados não relacional? https://blog.debugeverything.com/pt/banco-de-dados-nao-relacional/ https://blog.debugeverything.com/pt/banco-de-dados-nao-relacional/#comments Sun, 20 Dec 2020 11:46:28 +0000 https://debugeverything.com/?p=1685 Um banco de dados não relacional é qualquer banco de dados que não segue o modelo relacional fornecido pelos sistemas tradicionais de gerenciamento de bancos de dados relacionais (SGBDR). Esta categoria de bancos de dados, é também conhecida como banco de dados NoSQL.

O termo NoSql, significa “Not Only SQL” ou “Não Apenas SQL”, o que pode gerar um pouco de confusão.

Como funciona um banco de dados não relacional?

As bases de dados relacionais dependem de tabelas, colunas, linhas ou esquemas para organizar e recuperar dados. Em contraste, os bancos de dados NoSQL não se baseiam nestas estruturas e utilizam modelos de dados mais flexíveis.

Os bancos de dados NoSQL utilizam uma variedade de modelos de dados para acessar e gerenciar dados. Estes tipos de bancos de dados são otimizados especificamente para aplicações que requerem grande volume de dados, baixa latência e para modelos de dados flexíveis, o que é obtido através do relaxamento de algumas das restrições de consistência de dados.

Um equívoco muito comum é pensar que bancos de dados NoSQL ou bancos de dados não-relacionais não armazenam bem dados que tenham algum tipo de relacionamento.

Os bancos de dados NoSQL podem armazenar dados com relacionamento – eles apenas os armazenam de forma diferente dos bancos de dados relacionais. De fato, quando comparados com bancos de dados SQL, muitos acham que modelar dados com relacionamento em bancos de dados NoSQL é mais fácil do que em bancos de dados SQL, porque os dados relacionados não precisam ser divididos entre tabelas.

Os modelos de dados NoSQL permitem que os dados que tenham alguma relação sejam aninhados dentro de uma única estrutura de dados.

Os primeiros bancos de dados NoSQL desenvolvidos primariamente para aplicações web e em nuvem tendiam a focar em características muito específicas do gerenciamento de dados. Dentre elas a capacidade de processar volumes grandes de dados e distribuir rapidamente esses dados através de clusters.

Os desenvolvedores que implementaram sistemas web e na nuvem também procuraram criar um esquema de dados flexível — ou esquema nenhum — para permitir mudanças rápidas em aplicações que eram continuamente atualizadas.

Tipos de banco de dados NoSQL

Existem quatro grandes tipos de NoSQL: Key-value stores, Graph stores, Column stores, e Document stores. Cada tipo resolve um problema que muitas vezes não pode ser resolvido com bancos de dados relacionais. As implementações reais são freqüentemente combinações destas categorias.

OrientDB, por exemplo, é um banco de dados multi-modelo, combinando dois tipos de NoSQL, ele é uma base de dados do tipo Graph store onde cada nó é um Document.

Alguns dos bancos de dados NoSQL mais populares são MongoDB, Apache Cassandra, Redis, Couchbase e Apache HBase.

Key-value Store

Um banco de dados do tipo key-value (valores-chave), associa um valor (que pode ser qualquer coisa, desde um número ou simples string, até um objeto complexo) com uma chave, que é usada para manter o controle do objeto.

Em sua forma mais simples, um banco de dados não relacional do tipo valores-chave é como um objeto de dictionary/array/map como os existentes na maioria das linguagens de programação, mas que é armazenado de forma persistente e administrado por um Sistema de Gerenciamento de Banco de Dados (SGBD).

As bases de dados de valores-chave utilizam estruturas de índice compactas e eficientes para ser capazes de localizar um valor de forma rápida e confiável por sua chave, tornando-os ideais para sistemas que precisam ser capazes de encontrar e recuperar dados em períodos de tempo constantes.

Redis Sendo um dos mais populares

Document stores

Um base de dados do tipo document gerencia um conjunto de campos com chaves e valores em uma entidade referida como documento. Estes dados armazenam normalmente dados na forma de documentos JSON.

Cada campo referencia um valor que pode ser um expresso de várias maneiras, como um número, um objeto, array, uma string ou um outro documento. Os dados nos campos de um documento podem ser codificados de várias maneiras, incluindo XML, YAML, JSON, BSON, ou até mesmo armazenados como texto simples.

Normalmente, um documento contém os dados completos de uma entidade. Os itens que constituem uma entidade são específicos da aplicação. Por exemplo, uma entidade pode conter os detalhes de um cliente, um pedido, ou uma combinação de ambos.

Um único documento poderia conter informações que estariam espalhadas por várias tabelas relacionais em um sistema de gerenciamento de banco de dados relacional (RDBMS). A base de dados do tipo documentos não exige que todos os documentos tenham a mesma estrutura, esta abordagem proporciona uma grande flexibilidade.

O seu aplicativo pode recuperar documentos usando uma chave única do documento que muitas vezes tem um formato hash. O banco de dados não relacional do tipo documento, criam a chave automaticamente, outros permitem especificar um atributo do documento a ser usado como chave. O aplicativo também pode consultar documentos com base no valor de um ou mais campos.

Muitas bases de dados dot tipo documento suportam atualizações locais, ou seja permitem que uma aplicação modifique os valores de campos específicos em um documento sem reescrever o documento inteiro. Operações de leitura e escrita sobre vários campos em um único documento são tipicamente atômicas.

MongoDB como sendo um dos mais populares nessa categoria.

Column stores

O banco de dados do tipo Coluna, também conhecido como “familia de colunas”, utiliza colunas para armazenar dados ao invés de linhas como no modelo relacional. Em sua forma mais simples, esse formato pode parecer muito semelhante a um banco de dados relacional, pelo menos conceitualmente. O verdadeiro poder de um banco de dados coluna-família reside em sua abordagem desnormalizada da estruturação de dados esparsos.

Você pode pensar nesse modelo como um armazenamento de dados tabulares com linhas e colunas, mas as colunas são divididas em grupos conhecidos como famílias de colunas.

Cada família de colunas contém um conjunto de colunas que são logicamente relacionadas e são normalmente recuperadas ou manipuladas como uma única unidade. Outros dados que são acessados separadamente podem ser armazenados em famílias de colunas separadas.

Dentro de uma família de colunas, novas colunas podem ser adicionadas dinamicamente e linhas podem ser esparsas (ou seja, uma linha não precisa ter um valor para cada coluna).

Graph stores

Um banco de dados do tipo graph gerencia dois tipos de informações, nós e arestas. Os nós representam entidades, e as arestas especificam as relações entre estas entidades. Ambos, nós e arestas, podem ter propriedades que fornecem informações sobre o nó ou aresta, semelhantes as colunas em uma tabela. As arestas também podem ter uma direção indicando a natureza da relação.

O objetivo de um armazenamento de dados do tipo graph é permitir que uma aplicação execute consultas que atravessam a rede de nós e arestas de forma eficiente, e que permita analisar as relações entre entidades.

Em contraste com os bancos de dados relacionais e NoSQL, os bancos de dados do tipo graph armazenam as relações de dados como relacionamentos. Este armazenamento explícito de dados de relacionamento significa menos desconexões entre seu esquema e seu banco de dados real.

Na verdade, a flexibilidade do modelo de grafos permite adicionar novos nós e relacionamentos sem comprometer sua rede existente ou migrar seus dados de forma demorada. Todos os seus dados e relacionamentos originais permanecem intactos.

Prós e contras do banco de dados não relacional

Prós

Cada tipo específico de banco de dados NoSQL tem pontos fortes diferentes, mas todos compartilham características fundamentais que lhes permitem:

  • Manipular grandes volumes de dados em alta velocidade com uma arquitetura scale-out (clusters equivalentes trabalhando juntos)
  • Armazenar dados não estruturados, semi-estruturados ou estruturados
  • Fácil atualização de esquemas e campos
  • Ser mais compreensíveis e fáceis de usar ao desenvolvedor
  • Aproveitar ao máximo as vantagens da nuvem para proporcionar tempo zero de inatividade

Contras

  • Sistemas NoSql ainda não estão completamente maduros.
  • Suporte menor se comparado os SGBDR como Microsoft SQL Server e OracleDB
  • Business intelligence e analytics ainda não conseguem ser facilmente ‘migráveis’ para sistemas de banco de dados não relacional
  • Nenhum conhecimento avançado, como os bancos de dados NoSQL ainda são novos, praticamente todo desenvolvedor de banco de dados não relacional por aí ainda está aprendendo

Conclusão

Em resumo, a diferença entre bancos de dados relacionais e bancos de dados NoSQL são desempenho, disponibilidade e escalabilidade.

]]>
https://blog.debugeverything.com/pt/banco-de-dados-nao-relacional/feed/ 1
Qual a diferença entre base de dados relacional e não relacional? https://blog.debugeverything.com/pt/diferenca-base-de-dados-relacional-e-nao-relacional/ https://blog.debugeverything.com/pt/diferenca-base-de-dados-relacional-e-nao-relacional/#comments Fri, 17 Jul 2020 00:01:59 +0000 https://debugeverything.com/?p=1580

Até o final desta década, nosso universo dados digital vai crescer de 4,4 zettabytes hoje para cerca de 44 zettabytes, ou 44 trilhões de gigabytes.

OK, então sabemos que você está aqui para pesar as diferenças técnicas entre a base de dados relacional e não relacional. Mas, antes de mergulhar, precisamos definir alguns detalhes importantes. Você precisa determinar qual a prioridade que a escalabilidade representa para o seu modelo em particular.

Para que seu modelo de dados seja tão preciso quanto possível, você precisa fazer as perguntas certas. Do contrário a sua solução pode acabar não sendo a mais adequada para o seu problema. Se você já tem isso bem definido, siga em frente.

O que é uma base de dados relacional?

Um banco de dados relacional é um banco de dados digital baseado no modelo relacional de dados, como proposto por E. F. Codd em 1970, uma forma intuitiva e direta de representar os dados em tabelas. As bases de dados relacionais armazenam e fornecem acesso a pontos de dados que estão relacionados entre si.

Em um banco de dados relacional, cada linha da tabela é um registro com uma identificação única chamada chave primaria. As colunas da tabela contêm os atributos dos dados, e cada registro geralmente tem um valor para cada atributo, facilitando o estabelecimento das relações entre os dados.

Existem diversos sistemas que você pode utilizar para gerenciar bancos de dados relacionais, eles são conhecidos como Sistemas de gerenciamento de bancos de dados relacionais (SGBDR). O mais popular entre eles é o MySQL, mas também temos outras opções como, Oracle Database, Microsoft SQL Server, e IBM DB2.

A grande maioria dos SGBDR oferecem a opção de usar a SQL (Structured Query Language) para consulta e manutenção do banco de dados.

É um muito comum confundir um banco de dados com um SGBD, mas talvez você fique surpreso em saber que MySQL não é um banco de dados.

Tipos de relação

Uma das vantagens de um banco de dados relacional é que, uma vez que você tenha seus dados mantidos em tabelas claramente definidas você pode conectar ou relacionar os dados entre em diferentes tabelas. Para poder identificar essas relações, você precisa examinar os dados e ter um entendimento das regras de negócio que se aplicam aos dados e tabelas.

Ao criar relações, você sempre trabalha com duas tabelas de cada vez. Uma tabela é chamada de tabela principal ou parent table e a outra é a tabela relacionada ou child table.

Os três tipos de relação que você vai encontrar nas bases de dados relacionais são, 1 para 1, 1 para muitos e muitos para muitos. As relações estão descritas abaixo.

  • Um para um (1...1): Ambas as tabelas podem ter apenas um registro em cada lado do relacionamento. Cada valor tabela primária refere-se a apenas um (ou nenhum) registro na tabela relacionada.
  • Um para muitos (1...n): A tabela primária contém apenas um registro que pode se relacionar a nenhum, um, ou muitos registros na tabela relacionada.
  • Muitos para muitos (n...n): Cada registro em ambas as tabelas pode se relacionar com qualquer número de registros (ou nenhum registro) na outra tabela. Muitos relacionamentos do tipo n...n requerem uma terceira tabela, conhecida como tabela de ligação ou tabela associada, porque os sistemas relacionais não podem acomodar diretamente o relacionamento.

O que é uma base de dados não relacional?

Um banco de dados não relacional é qualquer banco de dados que não segue o modelo relacional fornecido pelos sistemas tradicionais de gerenciamento de bancos de dados relacionais (SGBDR). Esta categoria de bancos de dados, é também conhecida como banco de dados NoSQL.

Os mais populares sendo MongoDB, DocumentDB, Cassandra, Couchbase, HBase, Redis, e Neo4j. Estes bancos de dados são geralmente agrupados em quatro categorias: Key-value stores, Graph stores, Column stores, e Document stores.

Tipos de banco de dados não relacional

Key-value stores

Como o nome sugere, em uma base de dados do tipo key-values , os dados são representados como uma coleção de pares de valores-chave. Também são conhecidos como arrays associativos, organizados em filas. Essas bases de dados armazenam os dados como uma tabela hash com uma chave única e um ponteiro para um determinado item de dados. Semelhante às tradicionais tabelas hash, esse tipo de base de dados permite o armazenamento e a recuperação de dados através de chaves.

As bases de dados do tipo key-values são utilizados sempre que os dados são consultados por parâmetros precisos e precisam ser recuperados rapidamente.

Graph stores

Embora as base de dados do tipo key-value possam lidar com grande quantidade de dados, elas são projetados para uma visão de alto nível (baixa profundidade) dos dados. Os bancos de dados do tipo graph conseguem manter um tamanho de armazenamento mínimo, mesmo com uma profundidade de dados maior do que outros tipos de bancos de dados.

O banco de dados NoSQL do tipo graph foi especialmente desenvolvido para lidar com conjuntos muito grandes de dados estruturados, semi-estruturados ou não estruturados. Ele ajuda as organizações a acessar, integrar e analisar dados de várias fontes.

Muito utilizado quando é necessário analisar dados de redes sociais ,por exemplo.

Column stores

O armazenamento de dados em coluna, também conhecido como familia de colunas, utiliza colunas para armazenar dados ao invés de linhas como no modelo relacional. Tanto o SGBD baseado em linhas quanto o baseado em colunas utilizam SQL como linguagem de consulta, mas o SGBD orientado a colunas pode oferecer melhor desempenho.

Os bancos de dados do tipo column store utilizam um conceito chamado keyspace. Um keyspace é como um esquema no modelo relacional. O keyspace contém todas as famílias de colunas (como as tabelas do modelo relacional), que contêm linhas, que contêm colunas.

Document stores

A base de dados do tipo document store, também chamadas de SGBD orientado a documentos, são caracterizadas por sua organização de dados sem esquemas.

Isso significa que os registros não precisam ter uma estrutura uniforme, ou seja, registros diferentes podem ter colunas diferentes. Os tipos dos valores podem ser diferentes para cada registro, as colunas podem ter mais de um valor (arrays) e os registros podem ter uma estrutura aninhada.

Os documentos são geralmente armazenados em uma estrutura similar ao JSON, o que deixa a vida do programador mais fácil, sendo que JSON é uma das estruturas de dados mais comuns, especialmente trabalhando com Javascript.

Qual a diferença entre base de dados relacional e não relacional?

Bancos de dados relacionais como MySQL, PostgreSQL e SQLite3 representam e armazenam dados em tabelas e filas. Eles são baseados em um ramo da teoria do conjunto algébrico conhecido como álgebra relacional. Bancos de dados não-relacionais como o MongoDB representam dados em coleções de documentos JSON.

As bases de dados relacionais utilizam Linguagem de Consulta Estruturada (SQL), tornando-as uma boa escolha para aplicações que envolvem o gerenciamento de várias transações. A estrutura de um banco de dados relacional permite vincular informações de diferentes tabelas através do uso de chaves (ou índices) estrangeiras.

Se você estiver lidando com uma quantidade fenomenal de dados, a complexidade do banco de dados relacional e das queries necessárias também vai crescer na mesma proporção. Nessa situação, talvez você precise considerar a possibilidade de utilizar um base de dados não relacional. Uma base de dados não relacional pode armazenar dados sem uma mecânica explícita e estruturada para vincular dados de diferentes tabelas uns aos outros.

Desvantagens das bases de dados relacionais

Embora as bases de dados relacionais sejam ótimas, elas vêm com trade-offs. Uma delas é a ORM Impedance Mismatching, porque as bases de dados relacionais não foram inicialmente criadas com as linguagens OOP em mente.

A melhor maneira de evitar esta questão é criar seu esquema de banco de dados com integridade referencia. Portanto, ao utilizar um banco de dados relacional com OOP (como Ruby ou Java), você tem que pensar em como configurar suas chaves primárias e estrangeiras, o uso de restrições (incluindo a exclusão e atualização em cascata), e como escrever suas migrações.

Desvantagens das bases de dados não relacionais

Em bancos de dados não relacionais como MongoDB, não há joins como nos bancos de dados relacionais. Isto significa que você precisa realizar múltiplas consultas e unir os dados manualmente dentro de seu código.

Como Mongo não trata automaticamente as operações como transações da mesma forma que um banco de dados relacional, você deve escolher criar uma transação e depois verificá-la, fazer o commit ou o roll-back tudo manualmente.

Minha sugestão é, analise os dados que você vai armazenar. Faça as perguntas certas para descobrir qual o modelo de dados você vai precisar.. A escolha da linguagem de programação para escrever sua aplicação e o uso de um banco de dados específico farão a com que a sua aplicação vá no caminho correto.

Se gostou do artigo, não deixe de comentar e compartilhar. E para você não perder nenhuma novidade aqui da blog, se inscreva na newsletter e receba toda semana conteúdo exclusivo!

]]>
https://blog.debugeverything.com/pt/diferenca-base-de-dados-relacional-e-nao-relacional/feed/ 8
MongoDB para iniciantes – Introdução ao MongoDB https://blog.debugeverything.com/pt/mongodb-para-iniciantes-introducao-ao-mongodb/ https://blog.debugeverything.com/pt/mongodb-para-iniciantes-introducao-ao-mongodb/#comments Wed, 20 May 2020 00:41:33 +0000 https://debugeverything.com/?p=1247

MongoDB é um banco de dados NoSQL de propósitos gerais, distribuído e baseado em documentos.

Banco de dados do tipo SQL ainda são a grande maioria. Mas com o aumento exponencial do consumo e criação de dados nós precisamos nos preparar para o que esta por vir. E os bancos de dados NoSQL vem se mostrando uma excelente alternativa para isso.

Nesse post vamos entender melhor o que são os bancos de dados NoSQL e quais a suas vantagens em comparação com os tradicionais bancos de dados relacionais.

Mas antes de entrar de cabeça falando sobre MongoDB, vamos dar uma introdução sobre banco de dados do tipo NoSQL.

Uma comparação entre os bancos de dados e relacionais e banco de dados não relacionais, você pode conferir nesse outro post.

O que é um banco de dados NoSQL?

Os bancos de dados NoSQL (também conhecidos como “não apenas SQL”) não são tabulares, e armazenam dados de forma diferente das tabelas relacionais.

Em bancos de dados relacionais você precisa criar as tabelas, definir o esquema, definir os tipos dos campos de dados, definir as relações entre as tabelas, etc., antes de poder realmente inserir os dados.

Nos bancos de dados do tip NoSQL você não tem que se preocupar com isso. O processo de criação dos documentos, no caso do MongoDB é bem mais simples e dinâmico.

Os bancos de dados NoSQL vêm em uma variedade de tipos baseados em seu modelo de dados. Os principais tipos são documents, key-value, wide-column e graph. Eles fornecem esquemas flexíveis e escaláveis e suportam altas cargas de usuários.

Uma das vantagens do banco de dados NoSQL é que eles são realmente fáceis de serem escalados e são muito mais rápidos na maioria dos tipos de operações que realizamos no banco de dados.

Existem certas situações onde utilizar o banco de dados relacional pode ser uma melhor escolha ao invés do NoSQL, porém quando você está lidando com uma grande quantidade de dados, o banco de dados NoSQL deve ser a melhor escolha.

Vantagens do NoSQL

Hoje, as vantagens dos bancos de dados NoSQL não são segredo, especialmente quando a computação em nuvem ganhou ampla adoção.

Os bancos de dados NoSQL foram criados em resposta às limitações da tecnologia tradicional de bancos de dados relacionais. Quando comparados com os bancos de dados relacionais, os bancos de dados NoSQL são mais escaláveis e oferecem desempenho superior, e seu modelo de dados resolve várias deficiências do modelo relacional.

As vantagens do NoSQL incluem, mas não se limitam à:

  • Suporte à grandes volumes de dados estruturados, semi-estruturados e não-estruturados.
  • Facilidade de lidar com mudanças ao longo do tempo.
  • Capacidade de dimensionar horizontalmente em hardware ‘comum’.
  • Arquitetura eficiente e escalonável em vez de arquitetura cara e monolítica.
  • Suporte a múltiplas estruturas de dados.

Introdução ao MongoDB

MongoDB é um banco de dados NoSQL orientado a documentos utilizado para armazenamento de grandes volumes de dados. Ao invés de utilizar tabelas e linhas como nos bancos de dados relacionais tradicionais, o MongoDB faz uso de coleções e documentos.

O que é armazenamento baseado em documentos?

Os documentos consistem em pares de valores chave que são a unidade básica de dados no MongoDB. As coleções contêm conjuntos de documentos e funções que são equivalentes às tabelas de bancos de dados relacionais.

Se você veio de um banco de dados relacional, você pode pensar nos documentos como as linhas dos bancos de dados relacionais e as coleções como as tabelas.

{
    "_id": "5",
    "isActive": false,
    "age": 24,
    "eyeColor": "brown",
    "name": "Ada Compton"
}

Esta é uma estrutura parecida com a do JSON. Onde os dados são armazenados em forma de pares de chaves e valores.

{
    "_id": "5",
    "isActive": false,
    "age": 24,
    "eyeColor": "brown",
    "name": "Ada Compton"
}
{
    "_id": "6",
    "isActive": false,
    "age": 43,
    "eyeColor": "blue",
    "name": "Andray Conway”
}

E uma coleção, nada mais é do que um conjunto de documentos. que não necessariamente precisam ter os mesmos campos, como no exemplo da coleção abaixo:

Qual a diferença entre MongoDB e SGBDR?

A maior diferença entre o MongoDB e os bancos de dados SQL é a forma como eles lidam com os dados. Em bancos de dados SQL, os dados são armazenados na forma de uma estrutura tradicional bidimensional linha-coluna, enquanto MongoDB utiliza documentos para armazenar a informação, o que permite o armazenamento de qualquer tipo de dado.

Vamos colocar frente a frente algumas das principais diferenças entre o MongoDB e outros bancos de dados SQL:

Utiliza Tabelas com linhas e colunas.BaseUtiliza Documentos que consistem de pares chave-valor.
SGBDR é um sistema de gerenciamento de banco de dados relacionalConceitoO MongoDB é um sistema de gerenciamento de banco de dados não-relacional, orientado a documentos
SGBDRs é escalável verticalmente. O desempenho aumenta com o aumento da RAM.EscalablidadeMongoDB suporta escalonamento horizontal através de Sharding , distribuindo dados por várias máquinas.
Dificuldade para armazenar dados hierárquicos.HierárquiaPossuir suporte embutido para armazenar dados hierárquicos.
SGBDR suporta joins complexas.JoinsBancos de dados NoSQL como o MongoDB utilizam dados desnormalizados, portanto, joins ‘relacionais’ não são suportados.
O SGBDR é mais lento no processamento de grandes dados hierárquicos.PerformanceA MongoDB é extremamente rápido no processamento de grandes dados hierárquicos.
Segue os princípios ACID, Atomicidade, Consistência, Isolamento e Durabilidade.PrincípioSegue o princípio CAP, Consistência, Disponibilidade e Tolerância de Partição.
SGBDR usa SQL para consultar banco de dados.Query LanguageMongoDB usa BSON para consultar banco de dados.
Vulnerável à ataques de SQL Injection.SQL InjectionA SQL injection não é possível.
O esquema precisa ser definido no SGBDR antes de usar um banco de dados.SchemaO esquema pode ser criado e acessado de forma dinâmica no MongoDB.

Vantagens do MongoDB

MongoDB não tem esquemas definidos, ou seja, cada documento pode ter seu próprio conjunto de campos únicos dentro de uma coleção. Além disso, ele é distribuído e facilmente escalável geograficamente/horizontalmente para um melhor desempenho.

Ao considerar a mudança para uma base de dados orientada a documentos, você pode consider os seguintes pontos:

Acesso aos dados nativos do código

A maioria dos bancos de dados força você a usar mapeamentos pesados, como ORMs (Object Relational Mappers), para obter os dados em forma de objetos para usar nos programas. Como o Hibernate do Java e Entity Framework do C#.

A decisão do MongoDB de armazenar e representar dados em um formato de documento utilizando JSON significa que você pode acessá-los de qualquer linguagem, em estruturas de dados nativas dessa linguagem (por exemplo, dicionários em Python, arrays associativos em JavaScript, Mapas em Java, etc.).

Estrutura amigável a mudanças

Se você está acostumado a ter que derrubar seu site ou aplicação para mudar a estrutura dos seus dados, você está com sorte: o MongoDB foi projetado para aceitar a mudanças de forma muito mais fácil.

Não é necessário tempo parado para mudar os esquemas, e você pode começar a escrever novos dados para a MongoDB a qualquer momento, sem interromper suas operações.

Consultas e análises poderosas

De que serve um banco de dados se você não consegue encontrar coisas dentro dele? MongoDB é projetado para facilitar o acesso aos dados.

O MongoDB Query Language (MQL) é uma linguagem completa e poderosa que permite que você faça consultas profundas em documentos, e até mesmo executar pipelines analíticos complexos com apenas algumas linhas de MQL do tipo JSON.

Fácil escalabilidade horizontal

O MongoDB é projetado desde o início para ser um banco de dados distribuído. Crie clusters com replicação em tempo real, e faça coleções grandes ou de alto rendimento através de múltiplos clusters para sustentar o desempenho e o escalonamento horizontalmente.

Conclusão

Banco de dados orientado a documentos tem certas vantagens: flexibilidade (falta de estrutura rígida), boa adequação aos modernos frameworks JavaScript (uso direto do JSON), grande processamento de dados e estatísticas/análises de dados em tempo real.

O MongoDB é um dos bancos de dados NoSQL mais utilizados.Ele é fácil de entender. A linguagem de consulta de documentos fornece muitas opções e é tão poderosa quanto o SQL. Ao contrário dos bancos de dados relacionais, o MongoDB é fácil de escalar. MongoDB é amplamente utilizado juntamente com frameworks NodeJS e AngularJS e ReactJS. É uma parte central da pilha MEAN e MERN.

Espero que tenham gostado do conteúdo.

Nós vemos na próxima.

]]>
https://blog.debugeverything.com/pt/mongodb-para-iniciantes-introducao-ao-mongodb/feed/ 4
O que você deveria saber sobre banco de dados relacional e não relacional https://blog.debugeverything.com/pt/banco-de-dados-relacional-e-nao-relacional/ https://blog.debugeverything.com/pt/banco-de-dados-relacional-e-nao-relacional/#comments Tue, 05 May 2020 09:37:58 +0000 https://debugeverything.com/?p=1102 Mais de 2,5 quintiliões de bytes de dados são criados todos os dias, e só tem previsão de crescimento a partir daí segundo o ultimo relatório da DOMO. Até o final 2020, estima-se que 1,7MB de dados serão criados a cada segundo para cada pessoa na Terra. Você consegue ver a importância do banco de dados?

Empresas tem investido literalmente bilhões de dólares em infraestrutura para não só armazenar mas também buscar, atualizar e deletar essa quantidade simplesmente absurda de dados.

Vamos então entender o que são, pra que servem e qual são os principais tipos de bancos de dados que temos a nossa disposição atualmente, e descobrir qual é o banco de dados ideal para o seu próximo projeto.

O que é um banco de dados?

Na mais simples das definições, um banco de dados é apenas uma forma de armazenar e organizar informações. Idealmente, essa informação é armazenada de forma ordenada para ajudar na busca.

Você pode imaginar um banco de dados com se fosse uma biblioteca de livros, cada livro é organizado segundo algum tipo de categoria, seja por gênero, autor, lingua em que foi escrito, etc.

E cada biblioteca tem um sistema de organização que depende de fatores como tamanho da biblioteca, que tipo de livros ela armazena, quantos visitantes ela recebe e por ai vai.

Banco de dados são estruturas muito similares. Escolher o melhor tipo para o seu projeto e organizar seus dados da melhor forma possível farão toda a diferença.

Hoje temos dois tipos principais de banco de dados:

  • banco de dados relacionais.
  • banco de dados não relacionais(NoSQL). 

Para falar sobre esses dois, preciso introduzir o que é SQL.

O que é SQL?

Do inglês SQL (Structured Query Language), ou em bom português Linguagem de Consulta Estruturada. 

É uma linguagem de programação usada para criar uma conexão entre dados armazenados em um Sistema de Gerenciamento de Banco de Dados Relacional (SGBDR’s).

Sim, SQL é uma linguagem de programação, mas não de propósito geral como Java, PHP, Python e outras. SQL é uma linguagem especifica para comunicação com banco de dados.

A sintaxe SQL parece com o inglês, o que simplifica a escrita, leitura e interpretação.

Um exemplo de código em SQL seria assim, esse código recupera todos os nomes e emails da tabela Users, por exemplo.

SELECT username, email FROM Users;

Muitos SGBDR’s usam SQL (e variações de SQL) para acessar os dados em tabelas. 

Um SGBDR é um programa que lhe permite criar, atualizar e administrar base de dados relacionais. 

MySQL, por exemplo, é SGBDR.

Banco de dados relacional

Um banco de dados relacional é um tipo de banco de dados. Ele armazena e fornece acesso à dados que tenham relação entre si. Daí o nome ‘relacional’. Essas relações são construidas utilizando tabelas, similares a essa:

Idusernameemailpassword
1user1user1@example.com!*&JGs1ˆ&
2user2user2@example.com($%ˆgˆ8r*7
3user3user3@example.com$%rtg&nd
  • Cada coluna representa a informação reference a um dado, por exemplo na coluna email você vai ter todos os emails referentes a todos os usuários.
  • Em cada linha você tem a informação completa de cada usuário, por exemplo, na linha 2 nós temos todos os dados do user2 (username, email e password).

Em um banco de dados relacional, cada linha na tabela é um registro com uma ID exclusiva chamada chave primária. 

É a partir dessa chave primária que conseguimos criar as relações entre dados e tabelas.

Por exemplo, podemos ter uma segunda tabela com endereços. E conseguimos gerar uma relação entre elas através do ID do usuário.

IdaddresscountryuserID
1Main Av, 500Brazil1
2Second Av, 300Portugal2
3Third Av, 100Mozambique3

Com essa segunda tabela é simples de reconhecer que o endereço com Id 1 é do usuário com Id 1, endereço com Id 2 pertence ao usuário com Id 2 e endereço com Id 3 pertence ao usuário com Id 3.

Se quiséssemos recuperar o endereço do user1 através de uma Querry SQL, poderíamos fazer assim:

SELECT * FROM Address WHERE userId = 1;

Se você gostou dessa estrutura e forma de organização dos dados, tenho uma excelente notícia para você, existem diversas opções gratuitas que você pode escolher para trabalhar. Vou citar os principais aqui em baixo.

Os principais Sistemas de Gerenciamento de Banco de Dados Relacional

MySQL

Segundo eles próprios “O MySQL, é o mais popular sistema de gestão de base de dados Open Source SQL”. Apoiado pela Oracle.

Como principais vantagens do MySQL eu posso citar:

  • Facilidade de uso, SQL sem modificações. 
  • Barato, e oferece versão a community Free.
  • Garante a segurança dos dados com características excepcionais de protecção de dados.
  • Grande comunidade de desenvolvedores.

Utilizei o MySQL nesse projeto onde mostrei como conectar Python ao MySQL.

Dificuldades em escalabilidade e desempenho fraco envolvendo tabelas com muitos dados podem ser citados com alguns dos pontos fracos desse sistema.

PostgreSQL

PostgreSQL é também um SGBDR de código aberto, mas ele não é controlado por nenhuma corporação.

O PostgreSQL fornece muitos dos mesmos benefícios do MySQL. Ele é de fácil utilização, barato, confiável, e tem uma ampla comunidade de desenvolvedores.

PostgreSQL tem uma perfomance típica inferior a outros RDBMSs, como o MySQL, e embora tenha sido mais utilizado nos últimos anos, PostgreSQL fica para trás em termos de popularidade.

OracleDB

Muitos dos principais bancos do mundo operam com o sistema da Oracle, já que a Oracle oferece uma forte mistura de tecnologias e softwares de negócios robustos e pré-integrados, incluindo os recursos projetados especialmente para bancos.

A Oracle oferece uma versão gratuita chamada Oracle Database Express Edition (XE).

A desvantagem talvez seja o alto custo. Mas você está pagando pela alta performance, um excelente atendimento ao cliente, e outros vários benefícios, o alto custo pode ser justificado.

SQL Server

A Microsoft também oferece O SGBDR. Com uma versão de entrada gratuita, que por sinal tem exatamente o mesmo nome da concorrência, Express.

Também se concentra nas grandes aplicações empresariais, com grande infraestrutura.

Assim como o sistema da Oracle, ele também não de código aberto.

O lado ruim, também fica por conta do alto custo e o fato de ser necessário investir em um Bom hardware para rodar as versões mais recentes.

SQLite

SQLite é um popular banco de dados SQL open source. Ele pode armazenar uma base de dados inteira em um único arquivo. 

Uma das vantagens mais significativas que isso proporciona é que todos os dados podem ser armazenados localmente sem a necessidade de conectar seu banco de dados a um servidor. Muito utilizado em aplicações mobile (Android e iOS).

Banco de dados não relacional (NoSQL)

Os banco de dados NoSQL (também conhecidos como “not only SQL”) não são constituídos de tabelas, eles armazenam dados de forma diferente das tabelas relacionais. 

Eles apareceram no final dos anos 2000, quando o custo de armazenamento diminuiu drasticamente. E foram-se os dias em que era necessário criar um modelo de dados complexo e difícil de gerenciar, simplesmente com o propósito de reduzir a duplicação de dados. 

Os banco de dados NoSQL vêm em uma variedade de tipos baseados em seu modelo de dados. Os principais tipos são document, key-value, wide-column, e graph. Eles fornecem esquemas flexíveis e escalam facilmente com grandes quantidades de dados e altas cargas de usuários.

Um mal-entendido comum é achar que banco de dados NoSQL ou banco de dados não relacionais não armazenam bem os dados com relacionamento. Banco de dados NoSQL podem armazenar dados com relacionamento – eles apenas os armazenam de forma diferente do que banco de dados relacionais armazenam. 

Na verdade, quando comparados com uma base de dados SQL, muitos acham que modelar dados de relacionamento em banco de dados NoSQL é mais fácil do que em banco de dados SQL, porque os dados relacionados não precisam ser divididos entre tabelas.

Os modelos de dados NoSQL permitem que os dados relacionados sejam aninhados dentro de uma única estrutura de dados.

Quais são os Tipos de Banco de Dados Não Relacional?

Ao longo do tempo, quatro tipos principais de banco de dados NoSQL surgiram:

  • Banco de dados orientados a documentos
  • Banco de dados do tipo Key value
  • Banco de dados de famílias de colunas.
  • Banco de dados de grafos

Vamos examinar cada tipo.

Banco de dados orientados a documentos

Banco de dados NoSQL do tipo documents armazenam dados em estruturas similares aos objetos JSON (JavaScript Object Notation). Algo parecido com isso:

{
    "_id" : ObjectId("5ea3f99880aeb46f07d550fe"),
    "id" : 1,
    "password" : "pbkdf2_sha256$150000$2WAquqg5uny4$9mVb1OqdkvvRubzHay0I3EzODn7i37icn6GQVHLqtiY=",
   "is_superuser" : true,
    "username" : "debug",
    "first_name" : "Debug",
    "last_name" : "Everything",
    "email" : 'admin@debugeverything.com',
    "date_joined" : ISODate("2020-04-25T08:49:28.513Z")
}

Cada documento contém pares de campos e valores. Os valores podem ser tipicamente uma variedade de tipos, incluindo coisas como strings, números, booleans, arrays ou objetos.

Devido à sua variedade de tipos de valores de campo e linguagens de consulta poderosas, banco de dados de documentos são ótimos para uma grande variedade de casos de uso e podem ser usados como um banco de dados de propósito geral.

Banco de dados do tipo Key value

Um banco de dados NoSQL  do tipo Key-Value armazena dados como um conjunto de Chaves e Valores, também conhecido como um array associativo, organizado em linhas.

Um exemplo de como poderia se parecer um banco de dados de uma loja de eletrônicos.

As bases de dados de valores-chave são ótimas para casos de uso onde você precisa armazenar grandes quantidades de dados mas não precisa realizar consultas complexas para recuperá-los. Um uso bem comum é o armazenamento das preferências do usuário ou do cache.

Banco de dados de famílias de colunas

Nesse tipo de banco de dados NoSQL, as colunas em cada linha estão contidas dentro dessa linha. Uma imagem pra explicar melhor:

Cada família de colunas é um contêiner de linhas em uma tabela. A chave identifica a linha que consiste de múltiplas colunas.

As linhas não precisam ter o mesmo número de colunas e tão pouco conter as mesma informações. As colunas podem ser adicionadas a qualquer linha a qualquer momento sem a necessidade de adicioná-la a outras linhas.

O banco de dados em colunas são ótimos para quando você precisa armazenar grandes quantidades de dados e você pode prever quais serão os seus padrões de consulta

Frequentemente esse tipo de banco de dados é usado para armazenar dados de perfil do usuário.

Banco de dados de grafos

Os nós e relacionamentos são os constituintes essenciais desse tipo de base de dados. Um nó representa uma entidade. Um relacionamento representa como dois nós estão associados.

Os banco de dados de grafos utilizam nós que contêm listas de registros de relacionamento. Estes registros representam relações com outros nós, o que elimina a (demorada) operação de busca e comparação encontrada em banco de dados relacionais.

As relações entre os nós são pré-determinadas, ou seja, não são determinadas no momento da consulta.

Principais banco de dados NoSQL 

MongoDB

O mais famoso dos banco de dados não relacionais. 

MongoDB armazena dados em documentos flexíveis, do tipo JSON, o que significa que os campos podem variar de documento para documento e a estrutura de dados pode ser alterada ao longo do tempo.

Além disso, você receberá benefícios como suporte total a índices, alta disponibilidade através de WANs e LANs, juntamente com fácil replicação, escalabilidade horizontal, consultas ricas baseadas em documentos, flexibilidade no processamento e agregação de dados, juntamente com treinamento, suporte e consulta adequados.

O MongoDB é de uso livre e gratuito.

Redis

Redis, que significa Remote Dictionary Server, é um banco de dados de armazenamento rápido, de código aberto e com valores do tipo key-value em memória.

Um dos principais atrativos do uso do Redis é a sua velocidade. Os dados Redis são mantidos em memória, enquanto outros bancos de dados armazenam dados em disco ou em SSDs, o que permite à Redis acessar informações muito mais rapidamente. A Redis só armazenará dados em disco quando for necessário persistir.

Cassandra

Cassandra Caso você esteja procurando por alta disponibilidade e escalabilidade sem comprometer o desempenho, então a base de dados Cassandra é o ideal para você.

O Apache Cassandra é um software livre e de código aberto, distribuído, que utiliza o padrão wide column.

Cassandra é altamente escalável e de alto desempenho, projetado para lidar com grandes quantidades de dados em muitos servidores.

Neo4j

O Neo4j é um banco de dados NoSQL de grafos nativo, de código aberto, que fornece um backend transacional compatível com ACID para suas aplicações.

Ele é referido como nativo porque implementa eficientemente o modelo de gráfico de propriedade até o nível de armazenamento. Isto significa que os dados são armazenados exatamente como você os armazena, e ele usa ponteiros para navegar e atravessar o grafo.

Conclusão

Acredito que fomos capazer de esclarecer as diferencás entre SQL e NoSQL.
Grande parte dos projetos ainda é baseado nesse primeiro modelo. Mas empresas grandes já estão migrando algumas das suas bases de dados para sistemas NoSQL.

Pode ser que ele se torne um novo padrão no futuro, ou ele pode continuar co-existindo com SQL. Só o tempo dirá.

Não se esqueça de se inscrever para receber todo novo e exclusivo conteúdo!

Até a próxima.

]]>
https://blog.debugeverything.com/pt/banco-de-dados-relacional-e-nao-relacional/feed/ 1
Como conectar ao banco de dados MySQL usando Python https://blog.debugeverything.com/pt/como-python-ao-banco-de-dados-mysql/ https://blog.debugeverything.com/pt/como-python-ao-banco-de-dados-mysql/#comments Wed, 15 Apr 2020 20:54:36 +0000 https://debugeverything.com/?p=764 Você não detesta fechar um arquivo e esquecer de salvar? É uma situação desagradável, mas que acontece, não importa quantos anos de experiência com informática você tenha. E é isso que acontece quando você não conecta seu projeto a um banco de dados.

Neste artigo eu vou falar como conectar Python ao banco de dados MySQL

Bom, você já tem seu projeto rodando e funcionando. Porque você precisa conectar com um banco de dados?

A não ser que você queira que o seu projeto não salve nenhuma informação, você não precisa. Um banco de dados serve para guardar informações que poderemos usar mais tarde, e não precisarmos recomeçar tudo do zero.

Vamos explicar passo a passo, como conectar e criar um banco de dados MySQL usando Python, da maneira mais curta e eficiente possível.

O que é um Banco de Dados, e por que ele é importante?

Um banco de dados armazena os dados de forma organizada para que você possa pesquisar e recuperar esses dados mais tarde.

Um banco de dados, deve conter uma ou mais tabelas. A tabela é muito parecida com uma planilha, ele é basicamente um conjunto de linhas e colunas.

Todas as linhas têm as mesmas colunas, e cada coluna contém os dados em si. Se isso ajudar, pense em suas tabelas da mesma forma que você pensaria em uma tabela no Excel.

Os dados podem ser inseridos, recuperados, atualizados e excluídos de uma tabela. A palavra, criada, é geralmente usada ao invés de inserida, essas quatro funções são carinhosamente abreviadas como CRUD (Create, Read, Update and Delete)

Uma base de dados relacional organiza os dados em tabelas, e os vincula, com base em relações definidas. Estes relacionamentos permitem recuperar e combinar dados de uma ou mais tabelas com uma única consulta.

Um banco de dados vai ser extremamente útil se você seguiu o tutorial onde eu mostrei como criar uma página de login do zero.

Mas isso foi apenas um monte de palavras. Para entender verdadeiramente um banco de dados relacional, você precisa criar o seu. Então, vamos lá.

Instalando o MySQL

A primeira coisa que você precisa fazer, se você quer conectar Python ao banco de dados MySQL é baixar e instalar a ultima versão do MySQL. Basta ir no site do MySQL, e fazer o download da versão correta do sistema operacional do seu computador, se ainda não tiver feito isso. A versão que estou utilizando aqui é a MySQL Community Server 8.0.19.

Eu também recomendo fortemente você instalar uma ferramenta para gerenciar graficamente seus bancos de dados como o MySQL Workbench ou phpMyAdmin.

Feito isso basta checar se seu banco de dados esta funcionando com qualquer uma das ferramentas que sugeri, ou qualquer uma outra que você preferir, usando o usuário e senha que você criou durante a instalação.

Conector Python ao banco de dados MySQL

Segundo passo, precisamos conectar Python ao banco de dados MySQL, através de um conector.

Python não vem nativamente com um conector. Você precisa fazer o download. Um Conector nada mais é do que um modulo que auxilia a comunicação entre Python ao banco de dados MySQL. Temos pelo menos 5 módulos disponÍveis, mas nesse tutorial, vamos utilizar o que é disponibilizado pela própria MySQL.

Para instalar o Conector, a maneira mais simples (e recomendável) é utilizando pip, que é o instalador de pacotes para Python. Eu citei o pip nesse outro artigo. Se você já tem o pip instalado, basta executar esse comando abaixo para instalar o Conector Python/MySQL.

pip install mysql-connector-python

Conectando Python ao banco de dados MySQL

Para conectar Python ao banco de dados MySQL usando o conector que acabamos de instalar é bem simples.

A primeira coisa que precisamos fazer é importar o conector. Em seguida utilizar a função connect() com as credenciais que você gerou durante a instalação do MySQL. O nome do host pode ser tanto localhost ou 127.0.0.1 que são sinônimos.
Nesse teste apenas vamos abrir uma conexão e fechar logo em seguida, com a função close().

import mysql.connector

cnx = mysql.connector.connect(user='root', password='********', host='127.0.0.1')

cnx.close()

Copie e cole esse código, salve o arquivo como connection.py ou como preferir. Abra uma janela no seu terminal na pasta onde contém o arquivo e rode o comando python connection.py.

Se esse código rodar sem problemas quer dizer que funcionou e você já pode usar o MySQL.

Criando um Banco de Dados MySQL usando Python

Chegou a hora de criar o nosso primeiro banco de dados. Vamos modificar um pouco o código acima e criar o código que vai conectar Python ao banco de dados MySQL.

Vamos criar uma instância de um objeto da classe MySQLCursor ao invés de apenas fechar a conexão. O objeto interage com com o MySQL server usando um objeto MySQLConnection.

Para criar o cursor basta usar o método cursor() em uma conexão existente. Agora é escrever nossa SQL Query e executar utilizando o método execute() do objeto mycursor da conexão que acabamos de criar.

O comando SQL para criar um banco de dados é:

CREATE DATABASE mydatabase

Juntando tudo, temos esse código abaixo.

import mysql.connector

cnx = mysql.connector.connect(user='root', password='********', host='127.0.0.1')

mycursor = cnx.cursor()
mycursor.execute("CREATE DATABASE mydatabase")

Basta executar esse arquivo com o mesmo comando que mostrei lá em cima, python connection.py. Se esse código também executar sem problemas, parabéns, você acaba de criar o seu primeiro banco de dados usando Python.

Conclusão

Para conferir seu banco de dados recém criado você pode utilizar uma das ferramentas que citei anteriormente. Utilizando o MySQLWorkbench eu obtive esse resultado.

Recapitulando tudo que vimos até aqui.
Primeiro passo, precisamos baixar o MySQL, depois instalar o conector Python/MySQL para conseguirmos conectar Python ao banco de dados MySQL e por fim, criar seu primeiro banco de dados usando o classe MySQLCursor.

Conectar seu projeto a um banco de dados é um passo importante e essencial. Na medida que o seu projeto cresce é de se esperar que você acumule mais dados. Por isso aqui estou citando como conectar Python ao banco de dados MySQL.

MySQL é um banco de dados extremamente confiável e amplamente utilizado, seu projeto vai estará muito bem servido com ele.

Bom espero que tenha ficado claro porque você deve ter um banco de dados no seu projeto e como é simples criar uma conexão.

Até a próxima.

]]>
https://blog.debugeverything.com/pt/como-python-ao-banco-de-dados-mysql/feed/ 7