2017/09/27

À conversa com Luis Damas


A FCA deu-nos a oportunidade de conversar um pouco com alguns dos seus autores, e desta vez o escolhido para a rubrica "À conversa com" foi Luis Damas, autor do livro SQL - que já vai na sua 14ª edição actualizada.

O livro “SQL” tem sido, desde a sua primeira publicação, em 1999, uma das maiores referências na aprendizagem da linguagem SQL na língua portuguesa. A que se deve esta popularidade?

O feedback obtido junto dos leitores parece indicar que a opção de recorrer a exemplos simples e a forma como são explicadas as matérias terá contribuído de forma significativa para o sucesso do livro. Por outro lado, parece ter sido também importante a opção tomada de validar todos os comandos nos principais sistemas usados pela comunidade, evidenciando as variações de sintaxe entre eles, apresentando sempre a solução nos sistemas divergentes.

O que traz esta 14ª edição atualizada de novo?

Nesta nova edição decidimos adicionar à análise dois outros sistemas de uso generalizado - PostgreSQL e SQLite. Todo o exemplo (modelo de dados) de suporte aos comandos SQL foi redesenhado para o aproximar mais da realidade atual e tentou-se refinar ainda mais a forma como algumas matérias são apresentadas. Apesar de ser um livro sobre a linguagem SQL, decidimos também que seria importante incluir uma abordagem, ainda que suave e ligeira, às bases de dados NoSQL, realçando algumas das suas características mais interessantes, para que o leitor conheça outras alternativas que existem, facilitando assim a adoção daquela que melhor responde às suas necessidades.

Para que serve a linguagem SQL e a quem se destina?

A linguagem SQL existe para que o utilizador/programador possa "dialogar" com uma base de dados relacional. Nesta arquitetura de base de dados, todas, mas mesmo toda, as operações são realizadas recorrendo a comandos desta linguagem de alto nível, não sendo possível "martelar" dados ou regras de integridade usando, por exemplo, linguagens de baixo nível. A linguagem destina-se a todos aqueles que, de uma forma ou outra, têm que interagir diretamente com uma base de dados relacional. Estamos a falar não só de programadores mas também de administradores de bases de dados, aplicações, mas não só.


O que distingue a linguagem SQL das restantes linguagens de programação?

A linguagem SQL pertence ao conjunto de linguagens de 4ª geração (4GL). Ao contrário das linguagens tradicionais como o C, C++, Java ou JavaScript, que não têm um objetivo específico para a sua utilização, isto é, são de âmbito lato, a linguagem SQL existe apenas no contexto das bases de dados relacionais e serve única e exclusivamente para a manipulação de dados e respetivas estruturas de controlo (tabelas, índices, metadados, etc.). O estrondoso sucesso da linguagem e a sua utilização generalizada levou à especificação de standards que obrigam os construtores de sistemas gestores de bases de dados relacionais (SGBDR) a implementar um conjunto de funcionalidades e características inspiradas na álgebra relacional.

A linguagem SQL só existe no contexto de um sistema gestor de bases de dados relacional (SGBDR). A sua ligação é tal que muitos utilizadores usam o termo SQL, não para se referirem à linguagem, mas para se referirem a um sistema em particular - SQL Server, por exemplo.

Quais as principais características da linguagem SQL?

As características relacionais da linguagem SQL permitem a manipulação complexa de dados recorrendo a comandos muito simples da linguagem mas, ao mesmo tempo, extraordinariamente poderosos. É assim possível selecionar partes de informação, juntar dados com origens em fontes diferentes, aplicar funções estatísticas (COUNT, AVeraGe, SUM, MAX, MIN, …) a blocos de registos ou ordenar resultados de pesquisas por múltiplos critérios recorrendo a comandos escritos numa linguagem muito próxima do inglês, de tal forma simples, que até uma criança consegue perceber. Todas as operações realizadas numa base de dados relacional têm que ser levadas a cabo por um comando da linguagem SQL. A linguagem é constituída por um conjunto muito reduzido de comandos que estão agrupados em várias sub-linguagens, onde se destacam as seguintes:

  • DDL - Data Definition Language (comandos: CREATE, ALTER, DROP);
  • DML - Data Manipulation Language (comandos: SELECT, INSERT, UPDATE, DELETE);
  • DCL - Data Control Language (comandos: GRANT, REVOKE).

Uma das características marcantes da linguagem é o seu alto nível, isto é, aproxima-se muito da linguagem falada por humanos. No seguinte exemplo pode-se comparar o código necessário para a escrita de um registo com o nome o apelido usando a linguagem C e a linguagem SQL. A diferença é marcante, que na forma quer na legibilidade.

/*
* Linguagem C – Inserir um novo registo (nome e apelido)
* de uma pessoa no ficheiro people.dat
*/
Person rec; /* Declarar o registo */
strcpy(rec.firstName, "John"); /* Copiar os dados */
strcpy(rec.lastName, "Doe"); /* para o registo */
fp = fopen("people.dat", "a+"); /* Abrir o ficheiro */
fwrite(&rec, sizeof(rec), 1, fp); /* Escrever o registo */
fclose(fp); /* Fechar o ficheiro */

-- SQL - Acrescentar um novo registo contendo o nome e o apelido de uma
-- pessoa na tabela People

INSERT INTO People(FirstName, LastName) VALUES('John', 'Doe')


É necessário ligar a linguagem SQL a uma outra linguagem?

A linguagem SQL tem obrigatoriamente que existir no contexto de uma base de dados relacional, ou melhor, no contexto de um sistema que gere uma base de dados relacional. Estamos por isso a afirmar, que a linguagem SQL faz parte de um software específico de gestão de bases de dados. Não é possível criar uma aplicação, um jogo, um relatório ou um gráfico em SQL. O objetivo da linguagem não é esse. A linguagem existe com um objetivo bem definido que é servir de interface entre os vários tipos de utilizadores (pessoas, aplicações, administradores, etc.) e os dados existentes numa base de dados relacional fornecendo para isso um conjunto específico de comandos.

A linguagem SQL será, em princípio, apenas o componente de acesso aos dados de uma aplicação. Cabe ao programador escolher as linguagens a usar na implementação dos restantes componentes da aplicação (ecrãs, relatórios, estatísticas, gráficos, etc.). É natural encontrar aplicações que usam bases de dados relacionais como repositório de dados, usando a linguagem SQL para a sua manipulação e usam uma outra linguagem para controlar o interface com o utilizador (PHP, C#, JavaScript, etc.).

O livro está dividido em duas partes: Bases de Dados e SQL. O conhecimento de Bases de Dados é um pré-requisito para quem se inicia em SQL?

Em princípio os utilizadores da linguagem SQL terão que ter conhecimentos básicos sobre o desenho e modelagem de bases de dados. Em particular, deverão ser capazes de identificar, no Diagrama Entidade-Associação (DEA), a forma como as entidades se relacionam e as relações que estabelecem entre si. Também deverão ser capazes de compreender o modelo de dados que resulta do DEA. É também um requisito obrigatório conhecer alguns dos conceitos básicos da teoria das bases de dados que incluem conceitos como: entidade/tabela, atributo/campo, chave (primária, estrangeira, candidata), regras de integridade, integridade referencial, etc.

Para todos aqueles que participam no processo de análise e desenho será sempre imprescindível dominar o processo de normalização/desnormalização da informação até se ter conseguido que esta esteja numa forma normal razoável (4ª forma normal ou na forma normal de Boyce-Codd), garantindo assim uma divisão da informação perfeita ou muito próxima da perfeição. Por ser importante o conhecimento e domínio das componentes teóricas do desenho de bases de dados, foram apresentadas todas estas matérias ainda antes de se apresentar a linguagem SQL para que ao leitor não faltem as bases necessárias para compreender todos os elementos envolvidos.

Uma leitura atenta da primeira parte do livro, que contém a componente teórica de desenho de bases de dados, facilitará de sobremaneira a escrita dos comandos SQL e uma correta normalização evitará grandes problemas futuros.

O que são os SGBD e para que servem?

Um SGBD é um Sistema Gestor de Bases de Dados. Estamos a falar de software, isto é, trata-se de uma aplicação informática cuja função principal é gerir dados.
Existem vários tipos de gestores de bases de dados, mas os mais comuns são os SGBDR, isto é, os Sistemas Gestores de Bases de Dados Relacionais. A linguagem SQL existe apenas nestes ou em sistemas híbridos que implementam o modelo relacional mas não só ou um modelo relacional adaptado. São exemplos de SGBDR (SQL Server, MySQL, Oracle, DB2, PostgreSQL, Microsoft Access, SQLite).

Existindo no mercado uma grande variedade de SGBDs, quais as características mais importantes a ter em conta na altura de se escolher um SGBD?

Para responder a esta questão, ainda antes de se selecionar o SGBD, deverá identificar-se, de forma clara, o objetivo da base de dados para a organização, que tipo de informação vai conter, se se trata de informação regular, se os acessos vão ser maioritariamente de leitura, escrita ou leitura/escrita, etc.
Eis algumas das características a levar em conta na seleção do SGBD, ordenadas decrescentemente por ordem de importância:

  • Tipo de SGBD (Relacional, Hierárquico, NoSQL);
  • Arquitetura (centralizada vs. distribuída vs. processamento paralelo);
  • Fiabilidade;
  • Capacidade Transacional (execução de transações atómicas) com a possibilidade de Rollback (voltar atrás se algo correr mal);
  • Adaptabilidade/ Versatilidade;
  • Escalabilidade (capacidade de crescer);
  • Mecanismos de segurança e recuperação;
  • Capacidade de parametrização e ferramentas de administração;
  • Custos por servidor/utilizador (aquisição, manutenção, licenciamento);
  • Existência de versões gratuitas (Lite ou Express).

Qual a sua opinião face à nova tendência das NoSQL, as chamadas bases de dados que não utilizam SQL?

A web é uma realidade há já algumas décadas. Veio decididamente para ficar e, por estranho que pareça, nenhum profeta ou vidente a previu ou sequer imaginou. A informação nela contida não é tão "quadrada" (leia-se "regular") quanto a informação presente nas organizações tradicionais. Como tal, houve a necessidade de desenvolver bases de dados cuja estrutura tem a capacidade de crescer, de se alterar e adaptar ao longo do tempo, sem que seja necessário uma redefinição centralizada do schema de suporte.

A tendência cada vez mais acentuada de usar a Cloud, acarreta custos para as organizações que não podem ser menosprezados no contexto da utilização de Software as a Service (SaaS). É cada vez mais comum encontrar organizações que transferem parte dos dados existentes em bases de dados relacionais para arquiteturas NoSQL para reduzir os custos de licenciamento associados às BD relacionais, conseguindo conjugar numa solução os ambientes relacional, NoSQL ou outro. Não podemos ver as BD relacionais e NoSQL como rivais. Antes são arquiteturas alternativas que se complementam. Existe ainda todo um mundo intermédio de bases de dados híbridas em que as características dos dois modelos coexistem. Nada como poder aproveitar o melhor dos dois mundos.

- Numa era em que as empresas se esforçam por congregar todos os dados e retirar informação e conhecimento, a linguagem SQL poderá ser um grande aliado?

Enquanto existirem bases de dados relacionais envolvidas no processo, a linguagem SQL será sempre um componente obrigatório. A capacidade relacional destas bases de dados e a simplicidade da linguagem SQL são fatores dificilmente igualáveis noutras arquiteturas. É fácil sentirmos saudades da linguagem SQL quando, por exemplo, numa outra arquitetura se tem que juntar informação que existe em duas fontes de dados distintas, algo que em SQL é elementar (INNER JOIN).
É portanto expectável que as bases de dados relacionais e a linguagem SQL continuem a ser utilizadas numa grande percentagem das soluções informáticas ainda que outras arquiteturas estejam a ganhar terreno.

E é tudo, o nosso obrigado pelo tempo dispensado, e ficamos aguardar pelos seus próximos livros. :)

Luís Manuel Dias Damas
Licenciado em Informática pela Faculdade de Ciências da Universidade de Lisboa e Mestre em Gestão de Informação pela Universidade Católica Portuguesa. Desenvolve a sua atividade na área do Desenvolvimento de Aplicações como Consultor. Paralelamente, tem lecionado, em universidades e outros organismos, disciplinas na área das Linguagens e Técnicas de Programação. É autor dos livros Linguagem C e SQL, publicados pela FCA.



Para quem chegou até aqui, temos uma surpresa. Temos para oferecer dois exemplares do livro SQL e para te habilitares a ganhar um deles só tens que participar preenchendo o seguinte formulário:

Passatempo encerrado: Os vencedores foram:

  • Tiago Macedo
  • Pedro Camacho


Fica atento aos próximos passatempos.

Sem comentários:

Enviar um comentário (problemas a comentar?)