quarta-feira, 4 de agosto de 2010

Tipos de Dados do Informix

CHAR vs. VARCHAR

  • CHAR(32)
    • Use se o conteúdo da coluna for imprevisível
    • Espaço necessário = comprimento
  • VARCHAR(150,20)
    • Use se a maioria das linhas usa uma quantidade pequena de espaço e o tamanho máximo da coluna é exceção.
    • Espaço necessário = comprimento + 1

Os tipos de dados character armazenam qualquer combinação de letras, números e símbolos. Tabulações e espaços podem ser incluídos. Nenhum outro character no-printable é permitido.

  • CHAR
    As colunas do tipo CHAR tem comprimento fixo. O comprimento máximo de uma coluna CHAR é de 32.767 bytes. Se uma coluna é definida com tamanho de 400 bytes, os dados nesta coluna ocuparão este espaço, mesmo que sejam inferiores a 400 bytes. Números também podem ser armazenados em uma coluna CHAR. Quando são armazenados assim, não poderão ser utilizados em algumas operações aritméticas. A ordenação de números seguirá a seqüencia do código ASCII, e quando armazenados em colunas numéricas são ordenados pela seqüencia binária. Números destinados a cálculos aritméticos devem ser armazenados em colunas numéricas.

 

  • VARCHAR
    Colunas VARCHAR armazena dados do tipo character com comprimento variável. Estas colunas podem armazenar dados de 0 a 255 bytes. Além do conteúdo da coluna, indicador de um byte é armazenado no inicio da coluna.
    O beneficio principal no uso de tipo de dados VARCHAR é que, quando usado corretamente, pode aumentar o número de linhas armazenadas por paginas em disco. VARCHAR é utilizado mais efetivamente quando a maioria das linhas precisa de pequena quantidade de espaço em disco, e algumas linhas requerem significativamente mais espaço. Por exemplo, uma coluna de comentário pode não ser usada em 80% das linhas de uma tabela. Porém, quando é preenchida, o tamanho máximo da coluna é frequentemente consumido.
    Como mais linhas podem ser armazenadas em uma página, campos VARCHAR podem aumentar a performance em leituras seqüenciais de tabelas e pode reduzir o desperdício de espaço em disco quando comparado com os mesmos dados armazenados em campos do tipo CHAR.
    Quando especificamos dados do tipo VARCHAR, um comprimento máximo de coluna é incluído na sintaxe da definição da coluna. O parâmetro de max-size fixa o limite máximo no comprimento dos caracteres permitido dentro do campo. O min-size fixa o comprimento mínimo de espaço em disco que sempre será reservado para dos dentro do campo. Quando uma linha é gravada, o Informix grava o numero de bytes necessários para armazenar o dado ou o número de bytes especificado em min-size para a coluna (o que for maior). Se depois a coluna crescer para um tamanho maior que o espaço disponível na linha, a linha deve ser movida para outro lugar na página, ou parte da linha deve ser movida para outra pagina. Você pode ver por que é importante especificar um min-size médio apurado quando a tabela é criada.

 

  • NCHAR
    NCHAR armazena qualquer string nativa de letras, números e símbolos. O tipo NCHAR é reconhecido somente quando o Native Language Support (NLS) estiver ativo através da variável de ambiente DBNLS. Quando o NLS estiver ativo, coluna CHAR serão tratadas como NCHAR. Consulte o IBM Informix Guide to SQL para informações adicionais.

 

  • NVARCHAR
    O tipo de dado NVARCHAR armazena qualquer seqüencia nativa de letras, números e símbolos variando o tamanho para um máximo de 255 bytes. O NVARCHAR é reconhecido somente quando o NLS está ativo ajustando a variável de ambiente DBNLS.

 

  • LVARCHAR
    A partir da versão 9.4 colunas de tabelas com o tipo de dado LVARCHAR podem chegar ao tamanho de 32,739 bytes, aumentando a capacidade de armazenamento do servidor.

 

Tipo de Dado Numérico

  • INTEGER
    Números entre –2.147.483.647 a +2.147.483.647, ocupa 4 bytes
  • SMALLINT
    Números entre –32.767 a +32.767, ocupa 2 bytes
  • FLOAT
    Números com ponto flutuante, precisão dupla, ocupa 8 bytes
  • SMALLFLOAT
    Número com ponto flutuante, precisão simples, ocupa 4 bytes
  • DECIMAL / MONEY
    Designação de precisão e escala até 32 dígitos significativos
    se a escala é impar, ocupa (precisão + 4) /2
    se a escala é par, ocupa (precisão + 3) /2

Os cinco tipos de dados numéricos são discutidos abaixo:

  • INTEGER – engloba números de –2.147.483.647 até +2.147.483.647. Um Integer ocupa 4  bytes de espaço em disco.
  • SMALLINT – engloba números de –32.767 até +32.767. Um Smallint ocupa 2 bytes de espaço em disco. Os 2 bytes economizados não é tão significante em tabelas pequenas, mas pode fazer uma diferença substancial em grandes tabelas. Você sempre pode converter um Smallint para um Integer sem perda de dados.
  • FLOAT – armazena números binários com ponto flutuante com até 16 dígitos (dupla precisão). O Float corresponde ao tipo double em C. Uma coluna do tipo de dado Float geralmente armazena números científicos que só pode ser calculado com valores aproximados. O Float ocupa 8 bytes de espaço em disco.
  • SMALLFLOAT – armazena números binários com ponto flutuante com até 8 dígitos (precisão simples). Um Smallfloat corresponde ao tipo float em C. Ele também armazena números que só podem ser calculados com valores aproximados. Um  Smallfloat utiliza 4 bytes de espaço em disco.
    Pelo fato dos números com ponto flutuante reterem somente seus dígitos mais significativos, o numero que você digita neste tipo de coluna e o numero que é armazenado no seu banco de dados podem diferir ligeiramente, dependendo de como seu computador armazena números de ponto flutuante internamente. Esta diferença ocorre quando um valor tiver mais dígitos que o número de ponto flutuante pode armazenar. O valor é armazenado em sua forma aproximada com os dígitos menos significativos tratados como zeros.
  • DECIMAL/MONEY – armazena números com o numero de dígitos especificado pelo usuário. Você pode especificar até 32 dígitos significativos. A faixa de números que você pode armazenar é de 10^-130 até 10^124. Note, contudo, que só 32 dígitos são significativos.

    O numero DECIMAL pode ser formatado com uma determinada precisão (precision) e escala (scale).
    • Precisão é o numero total de dígitos.
    • Escala é o numero de dígitos à direita do ponto decimal.
    Uma Coluna DECIMAL com uma definição (5,2) armazena um número de cinco dígitos com três dígitos antes do ponto decimal e dois dígitos apos o ponto decimal.
    O numero de bytes que são necessários para armazenar um valor DECIMAL pode ser calculado com as seguintes fórmulas:

    se a escala é impar -- N=(precisão+4)/2

    se a escala é par – N=(precisão+3)/2

    A precisão e escala default para DECIMAL é (16,0).

    O tipo de dado MONEY é sempre tratado como um numero decimal. A precisão e escala default para MONEY é (16,2).
    O formato de exibição para o tipo de dado MONEY pode ser alterado com a variável de ambiente DBMONEY.

FLOAT ou DECIMAL?

As vantagens do uso de dados DECIMAL ao invés de dados FLOAT são:

  • O DECIMAL permite maior precisão (32) sobre o FLOAT (8 ou 16).
  • Os Valores decimais são arredondados ao invés de serem truncados.
  • A precisão disponível do FLOAT pode diferir de uma máquina para  a outra, os quais podem ter algumas ramificações ao transferir dados por uma rede.

SERIAL

Colunas do tipo SERIAL contem números que são associados a cada linha da tabela em ordem seqüencial pelo sistema. Eles são armazenados como INTEGERS. Quando uma nova linha é inserida, a coluna serial é associada ao próximo numero na seqüencia. O numero inicial default é 1 (um), e o maior numero serial que pode ser associado é superior de 2.1 bilhões.

O tipo SERIAL associa valores em ordem seqüencial, mas não assegura a unicidade automaticamente. O próprio servidor de banco de dados não nomeará  um valor automaticamente. O próprio servidor de banco de dados não nomeará um valor duplicado para uma coluna serial, mas uma aplicação pode potencialmente inserir uma linha com um valor SERIAL duplicado. Para assegurar que valores únicos existem um uma coluna serial, crie a coluna com uma constraint do tipo UNIQUE, um índice único, ou uma constraint primary key.

Quando usar o SERIAL

Colunas do tipo SERIAL criam excelentes chaves primarias por causa de seu tamanho pequeno e potencial de unicidade. Só uma coluna SERIAL pode ser especificada em uma tabela.

Numero inicial.
Se o numero inicial for 100, a primeira linha a ser inserida será associada com o valor 100.

Quando uma ou mais linhas são excluídas, os dados são removidos, mas os valores seriais continuarão aumentando. Isto é, quando uma nova linha é acrescentada, ela será associada com o próximo numero da seqüencia. O numero SERIAL não pode ser reutilizado sem uma programação especial.

O tipo de dado SERIAL pode ser usado para armazenar números de identificação como numero de cliente e numero de pedido. Uma coluna SERIAL ocupa 4 bytes.

DATE, DATETIME e INTERVAL

  • DATE – O tipo de dado DATE é um INTEGER que representa o numero de dias desde 31 de dezembro de 1899. 1º de janeiro de 1990 é o dia 1. O tipo de dado DATE ocupa 4 bytes de espaço em disco.
    Uma coluna DATE é especificada em programas, formulários e SQL no seguinte formato padrão: mm/dd/yyyy
    • mm é o mês (1-12)
    • dd é o dia do mês (1-31)
    • yyyy é o ano (0001-9999)

      Você pode mudar o formato padrão através da variável de ambiente DBDATE.
  • DATETIME – DATETIME é uma evolução em cima do tipo DATE, onde um ponto no tempo é selecionável, isto é, podem ser definidos dados que armazenem pontos do tempo com granularidade de um ano até uma fração de segundo.

    A faixa de valores para cada campo DATATIME é:

    ANO  (D.C) 1 até 9999
    MES 1 a 12
    DIA 1 até 28,29,30 ou 31
    HORA 0 (meia-noite) até 23
    MINUTO 0 a 59
    SEGUNDO 0 a 59
    FRACTION(n) onde n são 1-5 dígitos significantes (default 3)
  • INTERVAL – é usado para armazenar valores que representam uma fatia de tempo. Um tipo de dados INTERVAL pode expressar fatias de tempo tão grandes quanto 9,999 anos e 11 meses, ou tão pequenos quanto uma fração de segundo.
    Tipo de dados INTERVAL não podem contar meses e dias. Isto é devido ao fato de o numero de dias por mês ser variável: Maio tem 31 dias, enquanto Setembro tem 30. O numero de dias em um mês também ode variar com o ano: ano bissexto.
    Por causa desta necessidades peculiares em calendários, ANSI divide o tipo INTERVAL em duas classes: intervalo de ano-mês e intervalo de dia-hora.

    Classes de intervalo de Ano-Mês são:
    - Anos (YEARS)
    - Meses (MONTHS)

    Classes de intervalo Dia-Hora são:
    - Dias (DAYS)
    - Horas (HOURS)
    - Minutos (MINUTES)
    - Segundos (SECONDS)
    - Frações de Segundos (FRACTIONS)

    Calcule o espaço ocupado por tipo de dados DATETIME e INTERVAL com o seguinte:

    Numero total de dígitos de todos os campos / 2 +1

DBCENTURY

A partir da versão 7.2 do Informix a variável de ambiente DBCENTURY permite a seleção do século apropriado para DATE e DATETIME com  dois dígitos no ano.

Valores aceitáveis para DBCENTURY são: P, F, C ou R.

P Passado. O ano é ampliado com ambos os séculos: atual e passado. A data mais próxima anterior da data de hoje é escolhida.
F Futuro. O ano é ampliado com ambos os séculos: atual e futuro. A data mais próxima após a data de hoje é escolhida.
C Closest. (o mais próximo) São usados o séculos: passado, presente e próximos séculos para ampliar o valor do ano. A data mais próxima à data de hoje é usada.
R Presente. O século atual é usado para ampliar o valor do ano.

O valor default da variável DBCENTURY é R.

Quando o valor de DBCENTURY é configurado como P ou F e a data de hoje é digitada, o século será o passado ou futuro respectivamente. O século atual será usado quando a palavra chave TODAY substituir a data de hoje, desde que TODAY use ano de 4 dígitos.

BINARY LARGE OBJECT – BLOB

Binary Large Objects, BLOBs, são streams de bytes de valor e tamanho arbitrários. Um BLOB pode ser uma imagem digitalizada ou som, ou um contrato legal. Um BLOB pode ser qualquer conjunto arbitrário de bytes para qualquer propósito.
Qualquer coisa que você pode armazenar no sistema de arquivo do computador você pode armazenar em um BLOB.
Informix permite que um BLOB seja armazenado com uma coluna dentro de um banco de dados. O limite teórico de seu tamanho é superior a 2.1 Bilhões de bytes. Este tamanho está baseado no maior valor que pode ser mantido em um inteiro de 4 bytes. 56 bytes de espaço são reservados na linha para informações gerais do BLOB. o BLOB em si armazenado em páginas separadas do resto da linha.

TEXT vs. BYTE

Existem dois tipos de BLOB:

  • TEXT – Um objeto de dados tipo TEXT é restrito para uma combinação de texto ASCII printable e caracteres de controle Ctrl-i, Ctrl-j e Ctrl-l. Exemplos de dados que podem ser armazenados em uma coluna TEXT:
    • Notas de texto
    • Especificações de engenharia
    • Arquivos de código fonte de programa
  • BYTE – O tipo BYTE pode armazenar qualquer tipo de dado binário como:
    • Planilhas eletrônicas
    • Módulos de programas
    • Imagens digitalizadas, por exemplo: fotografias e desenhos.
    • Arquivos de voz.

O tipo BYTE é um stream não identificado. O Informix só sabe o tamanho e a localização de um BLOB. Outros programas pode ser chamados para mostras a informação de um BLOB.

CLOB – Armazena texto de objetos grandes em um formato que suporte acesso randômico (mais inteligente do que o BLOB).

Nenhum comentário:

Postar um comentário