sexta-feira, 24 de dezembro de 2010

10 dicas de segurança para dispositivos móveis, segundo a ESET

Segundo pesquisa feita pela unidade latino-americana da ESET, empresa responsável pelo premiado antivírus ESET NOD32, 79% dos usuários de dispositivos móveis utilizam seus smartphones e PCs de bolso para buscar informações na web, e 40% relatou ter sofrido roubo ou extravio dos dispositivos durante o último ano.

“Mesmo que 96% dos usuários destes dispositivos se digam preocupados pela segurança de sua informação, 74% declarou não utilizar nenhuma solução antivírus ou de segurança. Os smartphones e PCs de bolso são os novos alvos de ataque que os usuários muitas vezes não se dão conta de que, como qualquer dispositivo com acesso a Internet, estão expostos diariamente a uma inumerável quantidade de ameaças virtuais, somadas ao risco de roubo e à perda de informações. Por fim, exigem também determinadas precauções para uso seguro e responsável”, diz Federico Pacheco, Gerente de Educação e Investigação da ESET América Latina.

Por este motivo, os especialistas em segurança virtual da ESET América Latina desenvolveram uma lista com dez práticas básicas de segurança para que os usuários mantenham a proteção e integridade dos dados que armazenam e transmitem através de seus telefones celulares:

Ative o acesso ao dispositivo através de senha pessoal (PIN). Se o equipamento permitir, crie também uma senha para o seu desbloqueio, de forma que se impeça seu uso por parte de terceiros assim como o acesso aos dados armazenados em caso de perda ou roubo.
Realize uma cópia de segurança dos dados do dispositivo. Isso permitirá manter em segurança os dados da agenda, fotos, vídeos, documentos armazenados, downloads e outros, para que possam ser restaurados em caso do celular ser infectado ou ocorra algum incidente de perda de informações.
Ative as conexões por bluetooth, infravermelho e WiFi somente quando for utilizá-las, de forma que não se convertam em portas de acesso para possíveis criminosos. Se o modelo permitir, estabeleça senhas para o acesso ao dispositivo através destas conexões.

Assegure-se sempre que os equipamentos a que estejam conectados os dispositivos estejam “limpos” e não irão transmitir arquivos infectados ao telefone.
Não insira cartões de memória no dispositivo sem ter comprovado antes que estão livres de arquivos infectados com algum tipo de código malicioso.
Só faça downloads de aplicativos de sites de confiança ou lojas oficiais (como por exemplo Apple Store, Ovi da Nokia, etc). As mesmas devem estar sempre certificadas pelos fabricantes.

Não entre em links enviados através de mensagens SMS/MMS não solicitados e que resultem no download de conteúdo no equipamento.
Desconecte sempre os serviços de web que exijam senha antes de fechar o navegador web.
Instale um software antivírus, como ESET Mobile Security, que lhe permita a detecção de ameaças no celular, de forma que impeça a execução e transmissão a outros equipamentos. Para conhecer mais sobre o ESET Mobile Security acesse http://www.esetmobilesecurity.com/video

Anote o número IMEI (Identidade Internacional de Equipamento Móvel) de seu telefone. Este número, único para cada dispositivo móvel em todo o mundo, permite às operadoras desativar o telefone em caso de roubo, inclusive se for trocado o chip SIM. Para ver o código, digite *#06#. O telefone devolverá o código IMEI.
“Através destes conselhos, seu dispositivo móvel estará mais protegido, assim como a informação que esteja armazenada neles”, conclui Camillo Di Jorge, country manager da ESET Brasil.

Aiptek lança o surpreendente Pocket Cinema Z20 no país



Aparelho do tamanho de um celular projeta imagens de até 65” em superfícies planas, contando ainda com filmadora HD e câmera de 8 MP integradas
A Aipetk do Brasil lança no país o aguardado Pocket Cinema Z20. O surpreendente aparelho, do tamanho de um pequeno celular, projeta imagens de até 65” em qualquer superfície plana e ainda conta com filmadora HD e câmera digital de 8 MP integradas, permitindo que o usuário grave vídeos (com áudio) e faça fotos de altíssima qualidade.
Ideal para uso tanto nos momentos de lazer como nas apresentações de negócios, a novidade pode ser plugada com praticidade a uma série de aparelhos para receber vídeos, fotos e arquivos em geral, entre eles notebook/PC, TV, DVD, celulares e videogames. O aparelho conta ainda com memória interna de 2GB para gravação de dados e aceita cartões de memória de até 32GB.
“O Pocket Cinema Z20 é único no mercado. Ele cabe no bolso e permite levar o entretenimento ou as apresentações de negócio para onde o consumidor desejar. Além disso, é possível registrar os melhores momentos do dia a dia ou das viagens utilizando o aparelho para filmar em HD ou fazer fotos com resolução de até 8MP”, enfatiza JairoRozenblit, diretor Geral da Aiptek do Brasil - subsidiária da multinacional sediada em Taiwan e considerada um dos maiores players do mercado de eletroeletrônicos do mundo.
Nas projeções, a novidade da Aiptek garante alta qualidade de imagens graças a sua tecnologia LED de alto contraste, que oferece mais de 20.000 horas de uso. Superfácil de usar, o Pocket Cinema conta com visor de cristal liquido de 2,4 polegadas e oferece ainda interface extremamente prática, através de botões touch screen. O aparelho vem com controle remoto e possui alto-falante com som estéreo integrado.
Contando com design moderno, o Pocket Cinema Z20 pesa apenas 195 gramas e funciona com bateria de Ion-Lítio recarregável, com duração média de 2 horas de uso contínuo. O aparelho também pode ser conectado à tomada e utilizado pelo tempo que for necessário.O preço médio do Pocket Cinema Z20 sugerido para o consumidor final é de R$ 1.899,00 (valor válido até o final de dezembro de 2010).
Assista o vídeo do produto: http://www.youtube.com/watch?v=E8gDmDP__Bk

quarta-feira, 22 de dezembro de 2010

Utilizando Select Case com MySQL

 
Miqueias Lopes Segunda-feira, 08 de novembro de 2010

Olá, pessoal. Neste artigo falaremos sobre um recurso muito utilizado nas linguagens de programação, mas que não é muito conhecido nos bancos de dados, o Select Case.

Select Case é uma estrutura de controle que realiza as seguintes operações:
  • Avalia-se a expressão, dando como resultado um número.
  • Depois, percorrem-se os "Case" dentro da estrutura procurando que o número coincida com um dos valores.
  • É necessário que coincidam todos os seus valores.
  • Quando se encontra a primeira coincidência, se executa o bloco de sentenças correspondente e se sai da estrutura Select-Case.
  • Se não se encontra nenhuma coincidência com nenhum valor, se executa o bloco de sentenças da secção "Case Else".
Ou seja:
CASE valor WHEN [valor comparado] THEN resultado [WHEN [valor comparado] THEN resultado
...] [ELSE resultado] END, 
CASE WHEN [condição] THEN result [WHEN [condição] THEN resultado
...] [ELSE resultado] END
Logo abaixo, seguem dois exemplos de como poderíamos utilizar o Select Case em uma consulta ao banco de dados.

Exemplo 1

Suponhamos que você precise obter os aniversariantes do dia em uma determinada tabela do banco de dados. Porém, o valor que faz referência ao mês de aniversário está armazenado da seguinte maneira: 'jan', 'fev', 'mar', 'abr' ...
A solução seria:
select distinct *
from pessoas
where (trim(dia_nascimento) <> "" and trim(mes_nascimento) <> "")
and dia_nascimento = date_format(curdate(),'%d')
and upper(mes_nascimento) = case date_format(curdate(),'%m')
when 01 then 'JAN'
when 02 then 'FEV'
when 03 then 'MAR'
when 04 then 'ABR'
when 05 then 'MAI'
when 06 then 'JUN'
when 07 then 'JUL'
when 08 then 'AGO'
when 09 then 'SET'
when 10 then 'OUT'
when 11 then 'NOV'
when 12 then 'DEZ'
end;
O que fizemos no SQL acima foi utilizar a função curdate() que retorna a data atual no servidor. 
  • Em "date_format(curdate(), '%d')", formatamos a data atual para recuperar apenas o dia, através do parâmetro '%d'.
  • Em "date_format(curdate(), '%m')", formatamos a data para recuperar apenas o mês. 
O nosso problema é que o formato do mês retornado é numérico e o valor que temos armazenado é texto. Para resolver isso, utilizamos o case para que a partir do mês encontrado ele retorne o valor determinado na condição.
Note que utilizamos trim para eliminar qualquer espaço e upper para deixar o valor referente ao mês em caixa alta.

Exemplo 2

Suponhamos que dependendo do valor que um registro tenha, outros registros da mesma linha precisem ter atribuições diferentes.
Pro exemplo, dependendo do tipo do cliente de uma determinada loja, o valor do adicional aplicado a sua compra será diferente.
Solução:
SELECT c.*,
CASE c.tipo_cliente
WHEN 'MASTER' THEN (i.valor * (10 / 100))
WHEN 'VIP' THEN (i.valor * (25 / 100))
ELSE (i.valor * (35 / 100)) END AS valor_adicional
FROM clientes c, item i
WHERE 1 = 2
Nesse caso, utilizamos o Select Case para retornar o valor que desejamos cobrar a partir do tipo do cliente.
Caso ele seja 'MASTER', o valor adicional será 10% do item comprado; caso ele seja 'VIP', será 25% do valor do item comprado; caso ele não seja nenhum dos dois, o valor cobrado será 35% do valor do item.
Espero que tenham gostado. Até a próxima!
Links:

Cinto de utilidades do DBA

 
Mauro Pichiliani Segunda-feira, 25 de outubro de 2010

Olá, pessoal. Todo administrador de banco de dados (DBA) possui as suas ferramentas prediletas que podem ser utilizadas para salvá-lo em muitas situações. Neste artigo, apresentarei quais são as principais ferramentas que sempre carrego comigo no meu cinto de utilidades quando vou prestar algum serviço de consultoria de banco de dados.

Sou um grande defensor da idéia que para realizar um bom trabalho é preciso contar com as ferramentas e técnicas adequadas. Por isso resolvi escrever este artigo e ajudar aqueles que passam por situação semelhante. Além disso, no meu trabalho como consultor de banco de dados independente, já me deparei com diversas situações e ambientes em que, infelizmente, não há acesso às ferramentas adequadas para a realização do trabalho. Em muitas situações, nem sempre encontro o ambiente ideal com tudo que preciso instalado e configurado.
Devido a esse cenário, que é comum quando se visita vários clientes diferentes com bancos de dados heterogêneos (SQL Server, Oracle, MySQL, PostgreSQL, Informix, etc) em diversas plataformas (Windows, Linux, Mainframe, Mac, etc), ao longo dos anos aprendi a carregar comigo o meu próprio arsenal de ferramentas para onde quer que eu vá.
Da mesma maneira que o Batman possui o seu cinto de utilidades e que um eletricista ou um encanador possui a sua caixa de ferramentas, eu também tenho armazenado comigo as ferramentas que podem salvar o dia e que me auxiliam na realização o meu trabalho. A diferença aqui é que as minhas ferramentas são virtuais e assumem a forma de softwares.
Atenção: não falarei destes tipos de cinto neste artigo. esta é apenas uma analogia
Atenção: não falarei desses tipos de cinto neste artigo. Essa é apenas uma analogia.
Para auxiliar os leitores e quem mais desejar trabalhar na área de banco de dados, eu cito aqui as principais aplicações que sempre levo quando vou a uma consultoria. Geralmente coloco-as em um pen drive ou mesmo as instalo diretamente no meu computador pessoal. Contudo, algumas vezes preciso realizar a instalação de alguma ferramenta no servidor ou em uma estação desktop. De qualquer maneira, optei por ferramentas desktop e não por soluções online hospedadas na nuvem, pois nem sempre tenho a certeza de que vou contar com acesso à internet na consultoria.
Apenas mais um detalhes ante de começar a listar as minhas ferramentas prediletas: algumas delas são de código livre, outras são freewares ou sharewares e, por fim, algumas são de código proprietário. Obviamente, existem diversas alternativas para as ferramentas listadas aqui, e cabe a cada um escolher a ferramenta preferida e que melhor se adequa à necessidade em questão.
  • Documentação oficial do banco de dados
Ninguém guarda na cabeça todos os detalhes dos bancos de dados. Por isso é sempre preciso contar com as documentações oficiais dos mesmos. Sempre levo adocumentação do SQL Server, do Oracle, do MySQL e do PostgreSQL, além de alguma documentação específica de alguma ferramenta que já sei de antemão que vou precisar.
  • Ferramenta para teste de Stress
Todo DBA precisa realizar algum tipo de testes de desempenho do banco de dados em algum momento. Existem várias ferramentas para isso, mas eu sempre levo o JMetercomigo, pois é uma ótima ferramenta para realizar testes de stress em diversos bancos de dados.
Tela do JMeter
  • Ferramenta para Abrir e para editar arquivo XML
Não é raro me deparar com diversos arquivos XML durante consultorias que envolvem bancos de dados. E manipular XML em um editor de texto puro é péssimo. Por isso sempre tenho à mão o iXEdit XML Editor, que possui vários recursos como verificação e validação do XML, auto-complete e outros.
Tela do iXEdit XML Editor
  • Ferramenta para Carregar o banco de dados com dados artificiais
Gerar dados artificiais para preencher o banco de dados é outra tarefa rotineira em consultorias. Existem muitos softwares bons para isso, porém eu recomendo oSpawner Data Generator devido à sua ótima interface, opções e simplicidade.
Tela do Spawner Data Generator
  • Ferramentas para Rede
Já escrevi um artigo para o iMasters recomendando várias Ferramentas de Rede para o DBA. Em particular, nunca saio de casa sem o PortTunnel, o  ConnectionMonitor  e oTCPView 
Tela do TCPView
Tela do ConnectionMonitor
Tela do PortTunnel
  • Ferramentas para comparar bases de dados
Comparar bases de dados faz parte do feijão com arroz no dia a dia do DBA. Essa tarefa pode ser um inferno na terra dependendo das características do banco de dados. Já escrevi um artigo sobre isso aqui no iMasters chamado Comparação de base dados. Para me auxiliar na comparação de bases, geralmente recorro a scripts prontos e, no caso específico do SQL Server, utilizo o SQL Server Compare.
Tela do SQL Server Compare
  • Ferramentas para abrir arquivo de dados CSV grandes e editar scripts
Manipular arquivos texto no formato CSV com muitos dados requer ferramentas prontas para isso. Recomendo o Notepad2, que é leve, permite trabalhar com expressões regulares na busca/substituição e ainda é um excelente editor de scripts/código fonte.
Tela do Notepad2
  • Conversão automática de instruções SQL entre diferentes dialetos
Ambientes que possuem múltiplos bancos de dados são comuns atualmente. E decorar cada detalhe de cada sintaxe de cada banco de dados é impraticável. Por isso recorro a uma ferramenta que me auxilia na conversão automática de instruções SQL entre vários dialetos chamada  SwissSQL Console
Tela do SwissSQL Console
  • Clientes do SSH, VNC e do Terminal Services
Trabalhar em ambientes remotos requer diversas ferramentas clientes. Algumas já são fornecidas pelo próprio sistema operacional (FPT, TELNET, etc) enquanto é preciso levar outras para onde quer que se vá. Recomendo o Putty  para acesso SSH, o Real VNC  para acesso pelo VNC e o cliente do Terminal Services (Remote Desktop Connect)para ambiente Windows.
Tela de conexão do Putty
Tela de conexão do Real VNC
  • Ferramenta de modelagem
Trabalhar com banco de dados geralmente requer acesso ao modelo de dados utilizado. Por isso sempre estou munido de ferramentas como o  DBDesigner  e oMySQL WorkBench ,que permitem a geração automática e a edição dos modelos do banco de dados.
Tela do DBDesigner
Tela do MySQLWorkBench
  • Ferramenta de ETL
Jogar dados pra lá, trazer dados pra cá. A manipulação de dados com importações, exportações e modificações é outra tarefa básica para quem possui o título de DBA. Para me auxiliar nas tarefas de ETL, recorro às ferramentas Kettle (antigo Spoon) e aoTalend Open Studio.
Tela do Kettle (antigo Spoon)
Tela do Talend Open Studio
  • Imagem de SO Trial ou Open Source virtualizado com o Banco de Dados
Nem sempre posso contar com mais de um sistema operacional no meu computador pessoal e, por isso, recorro à virtualização para poder levar comigo diversos sistemas operacionais e bancos de dados instalados e prontos para serem utilizados. Isso é possível através de softwares como o VMWare , o VirtualPC e o VirtualBox. Geralmente já deixo preparadas várias imagens com os principais sistemas operacionais (Linux, Windows, etc) e os principais bancos de dados (SQL Server, Oracle, MySQL e PostgreSQL) prontos, caso haja a necessidade de realização de algum teste. Quando não consigo utilizar software livre, procuro por versões de demonstração (Trial) ou de estudo. Alias, já escrevi dois artigos sobre virtualização de bancos de dados aqui no iMasters:
Melhores práticas na virtualização do SQL Server Parte 2. Contudo, no cenário de consultoria, utilizo as máquinas virtuais apenas como ambiente de teste pré-configurado
  • Compactador
Trabalhar com grandes volumes de dados requer compactação. Por isso sempre tenho ao meu lado um bom compactador, como o WinRar  ou o 7-Zip 
  • Software para boot pelo Pendrive
Em algumas situações é preciso acessar diretamente os dados de um servidor sem passar pelo sistema operacional. Para isso faço um boot direto pelo pen-drive e utilizo o software Active@Boot.
Essas foram as principais ferramentas que levo quando vou para uma consultoria de banco de dados. Obviamente, existem diversas outras ferramentas e alternativas que podem ser utilizadas e, por isso, convido aos leitores a deixarem comentários neste artigo, indicando quais são as suas ferramentas prediletas quando se trabalha com banco de dados.

O modelo de dados do Joomla

 
Mauro Pichiliani Quarta-feira, 10 de novembro de 2010

Olá pessoal. Neste artigo vou apresentar mais uma análise do modelo de dados utilizado em um CMS (Content Management System). Desta vez apresentarei o modelo de dados do Joomla, um dos CMSs mais populares.

Há algum tempo atrás escrevi um artigo sobre o modelo de dados do Wordpress aqui no iMasters. Desta vez vou analisar e comentar o modelo de dados do Joomla, outro CMS que está se tornando muito popular aqui no Brasil não apenas para a construção de blogs, mas também para a criação de web sites inteiros e complexos.
Assim como o Wordpress, o Joomla pode ser utilizado basicamente de duas formas:
  1. Através da contratação e utilização de um hosting especializado que hospedará o site;
  2. Através do download e instalação do Joomla disponível no site oficial do Joomla. Há também uma forte comunidade de usuários brasileiros representados no site oficial do Joomla no Brasil.
A utilização do Joomla através da contratação de um hosting vai depender das configurações que o serviço de hospedagem fornece.
É comum encontrar painéis de controle e outras interfaces que facilitam tanto a administração como a criação de conteúdo. Contudo, nestas situações geralmente o ambiente está montado e não é preciso interagir diretamente com o banco de dados.
Já a segunda forma de utilização envolve o download, instalação e configuração do Joomla. Neste contexto é preciso conhecimento técnico da instalação do Joomla e suas dependências, como o servidor de banco de dados MySQL, o PHP e o servidor Web escolhido.
Este artigo se concentra nos detalhes técnicos envolvidos no banco de dados. O público alvo deste artigo são profissionais que precisam lidar com instalação, configuração e manutenção do Joomla e não para quem apenas o usa para gerenciar conteúdo.
É razoável admitir que a maioria dos usuários não precise conhecer o modelo de dados devido à facilidade do uso de painéis administrativo e outras interfaces que permitem a publicação de conteúdo neste CMS. Porém, administradores, DBAs, desenvolvedores de plug-ins e quem resolve problemas de desempenho ou integração com o Joomla devem conhecer bem seu modelo de dados.
Uma vez que já foram explicadas as duas formas de se utilizar o Joomla vamos ao modelo de dados que este CMS utiliza.
A Figura 1 apresenta o modelo de dados (isto é, as tabelas e seus tipos de dados) utilizados pelo Joomla 1.6 e modelados na ferramenta de código aberta DBDesigner disponível em diversas plataformas.
Figura 1. Modelo de dados do Joomla 1.6 no DBDesigner
Já a Figura 2 apresenta o mesmo modelo de dados da Figura 1, porém modelado utilizando a ferramenta livre de modelagem e administração chamada MySQL Workbench.
Figura 2. Modelo de dados do Joomla 1.6 no MySQL Workbench.
Os modelos da Figura 1 e da Figura 2 não foram produzidos por mim. O crédito vai para Torkil Johnse, que disponibilizou estes modelos gratuitamente no seu blog  nos formatos do MySQL Workbench(MWB), PNG, PDF e SVG.
Nota: as figuras representam um modelo de dados levemente modificado em relação ao modelo original, como o próprio Torkil comenta em seu blog. As principais diferenças são a mudanças de alguns tipos de dados e a colocação de relacionamentos, uma vez que o MySQL com MyISAM não os suporta. Também destaco que o modelo da Figura 2 não apresenta nenhuma informação sobre os índices das tabelas.
Oficialmente não encontrei nenhuma página que contém informações sobre este modelo inclusive com detalhes das tabelas e suas colunas. Mas encontrei uma página apresenta um fraco dicionário de dados sem muitas informações detalhadas a respeito de certas características do modelo como, por exemplo, justificativas a respeito dos tipos de dados. Acesse a página que contém este dicionário de dados simplificado para a versão 1.5.
Assim como o Wordpress, o Joomla não possui um arquivo contendo todos os comandos SQL necessários para a criação do banco de dados, ou seja, é preciso fazer uma chamada a um arquivo .php após as configurações de acesso a banco de dados no painel administrativo.
Antes de começar a análise do modelo é preciso dizer que oficialmente o Joomla só pode ser instalado no MySQL e/ou a extensão MySQLi. Isso quer dizer que se a empresa já possui outro banco de dados, como o PostgreSQL, SQL Server ou Oracle por exemplo, é preciso configurar um ambiente multi-banco, o que possui implicações para quem administra os servidores.
Existem alguns esforços da comunidade para permitir que o Joomla suporte outros bancos de dados, porém estes esforços ainda não foram integrados oficialmente ao projeto. Para mais informações sobre o suporte a outros bancos de dados no Joomla recomendo os seguintes links:
De forma similar ao que acontece no Wordpress, o modelo de dados do Joomla também não contém chaves estrangeiras. O motivo pela ausência de chaves estrangeiras provavelmente é por que ele foi criado utilizando o engine MyISAM do MySQL ao invés do engine InnoDB. Aqui repito o que já havia falado quando analisei o modelo de dados do Wordpress:
O MySQL apresenta a criação de chaves estrangeiras com o engine InnoDB a partir da versão 3.23.43b. O MySQL já está na versão 6, porém há o famoso problema de compatibilidade com as base legada. Provavelmente escolheu-se o MyISAM por facilidade e por motivos de desempenho, o que NÃO quer dizer que um banco de dados com o InnoDB não possa ser ajustado para ter uma desempenho aceitável.
Sem entrar em uma discussão mais profunda, em geral muitas pessoas advogam que o engine MyISAM possui melhor desempenho que o InnoDB, porém este último possui suporte a transações, integridade e outros recursos que o MyISAM não possui.
A falta de chaves estrangeiras quer dizer que o relacionamento entre algumas tabelas não é mantido pelo banco de dados e sim pela aplicação. Isso permite que hajam dados inconsistentes no banco de dados como, por exemplo, um comentário de um blog que não tem nenhum post associado.
Apesar deste cenário ser fictício e ocorrer apenas quando alguém altera os dados diretamente pelo banco de dados e não pela opção de criação de conteúdo, esta possibilidade de inconsistência pode gerar problemas, principalmente quando se fala em migração de dados e segurança.
Existem várias características e pontos do modelo do Joomla que podem ser analisados. O próprio Torkil Johnsen já apresentou diversos aspectos do modelo que ele crê que podem ser melhorados no artigo chamado The Joomla database schema smells.
Os principais pontos que ele destaca são a falta de padronização e problemas de nomenclatura, tipos de dados, normalização e falta de completude do modelo. Concordo com muitos dos pontos levantados pelo Torkil e aqui vou colocar algumas considerações minhas e, quando possível, realizar pequenas comparações com o modelo de dados do Wordpress.
O modelo do Joomla possui mais de 30 tabelas divididas em grupos como publicação de conteúdo, componentes, menus, templates e outros. Essas divisões foram destacadas em retângulos com nomes na Figura 1.
Já o Wordpress é mais enxuto e contém 11 tabelas. Existe uma correlação entre a quantidade de tabelas e colunas de um modelo e a sua complexidade, especialmente em aplicações simples que não estão associadas a toneladas e toneladas de requisitos e casos de uso com diferentes tipos de usuários.
Ou seja, quanto mais tabelas/colunas em um modelo de dados provavelmente ele vai ser mais complexo de ser compreendido, vai dificultar tarefas de importação/exportação e possui e tendência de introduzir complexidade desnecessária.
A principal tabela do modelo do Joomla possui o sufixo _content e é responsável pelo armazenamento de informações sobre o conteúdo (como posts em um blog). Esta tabela concentra muita informação nela mesma e possui quase 30 colunas. Obviamente, nem todas as colunas são preenchidas quando se cria um novo post e muitas destas colunas possuem valores que claramente poderiam ser mais bem aproveitados se estiverem em outra tabela.
Por exemplo, a dupla de colunas publish_up e publish_down, ambas do tipo DATETIME, armazenam a data que o post foi publicado e a data em que ele foi retirado do ar. Porém somente duas datas são armazenadas e não há como armazenar o histórico de mais de uma data de publicação e retirada do post. Esta característica se repete ao longo de diversas outras tabelas do modelo.
Outro ponto que me chamou a atenção foi a falta de tipos de dados booleanos, que armazenam valores 0/1 ou VERDADEIRO/FALSE ou TRUE/FALSE. Em muitas tabelas existem colunas que, aparentemente, poderiam se beneficiar do tipo de dados booleano como, por exemplo, a tabela _contact_details, que contém uma coluna chamadapublished do tipo de dados TINYINT(1).
Além disso, destaca-se também o uso em excesso de colunas com o tipo de dados TEXT, algo que permite o armazenamento de dados limitado apenas pelos recursos do servidor e não por um número fixo de caracteres.
O uso em excesso de colunas do tipo TEXT pode eventualmente se tornar um problema devido à grande quantidade de caracteres armazenados e à necessidade de backups específicos por tabelas. Sem contar que a indexação e pesquisa para este tipo de dados devem ser especiais, algo que não é tratado no Joomla diretamente.
Do ponto de vista de modelagem, em algumas situações o modelo atende a certos requisitos relativamente bem, como é o caso do gerenciamento de usuários, grupos e permissões.
Por outro lado, algumas tabelas deveriam ser implementadas como plug-ins ou extensões e não diretamente no modelo padrão, como é o caso do gerenciamento de avaliação (rating) de um post cujos dados são armazenados na entidade_content_rating.
Outro exemplo de tabelas que seriam mais bem aproveitadas em plug-ins ou extensões está relacionado com a criação de enquetes (polls) cujos dados são armazenados nas tabelas _polls_polls_menu e _polls_data.
Outro aspecto que me chamou à atenção no modelo foram as tabelas responsáveis pelo armazenamento de informações de propaganda (_banner, _bannerclient e _bannerfinish) que provavelmente vieram como resquício do modelo do banco de dados do Mambo, projeto na qual o Joomla se originou.
Atualmente o modelo de patrocínio em sites evoluiu muito em relação aos antigos banners e creio que estas tabelas acabaram ficando no esquecimento devido à funcionalidades e requisitos de campanhas com links patrocinados e integração com programas de afiliados.
Apesar de não ser difícil compreender o modelo uma vez que se acostume a ele, em algumas situações fica estranho não contar com a nomenclatura e termos já tradicionais.
Por exemplo, em nenhuma tabela/coluna existe o termo comentário. No modelo de dados esta forma de interação do usuário com o post é chamada de mensagens. Já a tradicional forma de taxonomia apresentada por tags é representada por seções e categoria em um post. Já template é utilizado estritamente para menus e não faz referência direta à forma de customização do layout do site.
Novamente, assim como no Wordpress, o modelo de dados do Joomla não possui nenhuma outra integridade de domínio ou stored procedure que faça restrição ao que é inserido no banco. Apesar disso não ser obrigatório, esta prática abre margem para problemas como SQL Injection onde um usuário malicioso pode tentar invadir o site por meio de caracteres especiais.
Além disso, a falta desta integridade pode permitir dados que invalidem a aplicação como, por exemplo, colocar o valor -2 na coluna count da tabela _categories. Há também algumas colunas de tabelas onde o valor NULL é permitido, tornando necessária uma checagem adicional na aplicação.
Enquanto alguns podem argumentar que isso é responsabilidade da aplicação não é raro encontrar bancos de dados com este tipo de integridade de domínio implementada, fornecendo assim mais uma camada de segurança e consistência de dados.
Em resumo pode-se dizer que o modelo do Joomla é robusto e atende à sua necessidade, porém é um modelo que carrega muito do projeto Mambo. O destaque vai para o foco de armazenar no banco de dados informações tanto de conteúdo como de usuários, configurações, comentários, avaliações, menus, etc.
Com certeza este modelo pode ser melhorado nos aspectos de nomenclatura, padronização, tipagem, normalização e outros. E esta melhoria é responsabilidade da comunidade de desenvolvedores e usuários do Joomla. Infelizmente, melhorias profundas no banco de dados requerem tempo conforme o projeto vai ficando cada vez mais maduro.
Apesar destas ressalvas, o Joomla é um bom CMS que pode ser utilizada para montar muitos projetos e sites interessantes. Obviamente, ele precisa evoluir e continuar a inovar no aspecto de funcionalidades, customização e usabilidade.
Sugiro aos desenvolvedores e à comunidade que procurem também aprimorar o seu modelo de dados, o que pode trazer inúmeros benefícios à ferramenta tornando-a cada vez melhor.