20
CREACIÓN Y USO DE CREACIÓN Y USO DE CREACIÓN Y USO DE CREACIÓN Y USO DE CONSTRAINTS CONSTRAINTS CONSTRAINTS CONSTRAINTS SECUENCIAS, VISTAS SECUENCIAS, VISTAS SECUENCIAS, VISTAS SECUENCIAS, VISTAS E ÍNDICES E ÍNDICES E ÍNDICES E ÍNDICES CURSO: CURSO: CURSO: CURSO: TALLER DE BASE DE DATOS ALUMNOS: ALUMNOS: ALUMNOS: ALUMNOS: ANGULO VIGO, RONALD JAVIER. SANCHEZ HUAMAN ROGER MIGUEL. ERWIN FLORES VARGAS. CICLO: CICLO: CICLO: CICLO: 2008 – II DOCENTE: Ing. Hugo Pérez Quiroz. Cajamarca, Noviembre del 2008.

Creacion y Uso de Constraints

Embed Size (px)

Citation preview

CREACIÓN Y USO DE CREACIÓN Y USO DE CREACIÓN Y USO DE CREACIÓN Y USO DE CONSTRAINTSCONSTRAINTSCONSTRAINTSCONSTRAINTS SECUENCIAS, VISTAS SECUENCIAS, VISTAS SECUENCIAS, VISTAS SECUENCIAS, VISTAS

E ÍNDICESE ÍNDICESE ÍNDICESE ÍNDICES

CURSO:CURSO:CURSO:CURSO:

TALLER DE BASE DE DATOS

ALUMNOS:ALUMNOS:ALUMNOS:ALUMNOS:

� ANGULO VIGO, RONALD JAVIER. � SANCHEZ HUAMAN ROGER MIGUEL. � ERWIN FLORES VARGAS.

CICLO:CICLO:CICLO:CICLO:

2008 – II

DOCENTE:

Ing. Hugo Pérez Quiroz.

Cajamarca, Noviembre del 2008.

INDICE

i. Introducción Pág. 01.

1. Creación y uso de constraints Pág. 01. 1 .1 Tipos de Constraints Pág. 02.

1 .2 Reglas en el uso de constraints Pág. 02.

1 .3 Definiendo constraints Pág. 03.

1.3.1 CONSTRAINT NOT NULL Pág. 03.

1.3.2 CONSTRAINT UNIQUE Pág. 04.

1.3.3 CONSTRAINT PRIMARY KEY Pág. 05.

1.3.4 CONSTRAINT FOREIGN KEY Pág. 08.

1.3.5 CONSTRAINT CHECK Pág. 10.

1 .4 Manipulación de Constraints Pág. 10.

1.4.1 AÑADIENDO UN CONSTRAINT Pág. 10.

1.4.2 ELIMINANDO UN CONSTRAINT Pág. 11. 1.4.3 DESHABILITANDO UN CONSTRAINT Pág. 11.

1.4.4 HABILITANDO UN CONSTRAINT Pág. 12.

2. CREACION Y USO DE SECUENCIAS. Pág. 12.

2.1 Creación de Secuencias Pág. 12. 2.2 Ver Lista de Secuencias Pág. 13. 2.3 Uso de la Secuencia Pág. 13. 2.4 Modificar Secuencias Pág. 14. 2.5 Borrar Secuencias Pág. 14.

3 CREACION Y USO DE VISTAS. Pág. 15.

3 .1 Creación De Vistas Pág. 15. 3.2 Ejecución de comandos DML sobre Vistas Pág. 16. 3.3 Mostrar la lista de Vistas Pág. 16. 3.4 Borrar Vistas Pág. 17.

4 CREACION Y USO DE INDICES Pág. 17.

4.1 Creación de Índices Pág. 18. 4.2 Lista de Índices Pág. 18. 4.3 Borrar Índices Pág. 18.

5 Bibliografía Pág. 18.

INTRODUCCION

1 - CREACION Y USO DE CONSTRAINTS

El servidor de Oracle utiliza constraints para prevenir el registro de datos no válidos a las tablas. Se pueden utilizar los constraints para lo siguiente:

� Implementar o imponer reglas en los datos de una tabla cuando una fila es insertada, modificada o borrada de la tabla. El constraint se debe cumplir para que la operación se realice.

� Previene la eliminación de una tabla si existen dependencias con otras.

� Proporciona reglas para herramientas de Oracle, como Oracle

Developer.

Las reglas de negocio se implementan en ORACLE mediante restricciones (constraints), disparadores (triggers) o código de aplicación.

Cliente

RucDniCte

Direccion

Email

Telefono1

RazonsocNombre

Telefono2

Producto

Codproducto

Descripcion

Stockminimo

Stockactual

Marca

PrecioCompra

PrecioVenta

FechaVencimiento

Presentacion

CategoriaID (FK)

Proveedor

RucDniProvee

RazonSocial

Fax

Direccion

Telefono1

Email

CuentaProveedor

Telefono2

DetalleCompra

NroCompra (FK)

CodProducto (FK)

Cantidad

PrecioCompra

Descuento

Descripcion

Compra

NroCompra

FechaCompra

TipoDocumento

RucDniProvee (FK)

NroDocumento

FechaPago

Estado

Igv

Venta

NroVenta

FechaVenta

IdUsuario (FK)

Saldo

FechaPago

Ususario

IdUsuario

Nombre

ApPaterno

ApMaterno

Password

Telefono

Email

Direccion

Boleta

NroBoleta

FechaEmision

Igv

MontoTotal

NroVenta (FK)

Estado

FechaPago

RucDniCte (FK)

DetalleBoleta

NroBoleta (FK)

CodProducto (FK)

Cantidad

Precio

SubMonto

Descripcion

Descuento

OrdenCompra

NroOrden

FechaEmision

FechaRecibo

RucDniProvee (FK)

DetalleOrdenCompra

NroOrden (FK)

CodProducto (FK)

CantidadPedida

Descripcion

CantidadRecibida

OrdenSalida

NroOrdenSalida

FechaVenta

FechaSalida

EstadoEntrega

RucDniCte (FK)

DetalleOrdenSalida

Codproducto (FK)

NroOrdenSalida (FK)

Descripcion

Cantidad

Categoria

CategoriaID

NombreCategoría

Ubicación

1 .1 Tipos de Constraints

1 .2 Reglas en el uso de constraints Todos los constraints son almacenados en el diccionario de datos. Los Constraints son fáciles de referenciar si les proporcionas un nombre adecuado. Los constraints deben seguir el estándar para nombrar objetos. Si tú no especificas un nombre para tu constraint, el servidor de Oracle genera un nombre con el siguiente formato SYS_Cn, donde n es un entero que identifica el nombre del constraint como único. Los constraints pueden ser definidos al mismo tiempo que se crea una tabla o después de que la tabla ha sido creada. Se pueden ver los constraints definidos para una tabla específica en la tabla USER_CONSTRAINTS del diccionario de datos.

1 .3 Definiendo constraints En la imagen anterior se muestra la sintaxis para definir constraints en la creación de una tabla.

Los constraints son usualmente creados al mismo tiempo que la tabla, pero pueden ser añadidos después de la creación de la misma y también pueden ser deshabilitados temporalmente. Los constraints pueden estar definidos en uno de dos niveles que son:

1.3.1 CONSTRAINT NOT NULL El constraint NOT NULL se asegura de que las columnas no contengan valores nulos. Las columnas sin un constraint NOT NULL pueden contener valores nulos por defecto. El constraint NOT NULL puede ser especificado solamente a nivel de columnas y no a nivel de tabla. En el ejemplo anterior se aplica un constraint NOT NULL a las columnas LAST_NAME y HIRE_DATE de la tabla EMPLOYEES. Debido a que esos constraints no tienen nombre, el servidor de Oracle crea nombres para ellos.

En este ejemplo utilizamos en constraint NOT NULL, en el instante que creamos nuestra tabla Sindicato. CREATE TABLE SINDICATO( IdSindicato Char(4)NOT NULL, NomSIndicato Varchar2(40)NOT NULL, TipoGestion Varchar(35)); Otro tipo de implementación del constraint NOT NULL, es modificando la tabla que ha sido creada anteriormente. describe categoria; Name Null Type ---------------------------------------------------------------------------------------- CATEGORIAID NOT NULL CHAR(18) UBICACIÓN CHAR(18) NOMBRECATEGORÍA CHAR(18) Modificamos la restricción de la tabla. ALTER TABLE CATEGORIA MODIFY(UBICACIÓN NOT NULL); CATEGORIAID NOT NULL CHAR(18) UBICACIÓN NOT NULL CHAR(18) NOMBRECATEGORÍA CHAR(18) Insertamos valores a nuestra tabla. INSERT INTO CATEGORIA VALUES ('AL12', ,'ALIMENTOS'); ERROR: Error starting at line 1 in command: INSERT INTO CATEGORIA VALUES ('AL12',,'ALIMENTOS') Error at Command Line:2 Column:15 Error report: SQL Error: ORA-00936: falta una expresión 00936. 00000 - "missing expression" *Cause: *Action: 1.3.2 CONSTRAINT UNIQUE Un constraint UNIQUE requiere que todos los valores en una columna o conjunto de columnas sean únicos esto es, dos filas de una tabla no pueden tener valores duplicados en la columna o conjunto de columnas especificadas. La columna o conjunto de columnas incluida en la definición del constraint UNIQUE es llamada llave única (unique key).

Si el constraint UNIQUE comprende más de una columna, el grupo de columnas es llamado llave única compuesta (composite unique key). Los constraints UNIQUE permiten el uso de valores nulos siempre y cuando no se hayan definido constraints NOT NULL para las mismas columnas. De hecho, cualquier número de filas puede incluir nulos para las columnas sin constraints NOT NULL puesto que los valores nulos no son iguales a nada. Un valor nulo en una columna (o en todas las columnas de una llave única compuesta) siempre satisface un constraint UNIQUE. Un constraint UNIQUE puede ser definido a nivel de columna o tabla. Una llave única compuesta es creada usando el nivel de definición de tabla.

DESCRIBE CLIENTE; Name Null Type -------------------------------------------------------------------------------- RUCDNICTE NOT NULL CHAR(18) DIRECCION CHAR(18) EMAIL CHAR(18) TELEFONO1 CHAR(18) RAZONSOCNOMBRE CHAR(18) TELEFONO2 CHAR(18)

En este caso realizamos dos restricciones UNIQUE a los campos de Email y RazonSocial. ALTER TABLE CLIENTE MODIFY (CONSTRAINT UNMAIL UNIQUE(EMAIL)) Insertamos algunas filas a nuestra tabla. INSERT INTO CLIENTE VALUES('43918908','LOSALIZOS 212','[email protected]','8762412','Armando Zamora','976457238'); 1 rows inserted INSERT INTO CLIENTE VALUES('439874232','EL SOL #212','[email protected]','9878712','Armando Sanchez','976897638'); ERROR: Error starting at line 1 in command: INSERT INTO CLIENTE VALUES('439874232','EL SOL #212','[email protected]','9878712','Armando Sanchez','976897638') Error report: SQL Error: ORA-00001: restricción única (SYSTEM.XPKCLIENTE) violada 00001. 00000 - "unique constraint (%s.%s) violated" *Cause: An UPDATE or INSERT statement attempted to insert a duplicate key. For Trusted Oracle configured in DBMS MAC mode, you may see this message if a duplicate entry exists at a different level. *Action: Either remove the unique restriction or do not insert the key. 1.3.3 CONSTRAINT PRIMARY KEY Un constraint PRIMARY KEY crea una llave primaria para la tabla. Solo una llave primaria puede ser creada por cada tabla. El constraint PRIMARY KEY es una columna o conjunto de columnas que identifica de forma única cada fila de una tabla. Estos constraints obligan valores únicos para la columna o combinación de columnas y aseguran que estas columnas no puedan contener valores nulos. Los constraints PRIMARY KEY pueden ser definidos a nivel de columna o a nivel de tabla. Una llave primaria compuesta es creada usando la definición a nivel de tabla. Una tabla puede tener solo un constraint PRIMARY KEY pero puede tener diversos constraints UNIQUE. CREATE TABLE FACTURA( NroFactura NUMBER(5), fechaEmision DATE,

MontoTotal INTEGER, Igv DECIMAL, CONSTRAINT IDFAC PRIMARY KEY(NroFactura) ); DESCRIBE FACTURA; Name Null Type ----------------------------------------------------------------------------------------------- NROFACTURA NOT NULL NUMBER(5) FECHAEMISION DATE MONTOTOTAL NUMBER(38) IGV NUMBER En el ejemplo anterior se define un constraint PRIMARY KEY en la columna NroFactura de la tabla FACTURA, el nombre del constraint es IDFACT. Insertamos valores a nuestra tabla. INSERT INTO FACTURA VALUES (012,'12/11/2008',1600,13); INSERT INTO FACTURA VALUES (012,'12/11/2008',1600,12) ERROR: SQL Error: ORA-00001: restricción única (SYSTEM.IDFAC) violada 00001. 00000 - "unique constraint (%s.%s) violated" *Cause: An UPDATE or INSERT statement attempted to insert a duplicate key. For Trusted Oracle configured in DBMS MAC mode, you may see this message if a duplicate entry exists at a different level. *Action: Either remove the unique restriction or do not insert the key.

1.3.4 CONSTRAINT FOREIGN KEY Un Foreign Key o llave foránea, es un constraint de integridad referencial que designa a una columna o combinación de columnas como una llave foránea estableciendo una relación entre una llave primaria o llave única en la misma tabla o en una tabla diferente. En el ejemplo anterior, DEPARTAMENT_ID está definida como llave foránea en la tabla EMPLOYEES (tabla dependiente o hija); esta referencia de la columna DEPARTMENT_ID de la tabla DEPARTMENTS es la tabla referenciada o tabla padre. Un valor de llave foránea debe corresponder con un valor existente en la tabla padre o ser nulo. Las llaves foráneas están basadas en los valores de los datos y su lógica pura, no física o apuntadores.

En el ejemplo anterior se define un constraint FOREIGN KEY en la columna DEPARTMENT_ID de la tabla EMPLOYEES, utilizando la sintaxis a nivel de tabla. El nombre del constraint es EMP_DEPTID_FK, La llave foránea también puede ser definida a nivel de columna, puesto que el constraint está basado en una columna. La sintaxis difiere puesto que la palabra reservada FOREIGN KEY no aparece, por ejemplo:

La llave foránea está definida en la tabla hija, y la tabla conteniendo la columna referenciada es la tabla padre. La llave foránea es definida al utilizar una combinación de las siguientes palabras reservadas:

� FOREIGN KEY es usada para definir la columna en la tabla hija como un constraint a nivel tabla.

� REFERENCES identifica la tabla y columna en la tabla padre.

� ON DELETE CASCADE indica que cuando la fila en la tabla padre es eliminada, las filas dependientes en la tabla hija pueden ser eliminadas.

� ON DELETE SET NULL convierte los valores de las llaves foráneas a nulos cuando el valor del padre es removido.

El comportamiento por defecto es llamado regla de restricción, cuando prohibimos la actualización o eliminación de un dato referenciado. Sin las opciones DELETE CASCADE o ON DELETE SET NULL, las filas en la tabla padre no pueden ser eliminadas si estas son referenciadas en la tabla hija.

1.3.5 CONSTRAINT CHECK El constraint CHECK define una condición que para cada fila debe satisfacerse. La condición puede utilizarse de manera similar a las condiciones de una consulta, con las siguientes excepciones:

� Las referencias a columnas CURRVAL, NEXTVAL, LEVEL y ROWNUM

� Llamadas a funciones SYSDATE, UID, USER y USERENV � Consultas que hagan referencia a valores en otras filas de la

misma tabla Una columna puede tener múltiples constraints CHECK las cuales pueden referenciarse en la definición de la columna. No se tienen límites en el número de constraints CHECK cuando se define una columna.

1 .4 Manipulación de Constraints

1.4.1 AÑADIENDO UN CONSTRAINT

Se pueden añadir constraints a tablas existentes con el uso de la sentencia ALTER TABLE y la cláusula ADD. Sintaxis:

� table es el nombre de la tabla � constraint es el nombre del constraint � type es el tipo de constraint � column es el nombre de la columna afectada por el constraint

En la sintaxis el nombre del constraint es opcional, aunque es recomendado. Si no se le especifica un nombre al constraint, el sistema genera uno. Normas a seguir

� Se puede añadir, eliminar, habilitar o deshabilitar un constraint, pero no se puede modificar su estructura.

� Se puede añadir un constraint NOT NULL a una columna existente con el uso de la cláusula MODIFY de la sentencia ALTER TABLE.

En el ejemplo anterior se crea un constraint FOREIGN KEY en la tabla EMPLOYEES. El constraint asegura que un jefe exista como un empleado válido en la tabla EMPLOYEES. 1.4.2 ELIMINANDO UN CONSTRAINT Para eliminar un constraint, se puede identificar el nombre del constraint desde las vistas del diccionario de datos SER_CONSTRAINTS y USER_CONS_COLUMNS. Entonces se usa la sentencia ALTER TABLE con la cláusula DROP. La opción CASCADE de la cláusula DROP ocasiona que todos los constraints dependientes sean borrados. Sintaxis:

Ejemplo:

1.4.3 DESHABILITANDO UN CONSTRAINT Se puede deshabilitar un constraint sin eliminarlo o recrearlo con el uso de la sentencia ALTER TABLE y la cláusula DISABLE. Sintaxis

Normas a seguir:

� Se puede usar la cláusula DISABLE en las sentencias CREATE TABLE y ALTER TABLE.

� La cláusula CASCADE deshabilita las dependencias de los constraints de integridad.

� Deshabilitar un constraint único o llave primaria, elimina el índice único.

Ejemplo:

1.4.4 HABILITANDO UN CONSTRAINT Se puede habilitar un constraint sin eliminarlo o recrearlo utilizando la sentencia ALTER TABLE con la cláusula ENABLE. Sintaxis:

Donde:

� table es el nombre de la tabla. � constraint es el nombre del constraint.

Normas a seguir: � Si se habilita un constraint, este aplica a todos los datos de la

tabla. Todos los datos de la tabla deben satisfacer el constraint.

� Si se habilita un constraint PRIMARY KEY o UNIQUE key, se crea un índice único o de llave primaria automáticamente.

� Se puede usar la cláusula ENABLE en las sentencias CREATE TABLE y ALTER TABLE.

� Habilitar un constraint de llave primaria que ha sido deshabilitado con la opción CASCADE no habilita ninguna llave foránea dependiente de la llave primaria.

Ejemplo:

2 – CREACION Y USO DE SECUENCIAS Una secuencia sirve para generar automáticamente números distintos. Se utilizan para generar valores para campos que se utilizan como clave forzada (claves cuyo valor no interesa, sólo sirven para identificar los registros de una tabla). Es una rutina interna de Oracle la que realiza la función de generar un número distinto cada vez. Las secuencias se almacenan independientemente de la tabla, por lo que la misma secuencia se puede utilizar para diversas tablas. 2.1 Creación de Secuencias

Donde:

a) Secuencia. Es el nombre que se le da al objeto de secuencia b) INCREMENT BY. Indica cuánto se incrementa la secuencia cada

vez que se usa. Por defecto se incrementa de uno en uno c) START WITH. Indica el valor inicial de la secuencia (por defecto 1) d) MAXVALUE. Máximo valor que puede tomar la secuencia. Si no

se toma e) NOMAXVALUE que permite llegar hasta el 1027 f) MINVALUE. Mínimo valor que puede tomar la secuencia. Por

defecto -1026. g) CYCLE. Hace que la secuencia vuelva a empezar si se ha llegado al máximo valor.

Ejemplo:

CREATE SEQUENCE Sec_Numeros START WITH 5 INCREMENT BY 2 MAXVALUE 100 MINVALUE 5 En la primera ejecución obtenemos: SELECT Sec_Numeros.NEXTVAL FROM DUAL; NEXTVAL ---------------------- 5 En la segunda ejecución obtenemos: SELECT Sec_Numeros.NEXTVAL FROM DUAL; NEXTVAL ---------------------- 7 LA Ejecucion del comando CURRVAL nos retorna siempre el valor actual de la secuecia SELECT Sec_Numeros.CURRVAL FROM DUAL; CURRVAL ---------------------- 7 2.2 Ver Lista de Secuencias La vista del diccionario de datos USER_SEQUENCES muestra la lista de secuencias actuales. La columna LAST_NUMBER muestra cual será el siguiente número de secuencia disponible. 2.3 Uso de la Secuencia Los métodos NEXTVAL y CURRVAL se utilizan para obtener el siguiente número y el valor actual de la secuencia respectivamente. Ejemplo : SELECT Sec_Numeros.NEXTVAL FROM DUAL; Eso muestra en pantalla el siguiente valor de la secuencia. Realmente NEXTVAL incrementa la secuencia y devuelve el valor actual. CURRVAL

devuelve el valor de la secuencia, pero sin incrementar la misma. Ambas funciones pueden ser utilizadas en:

a) Una consulta SELECT que no lleve DISTINCT, ni grupos, ni sea parte de una vista, ni sea subconsulta de otro SELECT, UPDATE o DELETE.

b) Una subconsulta SELECT en una instrucción INSERT. c) La cláusula VALUES de la instrucción INSERT. d) La cláusula SET de la instrucción UPDATE.

No se puede utilizar (y siempre hay tentaciones para ello) como valor para la cláusula DEFAULT de un campo de tabla. Su uso más habitual es como apoyo al comando INSERT:

2.3 Modificar Secuencias Se pueden modificar las secuencias, pero la modificación sólo puede afectar a los futuros valores de la secuencia, no a los ya utilizados. Sintaxis:

2.4 Borrar Secuencias Lo hace el comando DROP SEQUENCE seguido del nombre de la secuencia a borrar. 3 – CREACION Y USO DE VISTAS. Una vista no es más que una consulta almacenada a fin de utilizarla tantas veces como se desee. Una vista no contiene datos sino la instrucción SELECT necesaria para crear la vista, eso asegura que los datos sean coherentes al utilizar los datos almacenados en las tablas. Las vistas se emplean para:

� Realizar consultas complejas más fácilmente � Proporcionar tablas con datos completos � Utilizar visiones especiales de los datos

Hay dos tipos de vistas: 1. SIMPLES. Las forman una sola tabla y no contienen funciones de

agrupación. Su ventaja es que permiten siempre realizar operaciones DML sobre ellas.

2. COMPLEJAS. Obtienen datos de varias tablas, pueden utilizar funciones de agrupación. No siempre permiten operaciones DML.

3 .1 Creación De Vistas

a) OR REPLACE. Si la vista ya existía, la cambia por la actual. b) FORCE. Crea la vista aunque los datos de la consulta SELECT no

existan. c) Vista. Nombre que se le da a la vista. d) Alias. Lista de alias que se establecen para las columnas

devueltas por la consulta. e) Select en la que se basa esta vista. El número de alias debe

coincidir con el número de columnas devueltas por SELECT. f) WITH CHECK OPTION. Hace que sólo las filas que se muestran

en la vista puedan ser añadidas (INSERT) o modificadas (UPDATE). La restricción que sigue a esta sección es el nombre que se le da a esta restricción de tipo Check Option.

g) WITH READ ONLY. Hace que la vista sea de sólo lectura. Permite grabar un nombre para esta restricción.

Lo bueno de las vistas es que tras su creación se utilizan como si fueran una tabla. Ejemplo:

La creación de la vista del ejemplo es compleja ya que hay relaciones complicadas, pero una vez creada la vista, se le pueden hacer consultas como si se tratara de una tabla normal. Incluso se puede utilizar el comando DESCRIBE sobre la vista para mostrar la estructura de los campos que forman la vista. 3.2 Ejecución de comandos DML sobre Vistas Las instrucciones DML ejecutadas sobre las vistas permiten añadir o modificar los datos de las tablas relacionados con las filas de la vista. Ahora bien, no es posible ejecutar instrucciones DML sobre vistas que:

� Utilicen funciones de grupo (SUM, AVG,...) � Usen GROUP BY o DISTINCT � Posean columnas con cálculos (PRECIO * 1.16)

Además no se pueden añadir datos a una vista si en las tablas referencias en la consulta SELECT hay campos NOT NULL que no aparecen en la consulta (es lógico ya que al añadir el dato se tendría que añadir el registro colocando el valor NULL en el campo). Ejemplo (Sobre la vista anterior):

3.3 Mostrar la lista de Vistas La vista del diccionario de datos USER_VIEWS permite mostrar una lista de todas las vistas que posee el usuario actual. Es decir, para saber qué vistas hay disponibles se usa:

3.4 Borrar Vistas Se utiliza el comando DROP VIEW:

4 - CREACION Y USO DE INDICES Los índices son esquemas que hacen que Oracle acelere las operaciones de consulta y ordenación sobre los campos a los que el índice hace referencia. Se almacenan aparte de la tabla a la que hace referencia, lo que permite crearles y borrarles en cualquier momento. Lo que realizan es una lista ordenada por la que Oracle puede acceder para facilitar la búsqueda de los datos. Cada vez que se añade un nuevo registro, los índices involucrados se actualizan a fin de que su información esté al día. De ahí que cuantos más índices haya, más le

cuesta a Oracle añadir registros, pero más rápidas se realizan las instrucciones de consulta. La mayoría de los índices se crean de manera implícita, como consecuencia de las restricciones PRIMARY KEY (que obliga a crear un índice único sobre los campos clave) ,UNIQUE (crea también un índice único) y FOREIGN KEY (crea un índice con posibilidad de repetir valores, índice con duplicados). Estos son índices obligatorios, por los que les crea el propio Oracle. 4.1 Creación de Índices Aparte de los índices obligatorios comentados anteriormente, se pueden crear índices de forma explícita. Éstos se crean para aquellos campos sobre los cuales se realizarán búsquedas e instrucciones de ordenación frecuente. Sintaxis:

El ejemplo crea un índice para los campos apellido1, apellido2 y nombre. Esto no es lo mismo que crear un índice para cada campo, este índice es efectivo cuando se buscan u ordenan clientes usando los tres campos (apellido1, apellido2, nombre) a la vez. Se aconseja crear índices en campos que:

a) Contengan una gran cantidad de valores. b) Contengan una gran cantidad de nulos. c) Son parte habitual de cláusulas WHERE, GROUP BY u ORDER

BY. d) Son parte de listados de consultas de grandes tablas sobre las

que casi siempre se muestran como mucho un 4% de su contenido.

No se aconseja en campos que: a) Pertenezcan a tablas pequeñas. b) No se usan a menudo en las consultas. c) Pertenecen a tablas cuyas consultas muestran más de un 6% del

total de registros. d) Pertenecen a tablas que se actualizan frecuentemente. e) Se utilizan en expresiones.

Los índices se pueden crear utilizando expresiones complejas:

Esos índices tienen sentido si en las consultas se utilizan exactamente esas expresiones. 4.2 Lista de Índices Para ver la lista de índices se utiliza la vista USER_INDEXES. Mientras que la vista USER_IND_COLUMNS Muestra la lista de columnas que son utilizadas por índices. 4.3 Borrar Índices La instrucción DROP INDEX seguida del nombre del índice permite eliminar el índice en cuestión. 5 BIBLIOGRAFIA

a) http://alarcos.inf-cr.uclm.es/doc/bda/doc/lab/BDa-p2.pdf

b) http://blearning.itmina.edu.mx/dep/sada/Ingenieria%20en%20Sistemas%20Computacionales/5to%20Semestre/Taller%20de%20Base%20de%20Datos/taller_bd/sqlprocedual.pdf

c) http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r

23532.PDF

d) http://www.jorgesanchez.net/bd/oracleSQL.pdf

e) http://www.aposada.net/downloads/documentos/bd/Plus%20b%C3%A1sico.PDF

f) http://leebyte.iespana.es/cursos/bd/oracle%20curso%206%20lecciones.pdf