Está en la página 1de 5

OTROS OBJETOS DE LA BASE DE DATOS

Una base de datos Oracle puede tener mucho ms que tablas y vistas. Las constraints aseguran las reglas de integridad. Las secuencias pueden ser utilizadas para crear claves artificiales y los sinnimos, alias de los objetos. Los ndices pueden mejorar el rendimiento de las consultas.

Secuencias
Una secuencia de Oracle es un generador secuencial de nmeros con nombre. Las secuencias son utilizadas frecuentemente para crear claves artificiales o para ordenar filas que de otra forma no tienen orden. Como las constraints, las secuencias slo existen en el diccionario de datos. Las secuencias pueden ser configuradas para incrementarse o decrementarse, repetirse, etc.

START WITH. Define el primer nmero que generar la secuencia. Por defecto es 1 INCREMENT BY. Define el incremento o decremento para los siguientes nmeros generados. Para especificar una secuencia decremental, basta usar un nmero negativo MINVALUE. Mnimo valor que pueda generar la secuencia. Tiene sentido en secuencias decrementales. Por defecto es NOMINVALUE MAXVALUE. El nmero ms alto que puede generar la secuencia. El valor por defecto es NOMAXVALUE, que en realidad es 10E27.

Cuando se crea una secuencia, el valor START WITH debe ser igual o mayor que el MINVALUE. Cacheando la secuencia mejoramos el rendimiento, ya que accedemos una nica vez al diccionario de datos, pero corremos el riesgo de saltarnos nmeros.

CYCLE. La secuencia repetir los nmeros una vez se haya alcanzado el mximo NOCYCLE. La secuencia repetir los nmeros una vez se haya alcanzado el mximo. Cuando intente generar el siguiente valor, fallar. NOCYCLE es la opcin por defecto CACHE. Define el tamao del bloque de nmeros de secuencia que se almacenarn en la memoria. Por defecto es 20 NOCACHE. Fuerza la modificacin sobre el diccionario de datos cada vez que se solicita un nmero de la secuencia.

Para acceder a los valores de la secuencia, simplemente haremos una consulta sobre la seudo-columna nextval. Para acceder al ltimo valor que se ha generado, consultaremos currval. Currval ser indefinido si todava no se ha generado ningn valor, y saltar un error. Create sequence policy_seq nomaxvalue nocycle; Select policy_seq.nextval from dual;

Update old_acme_policies set policy_id = policy_seq.nextval; Nota: los rollback no vuelven atrs las secuencias

ndices
Los ndices son estructuras de datos que pueden mejorar el rendimiento de las consultas al buscar sobre unas filas determinadas. Por defecto, las consultas recuperan todas las filas de la tabla (full scan) y despus filtran por las condiciones de la consulta. Los ndices no siempre mejoran el rendimiento de una consulta. Tipos de ndices: B-tree, hash, and bitmap index types Index-organized tables Function-based indexes Domain indexes

Oracle recupera las filas de una tabla de dos formas: 1. Por ROWID 2. Haciendo un full scan

Tanto el tipo de ndice B-tree como el bitmap mapean las columnas a ROWIDs, pero lo hacen de diferente manera. Los ndices siempre perjudican las operaciones de modificacin de la informacin, ya que debe mantenerse el ndice cada vez que modificamos los datos.

ndice B-TREE
El tipo de ndice ms comn es el B-TREE, adems de ser el ndice por defecto. Pueden ser: 1. nicos o no nicos 2. Estar definidos sobre una o varias columnas

Los ndices B-TREE obtienen el mejor resultado cuando se aplican sobre columnas con una alta cardinalidad. Es decir, sobre columnas que tengan muchos valores diferentes. Mejora considerablemente el rendimiento de un full-scan si recupera un nmero bajo de filas (menos del 10% de las filas de la tabla). Las ramas del rbol contienen la columna ndice (la clave) y la direccin de otro bloque. Los nodos hoja contienen la clave y el ROWID de cada fila de la tabla. Adicionalmente, los nodos hoja forman una doble lista enlazada, lo que significa que se pueden hacer bsquedas dentro de un rango. El orden de los campos es importante. Primero ordena por el primer campo del ndice, despus por el segundo y as sucesivamente. CREATE INDEX auto_idx ON insured_autos (make, model, year); Mejoraremos una consulta del estilo: SELECT count(*) FROM insured_autos WHERE make = Ford AND model = Taurus; Pero no:

SELECT count(*) FROM insured_autos WHERE model = Taurus;

ndice Bitmap
Los ndices de tipo bitmap pueden ser simples (una columna) o concatenados (varias columnas). En la prctica siempre son simples.

Se debe utilizar este tipo de ndices en columnas con una baja-media cardinalidad, donde los ndices puedan ser combinados con condiciones AND o OR. Cada elemento clave tiene un mapa de bits, que contiene TRUE, FALSE o NULL para cada registro de la tabla. CREATE BITMAP INDEX <index_name> ON (<column_name>) PCTFREE <integer> TABLESPACE <tablespace_name>;

Los ndices basados en mapas de bits son especialmente tiles en consultas del estilo: SELECT vin FROM insured_autos WHERE body_style='HATCH' AND make in ('Ford', 'Dodge', 'Honda') AND year BETWEEN 1990 AND 1993 AND color IN ('red', 'white', 'blue')

Normalmente, un ndice basado en un mapa de bits en solitario, no mejora el rendimiento de un full scan. Nota: Si todas las columnas necesarias para satisfacer una consulta aparecen en un ndice, Oracle no necesita acceder a la tabla

Sinnimos
Un sinnimo es un alias de otro objeto de la base de datos. Un sinnimo pblico es accesible para todos los usuarios, mientras que un sinnimo privado slo lo es para el propietario y para aquellos a los cuales se les ha otorgado permisos. Un sinnimo puede hacer referencia a una tabla, vista, secuencia, procedimiento, etc en la base de datos local o, va link de base de datos, a otra base de datos. Los sinnimos se utilizan para simplificar los SQL dndole un nombre a un objeto local o remoto. Los sinnimos no se invalidan en el momento en que se elimina el objeto al cul hacen referencia. Es ms, se puede crear un sinnimo de un objeto que no existe. Cuando buscamos un objeto, el orden que sigue Oracle es: 1. Un objeto propietario del usuario actual 2. Sinnimo privado 3. Sinnimo pblico

CREATE [PUBLIC] SYNONYM synonym_date FOR [schema.]object[@dblink]; DROP [PUBLIC] SYNONYM synonym_name;

CREATE PUBLIC SYNONYM policies FOR poladm.policies@prod;