Abordagens de BD
Como já aprendemos ao longo do curso de Engenharia de Computação, os programas que desenvolvemos no início não possuíam persistência: os valores atribuídos às variáveis eram armazenados na memória principal. Em seguida, na disciplina de Algoritmos e Estruturas de Dados II, aprendemos a persistir dados dos nossos programas usando arquivos binários ou de texto.
Nessa abordagem, chamada por Elmasri e Navathe (2011) como processamento de arquivo tradicional, cabe ao desenvolvedor de um software definir os arquivos necessários para a sua aplicação, bem como as funções de leitura e escrita desses dados. Como já sabemos e testamos na atividade, essa abordagem é bastante limitada, tanto com relação à recuperação dos dados quanto com relação aos acessos simultâneos.
Na abordagem de banco de dados, há um único repositório de dados, independente das aplicações. Se, por um lado, há maior vantagem quanto ao compartilhamento dos dados por diferentes aplicações, há também a necessidade de padronização, de modo que todas as aplicações que usem esse banco de dados adotem a mesma terminologia.
Elmasri e Navathe (2011) discutem as seguintes características com relação às duas abordagens:
- natureza de autodescrição de um sistema de banco de dados;
- isolamento entre programas e dados, abstração de dados;
- suporte de múltiplas visões dos dados;
- compartilhamento de dados e processamento de transação multiusuário;
Natureza da autodescrição
Elmasri e Navathe (2011) salientam que um dos aspectos fundamentais da abordagem de banco de dados é que o "seu sistema contém não apenas o próprio banco de dados, mas também uma definição ou descrição completa de sua estrutura e restrições". Ou seja: além dos dados em si, são armazenados também os metadados (dados sobre dados), que possibilitam entender a estrutura de cada arquivo, o tipo e o formato de armazenamento de cada dado, além das restrições sobre eles.
O armazenamento desses metadados é importante por diversos fatores:
- diferentes aplicações, desenvolvidas em diferentes linguagens e por diferentes pessoas, irão acessar e atualizar os dados disponibilizados nesse banco;
- o SGBD não é desenvolvido para um banco de dados específico, tendo propósito geral e, portanto, a necessidade de "entender" a organização daquele banco de dados;
Em resumo, na abordagem de processamento tradicional de arquivos, cada aplicação é responsável por gravar e recuperar dados de seus arquivos. Isso envolve a definição de um padrão interno para cada aplicação. Se há compartilhamento desses mesmos arquivos em diferentes aplicações, deve existir um padrão (e um acordo para segui-lo) no desenvolvimento desses programas diversos, para que o padrão seja respeitado por todos eles.
Na abordagem de banco de dados, a estrutura do banco, suas restrições e tipos de dados são registrados no SGBD. Para recuperar os dados e alterá-los, as aplicações deverão se conectar ao SGBD. Por conhecer as regras daquele banco específico, o SGDB garantirá que as aplicações tenham acesso aos dados, desde que satisfaçam em suas solicitações os requisitos daquele banco específico.
Isolamento entre programas, dados e abstração de dados
Como já discutimos, na abordagem de processamento tradicional de arquivos os dados e as aplicações estão fortemente vinculados. Assim, a alteração no formato de um arquivo (ou de um programa) deve envolver alterações em todos os programas que acessam aquele arquivo. Já com o uso do SBBD, temos uma propriedade importante, chamada de independência de dados do programa.
Dentre os sistemas de banco de dados, os bancos orientados a objeto e objeto-relacional usualmente possibilitam a definição de operações sobre os dados como parte das definições do banco de dados.
Elmasri e Navathe (2011) pontuam que essa operacão (ou função ou método) possui:
- a interface (ou assinatura), incluindo seu nome e os tipos de dados de seus argumentos ou parâmetros;
- a implementação (ou método) da operação é especificamente separadamente e pode ser alterada sem afetar a interface.
Nesses casos, os programas de aplicação podem efetuar operações sobre os dados ao invocar essas operações, independentemente de como elas são implementadas. A essa operação, dá-se o nome de independência da operação do programa.
Elmasri e Navathe (2011) destacam ainda que a característica que possibilita tanto a independência de dados do programa quanto a independência da operação do programa é chamada de abstração de dados. Isso ocorre porque o SGBD oferece uma "representação conceitual" dos dados, sem apresentar (num primeiro momento) detalhes de como esses dados são armazenados ou de como as operações são implementadas.
Modelo de dados é o nome que se dá à abstração de dados capaz de oferecer essa representação conceitual. Um modelo de dados faz uso de conceitos lógicos, como objetivos, seus atritubos e relacionamentos. Assim, a compreensão do modelo (e sua validação) torna-se mais fácil por não envolver aspectos estritamente técnicos, como endereços de memória e a quantidade de bytes necessários para armazená-los. Elmasri e Navathe (2011) resumem: "o modelo de dados oculta os detalhes de armazenamento e implementação que não são do interesse da maioria dos usuários de banco de dados".
Na abordagem de banco de dados, as informações detalhadas sobre a estrutura e a organização de cada arquivo ficam registradas no catálogo do sistema. Os usuários e as aplicações interagem com uma visão conceitual desses arquivos, enquanto o Sistema de Gerenciamento de Banco de Dados (SGBD) recorre ao catálogo para recuperar os dados físicos necessários durante o acesso aos arquivos. Para fornecer esse nível de abstração, diversos modelos de dados podem ser empregados.
Nos bancos orientados a objetos e nos modelos objeto-relacionais, o processo de abstração vai além da estrutura dos dados e incorpora também as operações que podem ser realizadas sobre eles. Essas operações representam atividades do mundo real que os usuários reconhecem intuitivamente. Por exemplo, uma operação como CALCULA_MEDIA pode ser definida para a entidade ALUNO, permitindo calcular sua média de notas. Tais operações podem ser acionadas por consultas ou programas, sem que seja necessário conhecer os detalhes técnicos de sua implementação. Dessa forma, o usuário acessa uma operação abstrata, que encapsula uma ação típica do domínio de aplicação.
Suporte a múltiplas visões
Em um banco de dados, diferentes usuários podem demandar diferentes visualizações. Considere novamente uma universidade como exemplo: a base de dados do Portal Acadêmico é a mesma, mas os pontos de interesse de estudantes, professores e servidores técnico-administrativos são diferentes.
Nesse contexto, destacam-se as visões. Segundo Elmasri e Navathe (2011), uma "visão pode ser um subconjunto do banco de dados ou conter dado virtual, que é derivado dos arquivos do banco de dados, mas não estão explicitamente armazenados". Para muitos usuários, inclusive, não faz sentido saber se os dados são computados ou se estão realmente armazenados no banco.
Compartilhamento de dados e processamento de transação multiusuário
Uma das vantagens da abordagem de banco de dados é justamente possibilitar que diferentes usuários acessem uma única base de dados ao mesmo tempo. Naturalmente, além das operações de leitura, há também operações de escrita, que carecem de um tratamento especial. Já parou para pensar o que acontece quando dois usuários diferentes tentam editar o mesmo registro no banco de dados, ao mesmo tempo? Um exemplo interessante desse tipo de situação é a venda de passagens.
Para lidar com essa situação, o SGBD precisa dispor de um mecanismo de controle de concorrência, de modo a garantir que as alterações "simultâneas" sejam controladas e efetuadas de forma correta e eficiente. Este recurso torna-se especialmente essencial em aplicações do tipo OLPT (On-Line Transaction Processing).
Para apoiar este processo, existe o conceito de transação, essencial em diversas aplicações que utilizam bancos de dados. Trata-se de um processo em execução que realiza uma ou mais operações sobre o banco, como leituras ou modificações em seus dados. Para que uma transação seja considerada logicamente correta, ela deve ser concluída por inteiro, sem interferência de outras transações simultâneas.
Cabe ao Sistema de Gerenciamento de Banco de Dados (SGBD) assegurar certas propriedades fundamentais das transações. Entre elas, o isolamento garante que cada transação seja executada como se estivesse sozinha no sistema, mesmo quando várias ocorrem ao mesmo tempo. Já a atomicidade assegura que todas as ações de uma transação sejam realizadas integralmente ou, em caso de falha, nenhuma delas tenha efeito no banco de dados.
Os conceitos são muitos, mas não se assuste. Eles foram apresentados agora, no início da disciplina, apenas para que você entenda um pouco sobre tudo o que está envolvido quando falamos em sistemas de banco de dados. Ao longo da disciplina, conheceremos esses termos mais a fundo.
📚 Referência bibliográfica
Esta página é baseada e contém reprodução ipsis litteris, para fins exclusivamente didáticos, de trechos do livro "Sistemas de Bancos de Dados, de Elmasti e Navathe (2011). A leitura do livro é fortemente recomendada para o aprofundamento dos conceitos.