O exemplo nos permite perceber características que conferem à base de dados uma boa e desejável organização:
1. Linhas contêm dados relacionados aos produtos (instâncias ou itens de dados); 2. Colunas contêm os principais atributos dos produtos que se deseja armazenar; 3. Na mesma coluna, só estão presentes dados relacionados ao mesmo atributo, sem exceção!
Produto Fabricante Qtd. Med. Preço Supermercado Data
Produto Fabricante Qtd. Med. Preço Supermercado Data
Suco ValeSuco 1 l 3,00 Arpoador 12/05/2011
Suco Flash 1 l 4,50 Arpoador 12/05/2011
Tomate - 1 kg 3,50 Noite 14/05/2011
Arroz Tio José 5 kg 8,64 Noite 14/05/2011
Arroz Sem Broto 5 kg 9,99 Arpoador 12/05/2011
Arroz Da TV 1 kg 1,99 Noite 14/05/2011
Feijão Sem Broto 1 kg 4,00 Arpoador 12/05/2011
Tomate - 1 kg 2,99 Noite 14/05/2011
Ovo A Granja 12 u 3,19 Arpoador 12/05/2011
Ovo Caseiro 6 u 1,45 Noite 14/05/2011
Suco Flash 1 l 3,99 Noite 12/05/2011
4. Na mesma linha, só estão presentes dados relacionados ao mesmo item de supermercado, sem exceção!
5. Cada atributo de uma linha contém um único valor ao invés de poder conter uma coleção de valores (atributo monovalorado);
6. A base de dados pode crescer em seu número de linhas indefinidamente; 7. Para cada produto pesquisado, o usuário da base de dados tem consigo uma referência de quais informações são relevantes e devem ser armazenadas na base, minimizando problemas de coleta de dados.
4.3.1 tipos de dados e domínios
Toda base de dados deve reservar uma especial atenção para a escolha dos tipos dos valores armazenados (tipos de dados). A escolha correta dos tipos de dados permite elevar o nível de qualidade da base, na medida em que torna viável controlar possíveis erros de cadastramento de valores. Esse controle busca prevenir inconsistências, tais como o armazenamento de letras em locais destinados exclusivamente a valores numéricos ou datas escritas de forma incorreta.
Apesar de não ter uma rígida exigência sobre o tipo dos dados que armazena, ainda assim a planilha fornece ferramentas para especificação de tipos de dados simples. Entre os mais comuns, podemos destacar:
• Número: Representa valores numéricos de forma geral. Em muitos aplicativos, é possível configurar seus parâmetros a fim de restringir os valores a conjuntos mais específicos, como números inteiros ou fracionários. Ex.: -12,3; 4; +345, 1234... • Texto: Representa cadeias de caracteres (sequências contínuas de caracteres). Normalmente apresentadas entre aspas duplas (“”), as cadeias de caracteres permitem representar informações textuais dentro da base de dados. Ex.: “Joaquim José da Silva Xavier”, “Avenida dos Estados, 5001”, “7 de setembro” ... • Moeda: Uma variação do tipo que representa valores numéricos, na qual existe uma parte inteira e uma fracionária com, no máximo, dois dígitos decimais. É bastante útil para trabalhar com operações financeiras. Ex.: -12,34; 56,99; 0,00... • Data: Representação de uma data no calendário Gregoriano (adotado como referência em muitos países do Ocidente, inclusive o Brasil), com informações sobre dia, mês e ano. Apesar de padronizada em termos de medida de tempo, datas não apresentam padrão de formato, possuindo muitas formas de apre- sentação em diferentes países. Normalmente, o software usado para construir a base de dados possui flexibilidade na escolha desses formatos. No Brasil, é comum representar datas no formato DD/MM/AAAA, com dois dígitos para o dia (DD), dois dígitos para o mês (MM) e quatro dígitos para o ano (AAAA). Ex.: 12/12/2012; 29/02/2000...
• Hora: Representa a divisão de tempo no período de 1 (um) dia. Normalmente, adota-se o formato hh:mm:ss, com dois dígitos para horas (hh), dois para minutos (mm) e dois para segundos (ss). Muitas ferramentas também oferecem alguma
flexibilidade adicional, considerando milissegundos, e indicação de intervalos de 12h ou 24h. Ex.: 12:45:00; 00:00:01...
• Lógico: Representa os valores lógicos VERDADEIRO e FALSO, os únicos valores válidos para esse tipo. Muito usado quando se deseja projetar alguma operação condicional sobre os dados.
Os tipos de dados básicos impõem um controle inicial sobre o comportamento dos valores na base de dados, auxiliando na garantia de sua qualidade. No exemplo da lista de supermercado, a correta indicação dos tipos de dados poderia prevenir a inclusão de valores não-numéricos para o atributo Qtd. (claramente numérica por sua definição), ou valores inválidos de datas (fora de formato ou inexistentes) para o atributo Data.
Além do tipo de dados, normalmente é possível personalizar regras ainda mais rígidas sobre o comportamento dos valores da base. Essas regras são representadas pela definição de um domínio. O domínio é o conjunto de valores considerados válidos para um determinado atributo da tabela. Vamos usar novamente o exemplo e indicar os domínios dos atributos Qtd., Med. e Preço.
Para o atributo Qtd., construímos o seguinte domínio:
dom(Qtd.)={x ∈ℤ e x > 0}
Pela definição, só são considerados válidos para o atributo Qtd. valores inteiros po- sitivos. Perceba que a garantia de que a coluna armazenará valores inteiros já é dada pelo tipo de dados, mas o domínio restringe um pouco mais a regra, exigindo que, além de inteiros, sejam positivos. No exemplo, a definição desse domínio procede, uma vez que no contexto da lista de supermercado, não parece razoável que um produto tenha quantidades negativas ou nulas.
Para o atributo Med.:
dom(Med.) = {kg, l, g, u, p}
O atributo Med. possui somente cinco valores válidos: kg (quilograma), l (litro), g (grama),
u (unidade) e p (pacote). O objetivo desse atributo é indicar a unidade de medida re-
ferência do produto pesquisado. Note que, apesar de configurado como uma coluna de texto, só serão considerados válidos esses valores, de modo que qualquer outra medida será inválida. Este exemplo é particularmente interessante porque permite ilustrar uma forte relação entre diferentes atributos da tabela. As colunas Qtd., Med. e
Preço devem ser usadas juntas para representar o valor de um produto (empacotado
em uma embalagem padronizada por alguma unidade de medida). Um valor errado que for cadastrado em Med. torna inviável calcular a relação de preço obtida por Qtd. e Preço e provavelmente inutilizará a linha inteira para futuras consultas, justificando mais ainda o zelo pela qualidade dos dados.
Quanto ao Preço:
dom(Preço) = {x ∈ Preço: x ∈ ℝ e x ≥ 0}
O atributo Preço reconhece somente valores reais maiores ou iguais a zero (ou valores não-negativos). Os possíveis valores do tipo de dado Moeda podem ser vistos como subconjuntos de números reais, sempre representados com duas casas decimais.
Embora valores negativos possam ser válidos em algumas aplicações (como planilhas contábeis, por exemplo), não é esperado que apareçam preços negativos em um supermercado.
Como vimos, a definição de tipos e domínios presta um importante serviço para a manutenção da qualidade e confiabilidade dos dados contidos em uma base de dados. Tipos de dados e domínios são conceitos correlatos e atuam de forma complementar. De alguma maneira, o tipo de dados define um domínio inicial, que pode ser refinado de acordo com a contextualização da informação que será guardada.
Nem sempre é vantajoso criar domínios. Analisemos, por exemplo, a coluna Produto. Claramente, parece um exagero aceitar qualquer possibilidade de texto para descrever um produto do supermercado. Por outro lado, também não é trivial catalogar todas as possibilidades possíveis de produtos em um supermercado que poderiam entrar nessa lista. Nessa situação, cabe ao responsável pela base analisar as vantagens e desvantagens envolvidas na definição dos domínios. Para algumas situações, apesar de mais abrangente, pode ser mais adequado aceitar qualquer possibilidade de construção de texto do que restringi-las a um conjunto grande de dados e de difícil manutenção.