Banco de dados
Em informática, um banco de dados é um conjunto organizado de informações relacionadas, contendo registros sobre pessoas, lugares ou dados em geral, geralmente acessíveis eletronicamente. Ele opera com base em um Sistema de Gerenciamento de Banco de Dados (SGBD), que é um software que atua como intermediário entre usuários, aplicativos e o próprio banco de dados para coleta e análise. O SGBD também oferece recursos essenciais para a administração do banco de dados. A combinação do banco de dados, do SGBD e dos aplicativos associados forma o sistema de banco de dados. Frequentemente, o termo "banco de dados" é usado de forma genérica para se referir a qualquer SGBD, sistema de banco de dados ou aplicativo relacionado.
A necessidade humana de registrar informações levou ao desenvolvimento de diversas técnicas ao longo do tempo. Pinturas pré-históricas, hieróglifos, escrita cuneiforme e a escrita alfabética foram métodos iniciais de registro. A invenção do papel em 105 d.C. e, posteriormente, a prensa móvel de Gutenberg no século XV, revolucionaram a impressão e o registro de informações em papel. Essa evolução influenciou o início da era computacional, com o uso de papel e cartão perfurado em máquinas, idealizados por Herman Hollerith, fundador da IBM. Bancos de dados não computadorizados, como arquivos de aço, fichas e pastas, também demonstram a importância histórica do papel como meio de armazenamento.
Existem diversos modelos de bancos de dados, incluindo o Modelo Plano (ou tabular), Modelo de Memória Transacional, Modelo em Rede, Modelo Hierárquico, Modelo Relacional, Orientado a Objetos e Objeto Relacional.
Ao contrário dos modelos hierárquico e de rede, o modelo relacional, baseado na teoria matemática de Edgar Frank Codd, não utiliza ponteiros. Toda informação é representada como dados, e atributos representam relações entre conjuntos de dados. Este modelo permite que usuários criem consultas não previstas pelos projetistas, tornando-o flexível para diversas aplicações e períodos de uso, o que o torna popular no meio empresarial. Embora a teoria de Codd estabeleça 12 leis, poucos sistemas de gerenciamento de banco de dados as seguem integralmente, apresentando variações em complexidade e poder.
Sistemas Gerenciadores de Bancos de Dados (SGBDs) são amplamente utilizados em praticamente toda a gama de software de computador. São o método preferencial para armazenamento e recuperação de dados em aplicações multiusuários de grande porte, onde a coordenação entre usuários é essencial. Mesmo usuários individuais se beneficiam de sua conveniência, com muitos programas de e-mail e organizadores pessoais baseados em tecnologia de banco de dados padrão.
Uma transação é um conjunto de procedimentos executados em um banco de dados, percebidos pelo usuário como uma única ação. A integridade de uma transação é garantida por quatro propriedades conhecidas como ACID. A transação possui os seguintes estados:
O controle de concorrência é um método para garantir a execução segura de transações, seguindo as regras ACID. Os SGBDs devem assegurar que ações de transações concluídas com sucesso não sejam perdidas ao desfazer transações abortadas (rollback). Uma transação é uma unidade que preserva a consistência. Qualquer escalonamento de transações concorrentes deve ser equivalente a um escalonamento serial. Sistemas que garantem essa propriedade asseguram a serialização.
Em vez de bloquear o banco de dados inteiro, uma transação pode bloquear apenas os itens de dados que acessa. Sob essa política, a transação mantém os bloqueios pelo tempo necessário para garantir a serialização, mas minimizando o impacto no desempenho.
Bancos de dados armazenam informações variadas, desde dados de e-mail até informações fiscais. A segurança de bancos de dados enfrenta os mesmos desafios da segurança da informação: garantir integridade, disponibilidade e confidencialidade. SGBDs devem oferecer mecanismos para auxiliar nessa tarefa. A injeção de SQL é um ataque comum em bancos de dados que utilizam essa linguagem, mas bancos de dados NoSQL também são vulneráveis. Para prevenir esses ataques, desenvolvedores devem garantir que nenhuma entrada altere a estrutura da consulta. Bancos de dados SQL usam mecanismos como o comando GRANT para restringir ou permitir acesso a dados com base em papéis definidos pelo administrador.
Falhas em bancos de dados podem ocorrer em três níveis: transação, sistema ou mídia. A falha de transação, a mais comum, ocorre quando uma transação é encerrada irregularmente, geralmente por falta de dados ou erros de programação. Falhas de sistema, com probabilidade mediana, ocorrem por interrupções na execução do sistema (falta de energia, falha de hardware, problemas no sistema operacional). Falhas de mídia resultam em perda de dados no disco, tornando o banco de dados inacessível, geralmente devido a problemas de leitura ou danos físicos no disco.
Existem mecanismos para recuperar bancos de dados de inconsistências causadas por falhas internas (erros de consistência) e externas (falta de energia, desastres ambientais), embora não sejam 100% seguros. Mecanismos comuns incluem o Log de dados, usado com outros métodos; o uso de Buffer, controlado por rotinas de baixo nível pelo SGBD; Write-ahead logging (WAL); e informações de transações para REDO (refazer) e UNDO (desfazer). Estes métodos permitem retornar o banco de dados a um estado anterior consistente, além de cópias de segurança de logs e dados alterados.