Sie sind auf Seite 1von 40

ndices y Diseo de Integridad de datos

MSc. Edgar Taya Acosta

ndices

Son una estructura importante de datos en disco definidos por el usuario (adems de las tablas). Un ndice proporciona un acceso rpido a los datos cuando se puede buscar en los datos por el valor que es la clave del ndice. Los ndices se crean sobre ndices para acelerar el acceso a los datos. Puede marcar la diferencia entre una respuesta casi inmediata y una larga espera. El espacio que ocupa un ndice es directamente proporcional a la cantidad de registros en la tabla y al ancho de la clave del ndice. Antes de crear un ndice se debe realizar un balance que asegure que el incremento de performance por el aumento de las respuestas en la consultan justifica con creces la cada de rendimiento y la sobrecarga producida por la tarea de mantenimiento del ndice. Los ndices se crean en base a la secuencia de intercalacin seleccionada durante la instalacin del sistema y generalmente se crean en orden ascendente. Los ndices permiten las siguientes ventajas:

Fuerzan la unicidad de los identificadores de las filas (valores claves) Acelera las uniones (control de integridad referencial) Acelera el acceso a los datos Acelera a ORDER BY y a GROUP BY

Tipos de ndices y caractersticas de ndices:

ndices compuestos:
Especifican dos o ms columnas como parte del ndice Las columnas compuestas son tratadas como una unidad El orden de las columnas en la sentencia CREATE INDEX no tienen que ser el mismo orden que de la tabla

ndices nicos
Fuerzan la integridad referencial, a cada fila es asignada un valor nico. No se debe usar sobre una columna que tenga datos repetidos o redundantes

ndices Agrupados (Clustered):

El orden fsico de las filas es el mismo que el orden indizado de las filas y el nivel inferior (hojas) del ndice agrupado contiene las filas actuales de datos. Como los ndices no agrupados se vuelven a generar cuando se crea un ndice agrupado, cree el ndice agrupado antes de crear los ndices no agrupados. Si no se especifica CLUSTERED, se crea un ndice no agrupado.

Indices No Agrupados (NonClustered)

Especifica la ordenacin lgica de una tabla. Con un ndice no agrupado, el orden fsico de las filas no es el mismo que su orden indizado. El nivel hoja de un ndice no agrupado contiene las filas del ndice. Cada fila del ndice contiene el valor de clave no agrupada, y uno o varios localizadores de fila que apuntan a la fila que contiene dicho valor. Si la tabla no tiene un ndice agrupado, el localizador de fila es la direccin de disco de la fila. Si la tabla tiene un ndice agrupado, el localizador de fila es la clave del ndice agrupado de la fila. Adems se pueden tener varios ndices no agrupados en una tabla.

Rendimiento

El optimizador de consultas depende de columnas indexadas para que funcione. Se puede hacer muy poca optimizacin sin ndices tiles. En ciertos casos puede requerir un ndice la aplicacin front-end con la que se est trabajando.
Porqu no indexar una columna? Toma tiempo en el servidor Consume espacio en el disco Adicionalmente, la insercin, eliminacin y actualizacin de una columna indexada se hace mas larga

Integridad de datos

Este trmino se utiliza para referirse a la precisin, rectitud o validez de los datos en la base de datos:
Mantener

la integridad de la base de datos es muy importante, por obvias razones. Para mantener tal integridad es necesario controlar todas las operaciones de actualizacin (INSERTs, DELETEs y UPDATEs) para asegurar que sean vlidas.

Integridad de datos

Frecuentemente se confunde integridad con seguridad, pero en realidad ambos conceptos tienen ciertas caractersticas en comn. Se puede hacer una distincin entre ellas de la siguiente manera:

Seguridad: es la que se encarga de controlar de que los usuarios estn permitidos a hacer las cosas que estn tratando de hacer, por tanto, seguridad es proteger la base de datos contra usuarios no autorizados. Integridad: asegura de que las cosas que los usuarios estn tratando de hacer son correctas, por tanto, integridad es proteger la base de datos contra usuarios autorizados.

Implementacin de Defaults

Un default es un valor que SQL Server inserta en una columna si el usuario no ingresa un valor explcitamente. Generalmente los defaults se crean despus de que la tabla a sido creada. Los defaults aseguran que siempre exista un valor en una columna determinada. Por ejemplo, la fecha de emisin de una factura podra ser establecida como default si un usuario o una aplicacin frond-end no hace una entrada en este campo, SQL Server inserta automticamente la fecha actual. Si se especifica que un campo no acepta valores NULL y no especifica un default para esa columna, SQL Server enviar un mensaje de error cada vez que alguno de estos errores en esa columna.

Implementacin de Reglas

RULE o reglas son restriciones de integridad que van mas all de aquellas implicadas por el tipo de datos de una columna. Las reglas especifican el tipo de informacin que puede ser ingresada en una columna. Fuerzan a que los valores de una columna pertenezcan a un determinado rango, se adecuen a un patrn particular o pertenezca a una lista especfica de valores posibles. Esto se controla cada vez que se haga un INSERT o un UPDATE (los datos ingresados antes de la creacin de una regla no son verificados).

Implementacin de Restricciones para la Integridad de Datos

En el diseo lgico de una base datos se pueden establecer varias restricciones sobre una columna de una tabla. Estas restricciones permiten control ciertos aspectos de la integridad de datos al poner los requerimientos sobre los valores permitidos. No nulos (Not Null): es una restriccin que obliga una entrada a una columna. Null no es sinnimo de cero o en blanco No Duplicados(Not Duplicates): Esta restriccin permite prevenir el ingreso de valores duplicados en una columna que identifique unvocamente a una fila. No Cambios(Not Changes): Esto previene el cambio del valor de una columna. Se implementa con la utilizacin de restricciones de referencia, disparadores o permisos.

Primary Key (PK)

PK permite controlar la integridad de los datos que cada fila de la tabla sea nica. Toda tabla debe tener una cable primaria. Solo puede haber una clave primaria por tabla. El PK no debe permitir valores NULL o DUPLICATES. Se recomienda que tampoco se permita CHANGES. No es recomendable asignar DEFAULT a la columna(s) que conforma PRIMARY KEY o UNIQUE.

Foreign Key (FK)

FK hace referencia a la clave primaria(PK) de una tabla. Puede ser la clave primaria de la misma tabla u otra tabla. Una columna puede ser tanto clave primaria para su propia tabla como clave fornea para otra tabla. SQL Server controla los valores de la columna marcada con FK, contra los valores de la columna PK para verificar que estos valores sean legtimos. Proporciona enlace entre dos tablas. Fuerza la integridad referencial asegurando de que cada valor en la columna FK sea una PK vlida.

Manos a la obra

Sintaxis de CREATE INDEX


CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX nombrendice ON tabla (columna [,n]) [WITH [PAD_INDEX] [[,] FILLFACTOR = factorRelleno] [[,] IGNORE_DUP_KEY] [[,] DROP_EXISTING] [[,] STATISTICS_NORECOMPUTE] ] [ON grupoArchivos]

ndice con 10% de espacio libre en cada pagina e nd. de pagina:


CREATE INDEX cod_cliente_ind ON cliente (cod_cliente) WITH PAD_INDEX, FILLFACTOR=10

Ejemplo de ndice compuesto:


CREATE INDEX apenom_emp_ind ON empleado (Apellidos, Nombres) WITH FILLFACTOR=10

Ejemplo de ndice nico:


CREATE UNIQUE INDEX nom_pais_ind ON Proveedor (Pais)

Ejemplo de ndice agrupado:


CREATE CLUSTERED INDEX nro_comprobante_ind ON Comprobante_Pago (Nro_Serie)

Sintaxis de DROP INDEX:


DROP INDEX 'tabla.ndice' [,n]
DROP INDEX empleado. apenom_emp_ind

Sintaxis de CREATE DEFAULT


CREATE DEFAULT Nombre_default AS expresinConstante

Ejemplo: Crear un Default con la Fecha Actual

CREATE DEFAULT fecha_actual AS getdate()

Otros ejemplos
CREATE DEFAULT Ruc_Cliente AS 'NoSeSabe' CREATE DEFAULT Sueldo AS 100.0

Ejemplos: Crear un Default para la columna Fecha_Venta con la Fecha Actual EXEC sp_bindefault 'fecha_actual', Comprobante_Pago.fecha_emision
DROP DEFAULT {Nombre_default} [,n] DROP DEFAULT Ruc_Cliente

Sintaxis de CREATE RULE:


CREATE RULE nombre_regla AS expresinCondicin

Ejemplo A: Rule como un Rango


CREATE RULE p_prod_regla AS @p_prod >= 10 AND @p_prod < 2000 -- Luego crea y vincula con una columna de la tabla articulo EXEC sp_bindrule p_prod_regla, Producto.Precio

Ejemplo B: Rule como una Lista


CREATE RULE lista_regla AS @lista IN ('EE.UU.', 'Japn', 'Canad','Reino Unido') DROP RULE lista_regla
EXEC sp_bindrule lista_regla, 'Proveedor.Pais'

Ejemplo C: Rule como un Patron o formato. Solo aceptara digitos de 0-9

CREATE RULE regla_patron AS @value LIKE '54__'


EXEC sp_bindrule regla_patron, 'Empleado.Extension'

Ejemplo: Primero disvincula el RULE y luego lo elimina


EXEC sp_unbindrule 'Empleado.Extension DROP RULE regla_patron

Agregando una restriccin como UNIQUE


ALTER TABLE empleado ADD CONSTRAINT UNC_apenom_empl UNIQUE NONCLUSTERED (Apellidos, Nombres)

Agregando una restriccin como un DEFAULT


ALTER TABLE Pedido ADD DEFAULT GetDate() FOR Fecha_pedido

Agregando una restriccin como CHECK. (Solo aceptar 3 dgitos)


ALTER TABLE Empleado ADD CONSTRAINT CK_afp CHECK (AFP LIKE '[0-9][0-9][0-9]')

Agregando una nueva columna con restriccin y valor por defecto


ALTER TABLE producto ADD unidad_medida_articulo varchar(20) NULL DEFAULT('Cajas')

ALTER TABLE complejo con Multiples Changes


ALTER TABLE empleado ADD nombre_region varchar(30) NULL DEFAULT('Bolognesi'), CONSTRAINT CK_cod_ciudad CHECK (cod_ciudad IN ('054', '001', '034') OR cod_ciudad LIKE '99[0-9][0-9]')

Eliminando una restriccin


ALTER TABLE empleado DROP CONSTRAINT CK_cod_ciudad

Desactivando un Constraint
ALTER TABLE ciudad NOCHECK CONSTRAINT CK_cod_ddn

Activando un Constraint
ALTER TABLE ciudad CHECK CONSTRAINT CK_cod_ddn

exec sp_helpindex empleado exec sp_help producto SELECT cod_articulo, total_duplicados =COUNT(*) FROM articulo GROUP BY cod_articulo HAVING COUNT(*)>1

Das könnte Ihnen auch gefallen