Bando de Dados Web Tipos de dados 4º TSI Jonathan de Matos
A escolha dos tipos de dados Tipo de dado é o conjunto de valores e operações (domínio) que um determinado atributo ou variável pode armazenar. No PostgreSQL existem diversos tipos de dados para o armazenamento e gerenciamento de informações. A escolha adequada do tipo de dado, de acordo com a informação a ser armazenada, gera uma otimização de recursos e aumento no desempenho do SGBD.
Tipos de dados no Postgres Os tipos de dados suportados pelo PostgreSQL são divididos nas seguintes categorias: Numéricos Monetários (obsoleto) Strings (caracteres e textos) Datas e horas Binários/Booleanos Rede Geométicos
Numéricos: SMALLINT ou INT2 Armazena valores numéricos inteiros pequenos. Armazenamento: 2 bytes Intervalo: -32768 a +32767 Quantidade de produtos em estoque, idade, número de filhos etc. 300 300 50000 Erro: o valor passa do domínio
Numéricos: INTEGER / INT / INT4 Armazena valores numéricos inteiros de tamanho normal. Armazenamento: 4 bytes Intervalo: -2147483648 a +2147483647 Com o tipo de dado INTEGER é possível armazenar valores próximos de 2 bilhões (positivos ou negativos) 123456789 123456789 12345678900 Erro: o valor passa do domínio
Numéricos: BIGINT / INT8 Armazena valores inteiros de tamanho gigantesco. Armazenamento: 8 bytes Intervalo: Aproximadamente 18 casas decimais. É importante destacar que quanto maior o intervalo de valores que o tipo de dado utiliza, maior é o espaço em disco que o mesmo ocupa. 123456789 123456789 12345678900 12345678900
Numéricos: REAL / FLOAT4 Armazena valores numéricos com casa decimal (ponto flutuante) de precisão simples. Armazenamento: 4 bytes Intervalo: 6 casas decimais. Esse tipo de dado deve ser atualmente utilizado para armazenar valores monetários, geralmente com duas casas decimais. 10020 10020 10020.60 10020.6
Numéricos: NUMERIC(p,s) / DECIMAL(p,s) Armazena números exatos, com precisão definida pelo usuário. Armazenamento: 8 bytes + (2 * (s/4)) Intervalo: limitado a 1000 digitos. O parâmetro p indica o número total de dígitos que o campo poderá conter e s indica o número de dígitos após o ponto decimal. 12.3456 12.35 (Se criado numeric(6,2)) 1234 1234.00 (Se criado numeric(6,2))
Numéricos: SERIAL / SERIAL4 Não são tipos verdadeiros, mas sim uma notação para definir colunas identificadoras únicas (auto-incremento), criando implicitamente uma sequência (sequence). Armazenamento: 4 bytes Intervalo: 1 a 2147483647 (próximo de 2 bilhões) Deve-se tomar cuidado ao querer informar o valor deste campo manualmente para um registro, pois pode ser que o PostgreSQL alcance posteriormente o valor informado.
Numéricos: BIGSERIAL / SERIAL8 Possui as mesmas características do SERIAL, com a vantagem de possuir um limite numérico extremamente maior. Armazenamento: 8 bytes Intervalo: 1 a 9,2E+19 (9223372036854775807) Este tipo de dado utiliza o dobro de espaço de armazenamento em relação ao SERIAL, devendo ser utilizado somente se houver a expectativa de possuir mais de 2 bilhões de registros na tabela.
Monetários: MONEY Até algumas versões mais antigas do PostgreSQL era o formato utilizado para armazenar valores monetários no formato de moeda americana. Armazenamento: 4 bytes Intervalo: -21474836.48 a +21474836.47 Este tipo de dado tornou-se obsoleto, sendo atualmente utilizado o tipo de dado REAL, contudo por razões de compatibilidade o PostgreSQL ainda dá suporte ao tipo MONEY.
Strings: CHARACTER(n) / CHAR(n) Uma string formada por um número fixo (n) de caracteres. Esse tipo preenche com espaços em branco a direita do conteúdo até totalizar o comprimento da string. Armazenamento: (4+n) bytes Capacidade: até 1Gb de informação (considerando um char(10)) 'strmenor' 'stringmaiormaior' 'strmenor ' Erro: maior que o declarado
Strings: CHARACTER VARYING(n) / VARCHAR(n) Uma string de tamanho variado. Similar ao tipo CHAR, apenas difere pelo fato de não completar a string com espaços caso o tamanho do texto não atinja o comprimento definido. Armazenamento: (4+n) bytes Capacidade: até 1Gb de informação Exemplo: considerando um varchar(10) 'strmenor' 'stringmaiormaior' 'strmenor' Erro: maior que o declarado
Strings: TEXT Armazena diferentes tipos de textos, que não possuam tamanho similar entre os registros. Não requer a declaração de um número máximo de caracteres. Armazenamento: (4+n) bytes Capacidade: Até 1 Gb de informação
Datas e Horas: INTERVAL(p) Este tipo de dado representa um período de tempo. Sua utilização está ligada a operações com tempo, expirações de prazos e outros. Armazenamento: 12 bytes Capacidade: -178000000 anos a 178000000 anos O parâmetro p indica as casas decimais da unidade de segundo. A utilização do tipo INTERVAL deve ser sempre no formato quantidade seguido de uma das unidades apresentadas.
Datas e Horas: INTERVAL(p) As unidades de tempo podem ser: second, minute,hour, day, week, month, year, decade, century, millennium, ago (tempo negativo) É possível utilizar os temos em seus respectivos plurais em inglês, contudo não é obrigatório, mesmo quando a quantidade para a referida unidade de tempo é superior a 1. 10 year ou 10 years 2 decades 1 year 5 days 2 hours 17 minutes 3.23 seconds ago
Datas e Horas: DATE Armazena somente dadas, que são aceitas em diversos formatos. Como padrão é usado o ISO (YYYY-MM-DD). Armazenamento: 4 bytes Intervalo: 4713 BC a 5874897 AD 'now' '12/03/2013' '01-Mar-2012' 'today' '2013-03-12' '2013-03-12' '2013-03-01' '2013-03-12'
Datas e Horas: TIME / TIME without time zone Armazena uma hora do dia sem a região de fuso horário. Armazenamento: 8 bytes Intervalo: 00:00:00 a 24:00:00 'now' '21:10:32' '21:10:32' '21:10:32'
Datas e Horas: TIME(n) with time zone / TIMENZT(n) Armazena uma hora do dia junto com a informação de região de fuso horário do tempo em questão. Armazenamento: 12 bytes Intervalo: 00:00:00+1459 a 24:00:00-1459 'now' '21:10:32' '21:10' '09:10 PM' '21:10:32.221-03' '21:10:32-03' '21:10:00-03' '21:10:00-03'
Datas e Horas: TIMESTAMP [without time zone] Armazena uma concatenação de data e hora nos mesmos formatos dos seus respectivos tipos (DATE TIME). Armazenamento: 8 bytes Intervalo: 4713 BC a 294276 AD Exemplos: Opcionalmente podem ser informados após a data as siglas AD (Anno Domini) ou BC (Before Christ). 'now' '21:10:32' '12-03-2013' '2013-03-12 21:10:32' Erro: necessário informar data '2013-03-12 00:00:00'
Datas e Horas: TIMESTAMP(n) with time zone AArmazena uma concatenação de data e hora junto com a informação da região de fuso horário. Armazenamento: 8 bytes Intervalo: 4713 BC a 294276 AD Opcionalmente podem ser informados após a data as siglas AD (Anno Domini) ou BC (Before Christ). 'now' '21:10:32' '12-03-2013' '2013-03-12 21:10:32-03' Erro: necessário informar data '2013-03-12 00:00:00-03'
Binários e Booleanos: BYTEA Também conhecido como BLOB pelo padrão SQL. Permite o armazenamento de cadeias binárias. Armazenamento: (4 + n) bytes Exemplos: O tipo de dados BLOB (Binary Large Object) geralmente é utilizado para armazenar imagens ou outros arquivos (documentos, áudios, vídeos etc.) em outros SGBDs. Embora isso seja possível no PostgreSQL não é aconselhável por motivos de desempenho, pois como os dados são armazenados bit-a-bit a o seu armazenamento e recuperação pode se tornar extremamente lento.
Binários e Booleanos: BIT(n) Armazena strings binárias de tamanho fixo (n) formado por 0 s e 1 s. Deve-se respeitar o número de caracteres definidos ao inserir registros. Armazenamento: (n) bytes Supondo um BIT com 10 posições B'0100100011' 0100100011 B'01001000' Erro: menos posições B'01001000111' Erro: mais posições
Binários e Booleanos: BIT VARYING(n) / VARBIT(n) Assim como o formato BIT, este tipo de dado armazena strings binárias. A diferença é que este suporta string de diferentes tamanhos, desde que menores do que o declarado. Armazenamento: (n) bytes Supondo um VARBIT com 10 posições B'0100100011' 0100100011 B'01001000' 01001000 B'01001000111' Erro: mais posições
Binários e Booleanos: BOOLEAN / BOOL Possibilita armazenar as opções TRUE e FALSE. Geralmente utilizado como FLAG de propriedades de objetos. Armazenamento: 1 byte Intervalo: TRUE, true, YES, yes, T, t, Y, y, 1, FALSE, false, NO, no, F, f, N, n, 0 TRUE false 'F' T t f f Erro: aspas necessárias
Tipos de dados de Redes É possível armazenar informações de redes como IPs e endereços MAC utilizando os seguintes tipos de dados: CIDR: Armazena endereços de rede IPv4. Ex.: 10.1/25 (arredonda para zeros quando omitido o IP completo.) INET: Armazena um endereço de rede ou de host, com a diferença de não permitir a omissão de partes do número IP. Ex.: 10.1.100.128/25-2001:4f8:3:ba::/64 MACADDR: Armazena um endereço MAC de placas de rede. Ex.: 11:00:1e:02:12:01
Tipos de dados de Geométricos Com o rápido crescimento das aplicações gráficas, alguns novos tipos de dados surgiram: POINT: Representa um ponto. Ex.: (1,5) LSEG: Representa um Segmento de linha. Ex.: ((1,5), (3,2)) PATH: Coordenadas de um desenho formado por pontos. Ex.: ((1,5), (1,6),(2,8)) BOX: Uma caixa retangular representada por um par de pontos. Ex.: ((1,5), (3,2)) POLYGON: Representa um polígono de forma regular/irregular. Ex.: (1,5), (1,6),(2,8),(3,3) CIRCLE: Representa um círculo, formado pelo seu ponto central e tamanho do seu raio. Ex.: ((1,5), 2)