martes, 25 de mayo de 2010

Tema 7: Identificar Tipos de Datos

Una vez que se ha creado una base de datos, se crearán las tablas que guardarán los datos dentro de la base de datos.
Para crear estas tablas, sin embargo, se deben definir previamente los tipos de datos que serán definidos para cada columna. Un tipo de dato es un atributo que especifica como serán los datos que pueden ser almacenados en una columna, parámetro, o variable.
SQL Server provee de un conjunto de tipos de datos predefinidos. Además, se pueden crear tipos de datos definidos por el usuario, este punto intentará explicar como identificar que tipos de datos se deben emplear cuando se define una columna.

Tipos de datos provistos por el sistema
En SQL Server cada columna tiene un tipo de dato definido, el cual es un atributo que especifica como serán los datos que pueden guardarse en esa columna (números enteros, caracteres, valores monetarios, fechas, etc.). Otras objetos, además de las columnas, tienen también asociados tipos de datos, los objetos que tienen asociados tipos de datos son:
·        Columnas en tablas y vistas
·        Parámetros de procedimientos almacenados
·        Variables
·        Funciones Transact-SQL que retornan uno o mas valores de un tipo específico de dato.
·        Procedimientos almacenados que tienen un código return (el cual siempre es un valor entero)
Asignar tipos de datos a cada columna es uno de los primeros pasos que se dan en el diseño de una base de datos. SQL Server provee un conjunto de tipos de datos predefinidos por el sistema. Los tipos de datos se pueden utilizar para asegurar la integridad de los datos, dado que un dato para ser grabado o modificado deberá ajustarse al tipo de dato especificado para la columna a la que pertenece, según fue establecido en comando original CREATE TABLE. Por ejemplo, no se puede grabar el apellido de alguien en una columna definida como tipo de dato fecha y hora (datetime), dado que esta columna solo aceptará datos de fechas y horas.
El asignar un tipo de dato a un objeto define cuatro atributos del objeto:
·        El tipo de dato contenido por el objeto. Por ejemplo, el dato podría ser carácter, entero o binario.
·        La longitud o el tamaño del valor almacenado. Las longitudes de los tipos image (imágenes), binary (binarios) y varbinary ( binarios de longitud variable) son definidos en bytes. La longitud de cualquiera de los tipos numéricos de datos es el número de bytes necesarios para representar el número de dígitos máximo permitido para ese tipo de dato. Las longitudes para los tipos de datos string (cadena de caracteres) y Unicode son definidos en caracteres.
·        La precisión de los números (solamente tipos de datos numéricos). La precisión es la cantidad de dígitos que el número puede tener. Por ejemplo un objeto smallint (entero pequeño) puede tener un máximo de cinco dígitos, por lo que tiene una precisión de cinco.
·        La escala de un número (solamente tipos de datos numéricos). La escala de un número es la cantidad de dígitos que puede tener a la derecha de la coma decimal. Por ejemplo, un objeto int (entero) no puede aceptar dígitos decimales, por lo que su escala es de cero. Un valor monetario puede tener un máximo de cuatro dígitos decimales y su escala es de cuatro.
La tabla siguiente provee la descripción de las categorías de tipos de datos que SQL Server soporta y las descripciones de los tipos de datos base que cada categoría contiene:
 
Categoría Descripción Tipo de Dato Base Descripción
Binary Un dato Binary almacena cadenas de bits. El dato consiste de números hexadecimales. Por ejemplo, el número decimal 245 vale en hexadecimal F5. binary Los datos deben tener la misma longitud fija (hasta 8 KB)
varbinary Los datos pueden variar en el número de dígitos hexadecimales (hasta 8 KB)
image Los datos pueden ser de longitud variable y exceder los  8 KB.
Character Los datos Character consisten de cualquier combinación de letras, símbolos, y caracteres numéricos. Por ejemplo, datos  character válidos:"John928"  "(0*&(%B99nh jkJ" char Los datos deben tener la misma longitud fija (hasta 8 KB)
varchar Los datos pueden variar en el número de  caracteres (hasta 8 KB)
text Los datos pueden ser cadena de caracteres ASCII que excedan los 8 KB.
Date time Los datos Date time consisten de combinaciones de fechas o horas válidas. No existe tipos de datos separados para fechas y horas para almacenar solo fechas o solo horas datetime Los datos fecha están comprendidos entre en el 1 de Enero de 1753 hasta el 31 de diciembre de 9999 (requiere 8 bytes por dato).
smalldatetime Los datos fecha están comprendidos entre en el 1 de Enero de 1900 hasta el 31 de diciembre de 2079 (requiere 4 bytes por dato).
Decimal Los datos Decimal consisten de datos numéricos que son almacenados al menor dígito significativo decimal Los datos pueden tener un máximo de 30 dígitos, que pueden estar todos a la derecha de la coma decimal. El tipo de dato almacena un representación exacta del número.
numeric En SQL Server, el tipo de datos numeric es equivalente al tipo de datos decimal.
Floating point Datos numéricos aproximados que consisten de datos con una aproximación tanto como el sistema de numeración binaria pueda ofrecer float Desde –1.79E + 308 a 1.79E + 308.
real Desde –3.40E + 38 a 3.40E + 38.
Integer Los datos Integer consisten de números enteros positivos y negativos tales como: –15, 0, 5, y 2.509. bigint Desde –2^63 (–9223372036854775808) a 2^63–1 (9223372036854775807). Tamaño 8 bytes.
int Desde –2.147.483.648 a 2.147.483.647 (requiere de 4 bytes por valor).
smallint Desde –32,768 a 32.767  (requiere de 2 bytes por valor).
tinyint Desde cero a 255 (requiere de 1 bytes por valor).
Monetary Monetary representa montos de dinero positivos o negativos money Desde –922.337.203.685.477,5808 a +922.337.203.685.477,5807 Tamaño 8 bytes.
smallmoney Desde –214.748,3648 a 214.748,3647 Tamaño 4 bytes.
Special Special se utiliza para datos que caben en ninguna de las categorís anteriores. bit Consisten en un 1 o un 0. Se usan para representar valores lógicos VERDADERO o FALSO, SI o NO
cursor Este tipo de dato es usado para variables o prámetros OUTPUT en procedimientos almacenados que contenga una referencia a un cursor. Cualquier variable creada con el tipo de datos cursor puede tomar valor nulo
timestamp Este tipo de datos es usado para indicar la secuencia de la actividad del SQL Server sobre una fila y es representado por un número incremental en formato binario.
uniqueidentifier Consiste de números hexadecimales de 16 byte, indicando un identificador único global (GUID). Los GUID son usados cuando una columna deba ser única frente a cualquier otra columna.
SQL_variant Este tipo de datos soporta a cualquier otro tipo de datos soportado por SQL Server excepto text, ntext, timestamp, image, y sql_variant.
table Es utilizado para almacenar un conjunto de resultados para su posterior procesamiento. El tipo de datos Table puede ser usado únicamente para para definir variable locales de tipo table o para retornar valores de una función definida por el usuario.
Unicode Al usar tipo de datos Unicode, una columna puede almacenar cualquier cualquier caracter definido por el estándar Unicode. Lo cual incluye a todos los caracteres definidos en los distintos conjuntos de caracteres. Los tipos de datos Unicode toman el doble de espacio de almacenamiento que los tipos no-Unicode. nchar Los datos deben tener la misma longitud fija (hasta 4000 caracteres Unicode)
nvarchar Los datos pueden variar en el número de  caracteres (hasta 4000 caracteres Unicode)
ntext Los datos pueden exceder los 4000 caracteres Unicode.

Todos los datos almacenados en el SQL Server deben ser compatibles con uno de estos tipos de datos base. El tipo de dato cursor es el único tipo dedatos base que no puede ser asignado a una columna de una tabla. Se puede usar este tipo de dato solamente para variables y para parámetros de procedimientos almacenados.
Varios tipos de datos base tienen sinónimos (por ejemplo, rowversion es sinónimo de timestamp, y varying es sinónimo de nvarchar).

Tipos de datos definidos por el usuario
Los tipos de datos definidos por el usuario están basados en tipos predefinidos por el sistema en SQL Server 2000.
Los tipos de datos definidos por el usuario pueden ser usados en varias tablas que deban guardar el mismo tipo de dato en una columna y cuando se necesita asegurar que estas columnas tengan exactamente el mismo tipo de dato, longitud y capacidad de aceptar nulos. Por ejemplo, un tipo de datos definido por el usuario llamado codigo_postal podría ser creado en base al tipo char.
Cuando se crea un tipo de dato definido por el usuario, se deben proveer los siguientes parámetros:
·        Nombre
·        Tipo de datos del sistema sobre el que se basa el nuevo tipo de dato
·        Anulabilidad (si el tipo de dato permite valores nulos).
 Cuando la anulabilidad no es explícitamente definida, se toma por defecto la configuración de nulos ANSI para la base de datos o conexión.
Si un tipo de datos definido por el usuario es creado en la base de datos Model el tipo de datos estará disponible para todas las nuevas bases de datos que se creen. Si el tipo de datos es creado en una base de datos definida por el usuario el tipo de datos sólo estará disponible para dicha base de datos.
Se pueden crear tipos de datos definidos por el usuario utilizando el procedimiento almacenado sp_addtype o utilizando el Enterprise Manager.

No hay comentarios:

Publicar un comentario