BANCO DE DADOS WEB AULA 6 Tipos de Dados professor Luciano Roberto Rocha www.lrocha.com
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. 2
Tipos de dados no PostgreSQL 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 3
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: Valor fora do intervalo possível para este tipo de dado. 4
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: Valor fora do intervalo possível para este tipo de dado. 5
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 6
Numéricos: REAL /FLOAT/FLOAT4 Armazena valores numéricos com casa decimal (pontoflutuante) 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 7
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 Supondo um NUMERIC(6,2) 1234.3456 1234.35 Supondo um NUMERIC(6,2) 12.34 12.3400 Supondo um NUMERIC(6,4) 8
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. 1 1 5000 5000 9
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. 1 1 200000 200000 10
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. $500 $500.00 $5,500.00 $5,500.00 11
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 strmenor strmenor Supondo um CHAR(10) StrMaiorQueoDeclarado Erro: Valor com mais posições... 12
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 strmenor strmenor Supondo um VARCHAR(10) StrMaiorQueoDeclarado Erro: Valor com mais posições... 13
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 Lorem ipsum dolor Lorem ipsum dolor sit amet avec quis sit amet avec quis 14
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. 15
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. Exemplos: 10 year ou 10 years 2 decades 1 year 5 days 2 hours 17 minutes 3.23 seconds ago 16
Datas e Horas: DATE Armazena somente datas, 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 2009-08-23 23/08/2009 2009-08-23 11-Feb-09 2009-02-11 today 2009-08-23 17
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 20:35:06 (Horário corrente do sistema) 09:10:00 09:10:00 16:00 16:00 04:00 PM 16:00:00 18
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 20:35:06.957-03 09:10:00 09:10:00-03 16:00 16:00:00-03 04:00 PM 16:00:00-03 16:00+08 16:00:00+08 19
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 5874897 AD Opcionalmente podem ser informados após a data as siglas AD (Anno Domini) ou BC (Before Christ). now 2009-08-23 20:35:06 09:10 PM Erro: É necessário informar a data 2009-01-22 2009-01-22 00:00:00 20
Datas e Horas: TIMESTAMP(n) with time zone Armazena 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 5874897 AD Opcionalmente podem ser informados após a data as siglas AD (Anno Domini) ou BC (Before Christ). now 2009-08-23 20:35:06-03 09:10 PM Erro: É necessário informar a data 2009-01-22 2009-01-22 00:00:00-03 21
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 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. 22
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 1010010110 1010010110 B 101001011 Erro: Utilizou menos posições B 101001011011010 Erro: Utilizou mais posições 23
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 1010010110 1010010110 B 101001011 101001011 B 101001011011010 Erro: Utilizou mais posições 24
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 Supondo um VARBIT com 10 posições TRUE false F T t f f Erro de sintaxe: É necessário aspas... 25
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 26
Tipos de dados de Geométricos Com o rápido crescimento das aplicações gráficas, alguns novos tipos de dados surgiram: 27
Tipos de dados de Geométricos 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) 28