<Direto ao Ponto 54> Os Bancos de Dados
- #Informática Básica
Artigos desta série: ( < ) Anterior | Índice | Seguinte ( > )
Olá, dev!
Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. Hoje eu vou falar dos bancos de dados, que vieram para centralizar o uso dos dados usados pelos programas.
Sumário
1. Introdução
2. O uso de dados pelos programas
3. Os bancos de dados
4. Os SGBDs
5. Considerações finais
6. Referências
1 – Introdução
Eu criei a série de artigos DIRETO AO PONTO com o objetivo de apresentar, de forma simples e direta, conhecimentos básicos da programação e de computação, principalmente, para os iniciantes.
Aqui, são tratados de temas como lógica de programação, linguagens, hardware dos computadores, história da computação e assuntos relacionados à plataforma da DIO, como a escrita de artigos e os desafios de código.
Neste artigo, eu vou falar sobre os bancos de dados e os SGBDs (Sistemas Gerenciadores de Bancos de Dados).
2 – O uso de dados pelos programas
Desde as primeiras linguagens de programação, os programas são compostos por instruções e variáveis. As variáveis servem para armazenar os diversos valores usados por um programa de computador, que vão guardando informações para uso durante a execução do programa.
Estes dados podiam estar associados a várias coisas (nomes, grandezas, medidas, valores etc.) e eram representados de várias maneiras (números, letras, símbolos etc.).
Cada programa usava os dados dos quais precisava, armazenava-os na memória, temporariamente, e, depois, podia guardá-los de forma definitiva em alguma mídia gravável (fita, disco, disquetes) para uso posterior.
Assim, cada programa era responsável por criar, armazenar e reusar os dados de que precisava.
Isso criava uma dificuldade para usar os dados gerados por outros programas, com formatos proprietários diferentes, muitas vezes, impedindo o compartilhamento de dados e uma integração direta entre os programas.
Mesmo que os dados fossem padronizados, todo programa precisava codificar as funções para manipulação dos dados que precisaria usar, como carregar os dados, converter formatos, atualizá-los e armazená-los de volta.
Finalmente, foi encontrada uma forma de padronizar tudo isso, inclusive as funções que manipulavam os dados.
Assim surgiram os bancos de dados, programas que guardavam os dados, organizavam estes dados como era indicado pelos programas, seguiam uma padronização de formatos e ofereciam funções padronizadas para manipulação dos dados.
Esses programas foram chamados de Sistemas Gerenciadores de Bancos de Dados – SGBD (do inglês “Database Management Systems – DBMS”).
A partir daí, os códigos dos programas incluiriam instruções padronizadas para ler os dados armazenados nos SGBDs, usá-los e depois, gravá-los de volta no SGBD usado, com os valores atualizados.
3 – Os Bancos de Dados
Cada programa usa uma série de dados relacionados com a área em que ele é aplicado. Um programa financeiro usa dados sobre valores monetários, moedas, receitas e despesas.
Já um programa sobre uma coleção de discos usa dados de compositores, cantores, músicas, capas, duração das músicas etc. Um jogo usa personagens, cenários, objetos, fases, pontuação etc.
Ou seja, cada programa trabalha com dados particulares e específicos para sua aplicação. Como um sistema (SGBD) pode oferecer funções para gerenciamento e manipulação de tamanha diversidade de dados?
Bem, os primeiros SGBDs organizavam os dados internamente em tabelas (bancos de dados relacionais), com colunas de diversos tipos (inteiro, real, caracteres, strings etc.) e ofereciam instruções para manipulação de cada tipo de dado separadamente.
O que um programa precisa fazer é adaptar seus dados para os formatos permitidos pelo SGBD que está usando. Além disso, o programa é responsável por determinar a organização com que seus dados vão ser armazenados no SGBD.
Por exemplo, um sistema de acompanhamento das notas dos alunos poderia ter uma tabela (boletim_alunos) com dados como nome do aluno, fase, ano, disciplina, nota e bimestre.
Assim, o programa deveria definir um tipo para cada um deles (nome do aluno, string, fase – string, ano – string, disciplina – string, nota – número real, bimestre – número inteiro).
Também seria definida uma organização para os dados, como uma tabela assim:
Esta estrutura e estes tipos seriam passados para o SGBD para que ele organizasse os dados da aplicação e pudesse armazená-los adequadamente.
O programa poderia ler os dados armazenados, usá-los e, depois, salvá-los no SGBD, atualizados, para uso futuro.
Desta forma, o programa não precisaria se preocupar com questões como segurança, padronização, desempenho, escalabilidade, complexidade e outras coisas, que agora eram responsabilidade do SGBD.
Neste ponto, é importante separar duas coisas: o que é um SGBD e o que é um banco de dados.
Um banco de dados é uma coleção de dados organizados conforme definido pelo programa e armazenado em um sistema de gerenciamento de bancos de dados (um SGBD). Por exemplo, os dados da tabela acima do sistema de acompanhamento de notas dos alunos, armazenados em um SGBD, formam um banco de dados.
Os dados de uma tabela (ou de várias tabelas) organizados conforme definição de um programa de cadastro de dados de músicas ou filmes, armazenados em um SGBD, seriam outro banco de dados. Um SGBD pode ter vários bancos de dados armazenados nele.
Já um SGBD é um sistema que permite o armazenamento de vários bancos de dados e oferece várias funções e comandos para criar bancos de dados e manipular os dados armazenados.
Vamos tratar dos SGBDs a seguir.
4 – Os SGBDs
Como foi dito acima, um SGBD é um sistema para armazenamento, gerenciamento e manipulação padronizada de dados organizados.
Um SGBD não é uma criação aleatória e amadora para guardar e acessar dados, criada apenas por comodidade. Ele se baseia em teorias matemáticas concretas de Álgebra e Cálculo Relacionais.
Atualmente, os SGBDs são aplicados em praticamente todas as áreas de aplicações, principalmente nesta época de uso massivo de grandes volumes de dados, em aplicações de “Big Data”, “Business Intelligence” e IA.
Segundo [1], os bancos de dados podem ser classificados em diferentes tipos, com base na maneira como os dados são organizados e gerenciados:
Bancos de dados relacional - Utilizam tabelas para armazenar dados e são baseados no modelo relacional. Os dados são organizados em linhas e colunas, existindo uma relação estreita e formal entre eles. Os principais são:
· MySQL
· PostgreSQL
· SQLite
· SQL Server
· Oracle Database
Bancos de dados NoSQL (“no SQL”) – Lidam com grandes volumes de dados não estruturados ou semiestruturados; são flexíveis para armazenar diferentes tipos de dados sem uma estrutura fixa. Podem ser baseados em documentos (JSON), colunas, chave-valor, grafos, etc. Alguns exemplos são:
· MongoDB;
· CouchDB;
· Cassandra;
· HBase;
· Redis;
· DynamoDB;
· Neo4j;
Bancos de dados orientado a objetos - Armazenam dados como objetos, como ocorre nas linguagens de programação orientadas a objetos. Cada objeto pode conter dados e métodos para processamento desses dados. Exemplos:
· db4o;
· ObjectDB;
· Caché.
Bancos de dados em memória (“In-Memory”) - Armazenam dados diretamente na memória RAM, ao invés de usar discos rígidos (HDs), permitindo acesso muito mais rápido. Exemplos:
· Redis;
· HANA;
· Memcached.
Bancos de dados distribuídos - Armazenam dados em diferentes locais físicos ou servidores, de uma forma que os dados parecem estar em um único banco de dados lógico. Exemplos:
· Cassandra;
· DynamoDB;
· Google Cloud Spanner.
Cabe ao programador selecionar um SGBD com base nas necessidades específicas de cada aplicação, como desempenho, escalabilidade, complexidade e tipo de dados que precisam ser armazenados.
CONCEITOS ASSOCIADOS A BANCOS DE DADOS
Tabela (“Table”) - Estrutura interna ao banco que organiza os dados em linhas e colunas. Cada linha representa um registro, cada coluna representa um campo ou atributo do registro. Exemplo:
Uma tabela chamada Clientes pode ter as seguintes colunas: “ID_Cliente”, “Nome”, “Email” e “Telefone”, onde cada linha corresponde a um cliente específico.
Índice (“Index”) - estrutura de dados que melhora a velocidade das operações de consulta em uma tabela, permitindo acesso rápido a registros específicos. Funciona de maneira semelhante ao índice de um livro, facilitando a busca por dados. Exemplo:
Um índice em uma coluna de Email na tabela “Clientes” permite buscas mais rápidas por clientes específicos usando seus endereços de email.
Chave Primária (“Primary Key”) - É uma coluna (ou conjunto de colunas) em uma tabela que identifica de forma exclusiva cada registro dessa tabela. Não pode conter valores nulos e deve ter valores únicos. Exemplo:
Na tabela “Clientes”, a coluna “ID_Cliente” é frequentemente usada como chave primária, pois cada cliente tem um ID (identificador) único.
Chave Estrangeira (“Foreign Key”) - Coluna (ou conjunto de colunas) de uma tabela que faz referência à chave primária de outra tabela, criando um vínculo entre elas. Ela é usada para manter a integridade referencial, garantindo que um registro em uma tabela exista apenas se houver um registro correspondente na outra tabela. Exemplo:
Uma tabela “Pedidos” pode ter uma coluna “ID_Cliente”, que é uma chave estrangeira referenciando a chave primária “ID_Cliente” na tabela “Clientes”. Isso indica qual cliente fez o pedido.
Integridade referencial – Garantia da consistência e da precisão das relações entre tabelas relacionadas por meio de chaves estrangeiras, objetivando evitar inconsistências que poderiam comprometer a qualidade e a confiabilidade dos dados no banco.
TIPOS DE DADOS
Os campos (ou colunas) em uma tabela de banco de dados relacional podem ter diferentes tipos de dados. Os tipos mais comuns incluem:
Numéricos – Armazena números inteiros ou reais.
· INT: Usado para números inteiros.
· FLOAT e DOUBLE: Usados para números de ponto flutuante (decimais).
· DECIMAL: Usado para valores numéricos exatos com ponto decimal fixo, ideal para valores monetários. Exemplo:
· ”DECIMAL(10, 2) salario” pode armazenar valores como `3500.75`.
Texto e Caracteres – Armazena textos de tamanho fixo, variável ou longo.
· VARCHAR: Usado para strings de comprimento variável. Exemplo: VARCHAR(50) nome” pode armazenar nomes como “Fernando Araujo”.
· CHAR: Usado para strings de comprimento fixo. Exemplo: “CHAR(5) codigo” pode armazenar valores como “ABC12”;
· TEXT: Usado para grandes blocos de texto.
Datas e Horários – Armazena datas, horários ou os dois juntos.
· DATE: Armazena uma data no formato “YYYY-MM-DD”. Exemplo: “DATE data_nascimento” pode armazenar “2024-10-21”.
· TIME: Armazena um horário no formato “HH:MM:SS”. Exemplo: “TIME horário” pode armazenar “14:32:15”.
· DATETIME e TIMESTAMP: Armazenam data e hora, em formato conjunto. Exemplo: “DATETIME data_hora” pode armazenar `2024-10-21 14:32:15`.
Booleanos (BOOLEAN ou BOOL) - Usado para valores lógicos `TRUE` ou `FALSE`.
BLOB (”Binary Large Object”) - Usado para armazenar grandes quantidades de dados binários, como imagens, vídeos ou arquivos. Exemplo: uma foto pode ser armazenada como um BLOB.
Um SGBD oferece uma linguagem padronizada para gerenciar os bancos de dados armazenados nele e manipular seus dados. Ela é chamada SQL (”Structured Query Language”), ou linguagem de consulta estruturada.
SQL (Structured Query Language) é a linguagem padrão para gerenciar e manipular bancos de dados relacionais. Os principais comandos SQL são divididos em diferentes categorias, conforme a sua finalidade. Os principais são os grupos de definição de dados, para a criação de tabelas, e de manipulação de dados, para a realização de consultas e atualizações dos dados.
Mas isso é assunto para o próximo artigo.
5 – Considerações finais
Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. Neste artigo eu tratei dos bancos de dados e dos SGBDs (Sistemas de Gerenciamento de Bancos de Dados), usado por praticamente todas as aplicações de médio e grande porte atualmente.
Um banco de dados é uma coleção de dados organizados conforme definido por um programa e armazenado em um sistema de gerenciamento de bancos de dados (um SGBD).
Um SGBD é um sistema que permite o armazenamento de vários bancos de dados e oferece várias funções e comandos para criar bancos de dados e manipular os dados armazenados.
No início da programação, os programas precisavam criar, armazenar e reusar os dados de que precisava. Era difícil um programa usar dados gerados por outros programas, com formatos proprietários diferentes, o que impedia o compartilhamento de dados entre eles.
Os bancos de dados e os SGBD vieram para padronizar o uso de dados pelos programas.
Os primeiros SGBDs eram os relacionais, que tratavam os dados como tabelas, com cada linha representando um registro e cada coluna representando um campo com um tipo de dado específico.
Os bancos de dados antigos eram formados por várias tabelas relacionadas. Atualmente existem SGDS de vários tipos, possibilitando armazenar e manipular diversos tipos de dados como números, textos, imagens, áudios vídeos etc.
Este artigo listou e descreveu os principais tipos de SGBDs, os diversos tipos de dados e deu conceitos sobre bancos de dados.
No próximo artigo, será tratada a linguagem SQL (Structure Query Language), que oferece meios de gerenciar e manipular os dados armazenados em um SGBD.
OBS: No artigo anterior, eu disse que no próximo artigo (este!) eu contaria a história de quando eu criei as listas encadeadas, mas como ainda não lembrei exatamente do programa que eu escrevi para isso, deixei para contar depois.
6 – Referências
Praticamente todo o conteúdo deste artigo foi tirado do que eu aprendi (e me lembro) sobre o assunto desde o início da minha carreira como programador, desde os anos 80 até agora.
Para descrever os tipos de bancos de dados usados atualmente, eu me atualizei com uma consulta ao ChatGPT.
Artigos desta série: ( < ) Anterior | Índice | Seguinte ( > )