Criação de campos de Status

Resumo:
Introdução

Campos de "status" são campos que guardam a situação de determinada entidade em determinado contexto. Eles são muito comuns em modelagens de bancos de dados e estruturas de dados em geral para ajudar a arquitetar soluções e processos computacionais. Embora pareça algo muito simples, existem alguns problemas e observações que podem ser feitas sobre o assunto. Neste artigo vamos ver sobre elas.

Full text search com Sphinx

Resumo:
Introdução
logo do sphinx search

Full text é um recurso conhecido pelos entusiastas de bancos de dados. Ele permite a realização de queries de busca de registros em campos de texto com mais flexibilidade que uma busca envolvendo os operadores convencionais como o =, <>, LIKE, NOT LIKE, etc. Vários bancos de dados relacionais dão suporte a este recurso, por exemplo, o MySQL, PostgreSQL, Oracle, até o SQLite possui módulos que suportam Full Text.

Porém, também existem bancos de dados especialistas em buscas Full Text. Neste artigo, vou mostrar o Sphinx, que é um banco de dados Open Source, gratuito, muito prático e que tem evoluído rapidamente. Veremos as vantagens/desvantagens e quando é útil utilizar este tipo de banco.

Declarando tipos numéricos no MySQL

Resumo:
golfinho, que é o animal símbolo do MySQL
Introdução

MySQL é um SGBD muito popular, mas muito robusto. Por ser robusto e cheio de recursos, a documentação do MySQL não poderia ser diferente: também é muito extensa. Talvez seja por este motivo que nem sempre ela é devidamente estudada e, com isso, nota-se que muita gente acaba utilizando os recursos disponíveis de forma incorreta, seja por desconhecimento ou descuido.

Neste artigo, veremos sobre um destes enganos comuns de utilização do MySQL: a má especificação dos tipos numéricos nas colunas de tabelas MySQL.

Ordenação Especial de Registros do BD

Resumo:
Introdução

Todos que trabalham com Bancos de Dados sabem que o comando SELECT permite que os resultados obtidos sejam ordenados de acordo com algum critério. Porém, a utilização mais comum do ORDER BY é com uma coluna do BD, e normalmente é especificada uma ordem crescente ou decrescente (ASC ou DESC).

Porém, em algumas situações, não queremos usar simplesmente uma ordem crescente ou decrescente. Por exemplo, se temos uma tabela com uma coluna "status" e queremos mostrar primeiro os registros com status "5", e depois mostrar o resto. Neste caso, precisamos de um recurso especial para ordenação.

Problemas com Charset? Nunca mais

Resumo:
Hommer assustado com um caractere exibido incorretamente
Introdução

Vira e mexe existe alguém aparecendo com problemas com apresentação de caracteres por conta de codificação de caracteres errada. Já escrevi sobre Unicode, Códigos e Símbolos Unicode e sobre HTML entities. Mas neste artigo, veremos como utilizar UTF-8 em tudo e nunca mais ver caracteres sendo exibidos errado.

Obtendo dados de tabelas, colunas e relacionamentos no PostgreSQL

Resumo:
Elefante
Introdução

No post anterior, vimos como consultar informações sobre tabelas, colunas e relacionamentos em bancos de dados MySQL. Neste post serão apresentados os recursos correspondentes no banco de dados PostgreSQL.

Diferente do MySQL, o PostgreSQL não possui um banco de dados reservado chamado information_schema. Ao invés disso, possui algumas tabelas reservadas prefixadas por "pg_".

Obtendo dados de tabelas, colunas e relacionamentos no MySQL

Resumo:
Golfinho
Introdução

Ao desenvolver um framework ou um sistema que possui uma "porta dos fundos" para o BD, onde é possível acessar a base de dados diretamente através de uma interface genérica, podemos precisar obter informações sobre as tabelas, colunas, relacionamentos, etc. No MySQL, estas informações ficam em um banco reservado chamado information_schema, que possui diversas VIEWS para consulta de dados.

Este artigo apresenta algumas SQLs úteis para se obter informações a respeito de tabelas, colunas, índices, chaves e relacionamentos entre tabelas, no SGBD MySQL.

Gravando arquivos em BD usando PDO do PHP

Resumo:
escrevendo no HD
Introdução

Existem duas formas mais convencionais de se armazenar arquivos em sistemas de informação: gravando em um diretório reservado ou gravando no banco de dados. Gravando em um diretório, existem alguns riscos como o arquivo poder ser acessado por usuários do servidor, ou o arquivo ser acessado por qualquer pessoa da Web se ficar em um diretório visível na Web. Guardando o arquivo em BD, existe o inconveniente do BD poder ficar com um tamanho muito grande, embora ofereça uma segurança adicional. Neste artigo veremos como gravar e recuperar arquivos do BD usando PDO. Para mais detalhes sobre PDO, leia antes o artigo PDO.

Transformação de Dados

Resumo:

Ao desenvolver uma grande aplicação ou um framework Web, é preciso ter consciência de que precisará trabalhar com camadas e que fará várias conversões entre estas camadas para manter o sistema portável. Vamos observar a imagem abaixo:

Conversão de dados entre camadas do sistema

Apesar de ser possível utilizar a mesma notação para representar números reais no formulário, na aplicação e no BD, pode ser que o usuário esteja em uma localidade que usa uma notação diferente da americana (usada no PHP), e pode ser que o BD não utilize a mesma notação que a aplicação para todos tipos de dados. Portanto, é importante realizar a transformação de dados entre as camadas do sistema.

Otimização de consultas SQL usando LIMIT

Resumo:
performance

É muito comum realizar consultas no Banco de Dados que esperam receber no máximo uma linha de resultado. Por exemplo, durante a autenticação de um usuário (log-in), para recuperar o registro do BD e comparar a senha com aquela informada no formulário.

Nestes casos, pode ser útil incluir a cláusula "LIMIT", implementada por diferentes SGBDs (por exemplo, MySQL e PostgreSQL).

Isolamento de Transações no BD

Resumo:
Introdução

Transações em Bancos de Dados permitem encapsular um conjunto de instruções que devem ocorrer para garantir as propriedades ACID (Atomicidade, Consistência, Isolamento e Durabilidade).

A SQL-92 expõe 3 fenômenos que podem ocorrer durante a execução de blocos de consultas concorrentes (em paralelo). Para cada fenômeno, existe um tipo de isolamento de transação que é capaz de solucioná-lo. Mas observe que "solucionar", neste caso, não significa que todas as consultas das transações irão ocorrer. Significa que o bloco de instruções será executado por completo, ou será abortado automaticamente, através de um rollback implícito.

Abrir Arquivos CSV com PHP

Resumo:
Introdução

CSV (Comma-Separated Values) é um formato de arquivo texto para armazenamento de dados de forma bastante simples, e agrupada na forma de tabela (planilha). Ele pode ser gerado com qualquer editor de texto puro (TXT), bastando seguir as regras de sintaxe (definidas em RFC 4180).

Este formato é bastante útil para exportação e importação de dados entre sistemas. Você pode, por exemplo, pedir para uma tabela do MySQL ser exportada para CSV e, então, ser importada pelo seu sistema que utiliza outro banco de dados.

Cuidados com o Modelo Entidade-Relacionamento

Resumo:

Modelo Entidade-Relacionamento é a conhecida modelagem da base de dados com suas entidades, atributos e relacionamentos.

A princípio, parece um modelo bastante simples de se fazer quando nos concentramos na realidade. Ou seja, se os atributos de cada entidade e os relacionamentos das entidades são realmente condizentes com a realidade em qualquer circunstância. É importante se preocupar com os nomes dados às entidades e os pontos onde elas podem ser quebradas para evitar a duplicação de dados.

Existe, porém, um detalhe que observei recentemente: parece existir uma tendência natural do modelador ligar algumas entidades às entidades que representam pessoas ao invés de ligá-las onde realmente preservaria a integridade referencial.

Entendendo o Unicode e UTF-8

Resumo:

Se você trabalha com programação Web, provavelmente já utilizou a codificação de caracteres Latinos (ISO-8859-1) e conhece ou já deve ter ouvido falar de Unicode. Este artigo mostra o que é Unicode, quais os benefícios e como trabalhar com ela.

Conhecendo o PDO do PHP

Resumo:

O que é PDO?

PDO (PHP Data Objects) é um módulo de PHP montado sob o paradigma Orientado a Objetos e cujo objetivo é prover uma padronização da forma com que PHP se comunica com um banco de dados relacional. Este módulo surgiu a partir da versão 5 de PHP. PDO, portanto, é uma interface que define um conjunto de classes e a assinatura dos métodos de comunicação com uma base de dados.

Cada sistema gerenciador de bancos de dados (SGBD) pode prover um driver para PDO. Apesar de PDO definir a assinatura dos métodos que cada driver deve implementar, alguns recursos podem não ser suportados. Logo, a chamada a um método pode ser "inútil" dependendo do driver utilizado ou da versão/modelo do servidor de Banco de Dados. Por exemplo, algumas engines do SGBD MySQL não dão suporte a transações, logo, o método "beginTransaction" (responsável por iniciar uma transação) simplesmente não terá efeito sob tais condições.

Data Warehouse

Resumo:

Data Warehouse é um sistema de computação que guarda dados de uma organização. Os dados vão desde nomes de departamentos/setores, até os dados referentes às atividades da organização, ou seja, dados referentes ao nível operacional. Por exemplo, em um sistema para uma universidade, o sistema data warehouse provê, dentre outras coisas, informações sobre as aulas (notas, rendimento dos alunos, participação dos docentes, etc.), ou seja, o nível mais operacional da universidade.

ORM (como pode ser feito)

Resumo:

Ontem escrevi sobre ORM, mas apenas apresentei o conceito. Hoje vamos ver o que se espera de uma camada ORM e algumas dicas de como implementá-la.

Uma das coisas que se espera de uma camada ORM é que ela não gere retrabalho. Um tipo de retrabalho comum em aplicações tradicionais é: criar a estrutura do banco de dados e, depois, precisar criar classes que referenciam as tabelas. Como foi apresentado ontem, existe muita semelhança entre a estrutura do BD e as classes que utilizam o conceito de ORM (chamo estas classes de "classes entidades" ou, simplesmente, "entidades", por se tratarem de classes com características especiais).

Já que os atributos da classe serão semelhantes às colunas da tabela, pra que especificá-las duas vezes? E se precisar mudar em um lugar, ter que mudar no outro. A solução é que sua camada ORM seja capaz de realizar a chamada "reflexão" em um dos lados e aplicar as regras do outro (vou explicar).

Object Relational Mapping

Resumo:

Bom, para meu primeiro post efetivo sobre tecnologia, resolvi escrever sobre algo bastante alto nível e, de repente, pouco conhecido entre programadores PHP: ORM. Pretendo, inicialmente, mostrar o conceito e, em posts futuros, talvez aprofundar em mais detalhes.