Pesquisar este blog

terça-feira, 8 de julho de 2014

Chapter 2- Lesson 2: Working with Data Types and Built-in Functions

Pra quem está acompanhando em ordem os posts talvez tenha reparado que pulei a lição 1 do capítulo 2. É uma lição voltada principalmente para as particularidades dos comandos FROM e SELECT. Realmente não vi nada que fuja do conhecimento trivial de quem já tem um pouco de experiência em TSQL. Sendo assim, bola pra frente...

Agora, esta lição 2,é punk rock até os ossos. Acredito que vou precisar de mais de um post pra conseguir compartilhar tudo de interessante que este capítulo possui.

Vou começar pelo básico, porém fundamental que são as escolhas corretas de tipos de dados para um bom aproveitamento de espaço e processamento. Vou tentar ser o mais direto possível e abordar as diferenças dos tipos de dados e apresentar também os tipos de dados que vejo serem pouco utilizados porém seriam perfeitamente aplicáveis as principais aplicações "convencionais".

Tipos de dados literais.

Tipo Descrição
CHAR Tipo de dado de tamanho fixo. Exemplo, ao definir uma coluna de tabela ou uma variável como CHAR(10)e gravar apenas a letra A, os outros 9 caracteres são preenchidos com espaço em branco. Sendo assim, utilize este tipo de dados apenas quando os valores a serem gravados tenham o mesmo tamanho. Exemplo, CPF, CNPJ, UF e etc. Cada caracter ocupa 1 byte de espaço.
NCHAR Também de tamanho fixo, ou seja, segue a lógica descrita do tipo CHAR. A diferença então entre CHAR e NCHAR é que este último tem a função de gravar caracteres globais que não podem ser expressos em apenas 1 byte. Se seu sistema será multi idioma como por exemplo em mandarim, japonês entre outros, utilize este tipo de dados. Não esquecendo de seguir a lógica de utilizar somente para valores literais que terão o mesmo tamanho. Cada caracter ocupa 2 bytes de espaço
VARCHAR Este é o tipo mais conhecido. Diferente de CHAR possui tamanho variável. Exemplo, ao definir uma coluna de tabela ou variável como varchar(80), e gravar o nome Murilo, diferente do campo CHAR só será ocupado o espaço referente aos 6 caracteres informados.Existe a opção também de utilizar VARCHAR(MAX) que permite uma infinidade de dados (2^31) e veio para substituir o tipo de dados TEXT. Cada caracter ocupa 1 byte de espaço.
NVARCHAR Da mesma forma que o tipo de dados VARCHAR também é de tamanho variável, NVARCHAR também segue a idéia de multi-idioma mencionado no tipo NCHAR. A dica então é utilizar este tipo de dado para colunas descritivas que possam variar de tamanho e idioma. Existe a opção também de utilizar NVARCHAR(MAX) que permite uma infinidade de dados (2^31) e veio para substituir o tipo de dados NTEXT. Cada caracter ocupa 2 byte de espaço.

Tipos de dados numéricos.

Tipo Descrição
TINYINT Este é um tipo de dados que vejo ainda ser pouco usado porém é extremamente útil, aplicável e economiza muito espaço em tabela. Tinyint pode variar de 0 a 255 e ocupa belos 1 byte. 
SMALLINT Este também é um tipo de dado pouco usado e também é muito útil e aplicável. Smallint pode variar de -32.768 a 32.768 e ocupa 2 bytes.
INT Este é o mais conhecido e muitas vezes utilizado sem necessidade. Em muitas situações pode ser substituído por smallint ou tinyint.Integer pode variar de -2.147.483.648 a -2.147.483.647 e ocupa 4 bytes.
BIGINT Como o nome já diz, este é um "baita" integer. Pode ser útil em campos sequenciais em tabelas com grande volume de dados. Bigint pode variar de -9.223.372.036.854.775.808 até 9.223.372.036.854.775.807 e ocupa 8 bytes.
NUMERIC\DECIMAL Bom, aqui chegamos já aos números praticamente infinitos.Este tipo de dados serve para armazenar valores muito pequenos, ou muito grandes, depende de como você resolve utilizá-lo. Este tipo de dado por ter até 38 dígitos. Sendo que destes 38 você pode usar até 38 casas decimais, neste caso não sobraria nada para os inteiros, podendo ser no máximo 0.99999999999999999999999999999999999999 (numeric(38,38); 38 vezes o 9). Ou você poderia utilizar um valor de 38 dígitos sendo destes 38, 18 para casas decimais. Neste caso você poderia armazenar um valor como esse por exemplo 12345678901234567890.123456789012345678 (numeric(38,18). Ou seja, extremamente grande. Os bytes a serem ocupados por este tipo de dados vai variar de acordo com a quantidades de dígitos especificado na declaração . De 1 a 9 dígitos = 5 bytes; de 10 a 19 = 9 bytes; de 20 a 28 = 13 bytes; de 29 a 38 = 17 bytes
FLOAT\REAL Ainda falando dos tipos numéricos com capacidade quase infinita.Este tipo de dado na minha opinião é um dos mais "estranhos". Não é um tipo de dado numérico preciso, é flutuante. Pra ser bem sincero, tenho dificuldade de entender este conceito pois é algo totalmente matemático. De forma resumida eu entendo que serve para representar números extremamente grande ou extremamente pequeno, porém devido a uma adaptação para armazenar estes números de forma binária, que é como os computadores trabalham, hardwares de diferentes capacidades e tecnologias podem apresentar variações de apresentação deste tipo de dado. Ou seja, resultados de manipulações matemáticas podem apresentar resultados diferentes em computadores diferentes. Em um dos sites que pesquisei, encontrei algo como; "se você não tem certeza do motivo de estar utilizando float\real não o utilize". Sendo assim, para aplicações convencionais, opte pelo NUMERIC.
MONEY O nome já diz bastante coisa.Este tipo de dados possui 4 casas decimais e sua utilização é indicada para valores monetários. Pode variar de -922.337.203.685.477,5808 a 922.337.203.685.477,5807 e possui 8 bytes. Tenha certeza que o que você está definindo como money é realmente um valor monetário, pois caso venha a sofrer muitas manipulações matemáticas entre outros valores money, o resultado poderá ser desagradável, até porque você não divide R$5,00/R$5,00 e depois multiplica por outros R$10,00.

Tipos de dados data e hora.

Tipo Descrição
DATE Este é um tipo de dados que vejo ainda ser pouco usado porém é extremamente útil, aplicável e economiza espaço em tabela. Date armazena somente dia, mês e ano e ocupa 3 bytes.
TIME Também é um tipo de dados que vejo ainda ser pouco usado porém é extremamente útil, aplicável e economiza espaço em tabela. Time armazena hora, minuto segundo e pode armazenar até nanosegundo, exemplo 23:59:59.9999999. Dependendo da precisão o espaço ocupado pode variar de 3 a 5 bytes.
SMALLDATETIME É uma baita alternativa ao famoso e comum DATETIME. Neste tipo de dado é armazenado ano/mes/dia/hora/minutos/segundos, os milésimos não entram, o que o torna um tipo de dado bastante compatível com a maioria das necessidades dos sistemas "convencionais".Este tipo de dado ocupado 4bytes.
DATETIME O datetime dispensa grandes apresentações, é o tipo mais utilizado para gravar datas. Sua precisão é de milésimos de segundos, o que o torna bastante convencional para a maioria das implementações. Ocupa 8 bytes.
DATETIME2 Este aqui é um super datetime, pode chegar a precisão de nanosegundos se declarado como datetime2(7).Digamos que para aplicações mais específicas ou por exemplo para monitoramento de processamento de rotinas de software seja útil, caso contrário o bom e velho datetime da uma boa conta do recado.

Nenhum comentário:

Postar um comentário