domingo, 8 de abril de 2012

18 - Tipos de datos (numéricos)

Hasta ahora hemos visto 2 tipos de datos para almacenar valores numéricos: integer (con y sin signo) y float (con y sin signo). Existe variedad de tipos numéricos para representar enteros, negativos, decimales.

Para almacenar valores enteros, por ejemplo, en campos que hacen referencia a cantidades, precios, etc., usamos: 1) integer(x) o int(x): su rango es de -2000000000 a 2000000000 aprox. El tipo "int unsigned" va de 0 a 4000000000. El tipo "integer" tiene subtipos:

- mediumint(x): va de –8000000 a 8000000 aprox. Sin signo va de 0 a 16000000 aprox.

- smallint(x): va de –30000 a 30000 aprox., sin signo, de 0 a 60000 aprox.

- tinyint(x): define un valor entero pequeño, cuyo rango es de -128 a 127. El tipo sin signo va de 0 a 255.

- bool o boolean: sinónimos de tinyint(1). Un valor cero se considera falso, los valores distintos de cero, verdadero.

- bigint(x): es un entero largo. Va de –9000000000000000000 a 9000000000000000000 aprox. Sin signo es de 0 a 10000000000000000000.

Para almacenar valores con decimales utilizamos:

2) float (t,d): número de coma flotante. Su rango es de -3.4e+38 a –1.1e-38 (9 cifras).

3) decimal o numeric (t,d): el primer argumento indica el total de dígitos y el segundo, la cantidad de decimales. El rango depende de los argumentos, también los bytes que ocupa. Si queremos almacenar valores entre 0.00 y 99.99 debemos definir el campo como tipo "decimal (4,2)". Si no se indica el valor del segundo argumento, por defecto es 0. Para los tipos "float" y "decimal" se utiliza el punto como separador de decimales.

Todos los tipos enteros pueden tener el atributo "unsigned", esto permite sólo valores positivos y duplica el rango. Los tipos de coma flotante también aceptan el atributo "unsigned", pero el valor del límite superior del rango no se modifica.

Es importante elegir el tipo de dato adecuado según el caso, el más preciso. Por ejemplo, si un campo numérico almacenará valores positivos menores a 10000, el tipo "int" no es el más adecuado, porque su rango va de -2000000000 a 2000000000 aprox., conviene el tipo "smallint unsigned", cuyo rango va de 0 a 60000 aprox. De esta manera usamos el menor espacio de almacenamiento posible.

Tipo  Bytes de almacenamiento
_______________________________________
tinyint  1
smallint 2
mediumint 3
int  4
bigint  8

float  4
decimal(t,d) t+2 si d>0, t+1 si d=0 y d+2 si t<d 
 
 
 
 

Problema Resuelto: 

Trabajamos con la tabla "libros" de una librería.

Eliminamos la tabla, si existe:

drop table if exists libros;
 
Creamos la tabla con la siguiente estructura:

create table libros(
  codigo int unsigned auto_increment,
  titulo varchar(20) not null,
  autor varchar(30),
  editorial varchar(15),
  precio decimal(5,2) unsigned,
  cantidad smallint unsigned,
  primary key (codigo)
 );
 
Note que definimos el campo "cantidad" de tipo "smallint unsigned", esto es porque los 
valores para este campo serán siempre positivos (mayores o iguales a 0), además la cantidad 
disponible no superará los 60000 aprox., así que no es adecuado usar int (cuyo rango llega 
hasta 4000 millones aprox.), así ocupamos menos espacio (3 bytes para mediumint contra 4
 bytes para int). Es importante elegir el tipo de dato más preciso.

Como en el campo "precio" almacenaremos valores entre 0.00 y 999.99 definimos el campo como tipo "decimal (5,2)", así evitamos tantos decimales innecesarios que teníamos antes con el tipo "float".


Problema Propuesto:

Un comercio que envía pizzas y empanadas a domicilio registra los pedidos 
diariamente en una tabla llamada "pedidos" con los siguientes datos:
 
 - numero de pedido, autoincrementable, entero positivo comienza en 1 y 
menor a 200 aprox.
 - nombre: piza o empanada,
 - tipo: por ejemplo, si es pizza: especial, muzarela, etc., si son 
empanadas: salteñas, picantes,arabes, etc.
 - precio: precio por unidad, valor con decimales que no supera los 
$99.99 y será siempre mayor a 0,
 - cantidad: cantidad de articulos, entero positivo desde 1 e inferior 
a 200 aprox.
 - domicilio del cliente.

1- Elimine la tabla "pedidos" si existe.

2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo.



Otros problemas:

A) El departamento de Meteorología de una ciudad tiene almacenados 
en una tabla las estadísticas de temperatura y precipitaciones de 
varias ciudades del mundo. La tabla tiene registrados los 
siguientes datos:
 
Ciudad  País Temperatura Maxima  Temp.Min Precipitaciones Media Anual
_____________________________________________________________________________________

Bs. As.     Argentina       30                   8              1200
Canberra    Australia       28                   0               620
Brasilia    Brasil          27                  13              1500
Madrid      España          31    2    400
Mexico      Mexico          23    7   850
Moscu       Rusia           24         -13   690
Oslo        Noruega         28         -16   750
Ottawa      Canadá          26         -16   900 
Santiago    Chile           29    3   300
Viena       Austria         25   -4   600
 
1- Elimine la tabla "estadisticas".

2- Cree la tabla eligiendo el tipo de dato adecuado para almacenar los datos 
descriptos arriba:
 - ciudad y país: cadena de caracteres,
 - temperaturas (máxima y mínima): entero desde -20 hasta 40 aprox.
 - precipitaciones media anual: desde 0 a 2000 aprox.


B) Un instituto de física que realiza investigaciones acerca de los gases 
guarda en una tabla las temperaturas críticas y la presión crítica de los 
mismos. La tabla contiene estos registros:
 
Gas  Temperatura Crítica Presión Crítica 
________________________________________________________
Helio           -269.7     2.26
Hidrógeno       -239.9    12.8
Nitrógeno       -147.1    33.5
Oxígeno         -120.0    50.1
Dióx. de carb.    31.3    72.9
Amoníaco         132.4   111.5
Vapor de agua    374.2   218.0
 
1- Elimine la tabla "gases" si existe.

2- Cree la tabla eligiendo el tipo de dato adecuado para almacenar los 
datos descriptos arriba:
 - Gas: cadena,
 - Temperatura Crítica: valores decimales desde -300 hasta 400 aprox.,
 - Presión Crítica: valores decimales positivos hasta 300 aprox.


C) Un banco tiene registrados las cuentas corrientes de sus clientes en 
una tabla llamada "cuentas".
 
La tabla contiene estos datos:
 
Número de Cuenta Documento Nombre  Saldo
______________________________________________________________
1234                    22555666 Perez Luis 2000.60
2566                    33558778 Pereyra Maria 5050.00
3456                    34567765 Lopez Susana   10.00
3900                    34590697 Torres Marcos  -50.50
4560                    35098098 Juarez Ana -232.00 

1- Elimine la tabla "cuentas" si existe. 2- Cree la tabla eligiendo el tipo de dato adecuado para almacenar
los datos descriptos arriba: - Número de cuenta: entero positivo, no nulo, - Documento del propietario de
la cuenta: cadena de caracteres de 8 de longitud (siempre 8), no nulo - Nombre del propietario de la
cuenta: cadena de caracteres, - Saldo de la cuenta: valores positivos y negativos altos.

No hay comentarios:

Publicar un comentario