You are on page 1of 75

CREACIN DEL ESQUEMA

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

APLICACIN DE UN MODELO DE DATOS


EN LA BASE DE DATOS RELACIONAL
Transformacin un modelo conceptual de E-R
en un MODELO LGICO RELACIONAL de la Base
de Datos
Creacin de los objetos componentes
esquema de la base de datos:

del

TABLAS
INDICES
CONSTRAINTS
Aplicacin de
RELACIONAL
SNPP - San Lorenzo

las

reglas

Oracle - Inst. Zulma Argello

de

Integridad
2

NO OLVIDAR LAS REGLAS DE


NORMALIZACIN:
Formas Normales

Descripcin

Primera Forma Normal

Ningn atributo puede ser multivalorado

Segunda Forma Normal

Todos los atributos deben depender


totalmente de la clave primaria completa
y no solamente de parte de ella

Tercera Forma Normal

Deben evitarse dependencias transitivas

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

Constraints de integridad

Asegura consistencia de los datos


El Servidor de Base de Datos se encarga de hacer cumplirlas
Se aplican para las claves primarias (Primary Key), y las claves ajenas
(Foreign Key)

Regla de Integridad

Descripcin

De las Entidades

La clave primaria debe ser UNICA, NO NULA


y MNIMA

Referencial

Las campos de la clave extranjera deben ser


TODOS NULOS o coincidir con la clave
primaria de la tabla referida

Columna

Los valores de una columna deben coincidir


con el tipo de dato definido

Definidas por el usuario Los valores deben concordar con las reglas
del negocio
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

Creacin Tablas: Sintaxis


CREATE TABLE [schema.]tabla
(columna tipo_dato [DEFAULT expr]
[constraint_columna],
...
[constraint_tabla]);

Usted debe tener privilegios especficos:


- CREATE TABLE
- Un rea del almacenamiento
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

Reglas para los nombres de tablas y


columnas:
o
o
o
o
o

Deben empezar con una letra


Deben tener 1 a 30 de longitud
Pueden contener solo los juegos de
caracteres A-Z, a-z, 0-9, _, $ y #
No se puede duplicar el nombre de otro
objeto que pertenece al mismo usuario
No debe ser una palabra reservada de
ORACLE

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

La Opcin DEFAULT
Se puede especificar un valor predefinido por una
columna durante una insercin.
... Fecha_inicio DATE DEFAULT SYSDATE,...

Los valores legales son


generalmente valores
literales, expresiones, o funciones SQL
como
SYSDATE o USER.
No se puede poner por default el nombre de otra
columna.
Los valores predefinidos (default) deben emparejar
el tipo de dato de la columna.
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

Reglas para los nombres


Los nombres DEBEN comenzar con letras.
El nombre puede ser de 1 a 30 caracteres
Puede contener slo caracteres vlidos: AZ, az, 09,
_ , $, y #
No debe duplicarse el nombre de otro objeto posedo por
el mismo usuario
No se pueden utilizar palabras reservadas de ORACLE

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

Tipos de datos para las columnas (repaso)


VARCHAR2(tamao)

String de caracteres de longitud variable. El tamao mximo es de 4.000


bytes y mnimo de 1

NUMBER(p,s)

Numrico con p posicions y escala s. La precisin p vara de 1 a 38. La


escala de -84 a 127.

LONG

Datos de caracteres. Longitud de hasta 2 GB.

DATE

Fecha. Desde el 1de Enero de 4721 AC al 31 de Diciembre de 9999 DC

TIMESTAMP (precisin seg.)

Fecha en aos, meses, das, minutos, segundos. La precisin es el nmero


de dgitos de la parte fraccional de segundos (0 a 9 y por defecto 6)

CHAR(tamao)

Representa caracteres de longitud fija. El tamao mximo es de 2.000 bytes


y mnimo 1.

BLOB

Binary Large Object (Objeto grande binario). Mxima longitud es de 4 GB

CLOB

Objeto grande de caracteres. Hasta 4 GB

BFILE

Contiene la localizacin de un archivo binario almacenado fuera de la base


de datos. Tamao mximo de 4GB

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

Constraints
Establecen restricciones a nivel de tabla
Previene eliminaciones de una tabla si hay
dependencias.
Los tipos de constraints siguientes son vlidos en
Oracle:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

10

Guas para crear constraints


Ponga nombre a los constraints, de lo contrario el
sistema les pone por defecto un nombre como SYS_Cn.
El constraint puede ser creado:
Durante la creacin de la tabla.
Puede agregarse una vez que la tabla ha sido creada.
Se pueden definir constraints a nivel de la columna o de
la tabla.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

11

SINTAXIS
A nivel de columna:
column [CONSTRAINT constraint_name] constraint_type,

A nivel de tabla:
column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

12

El constraint NOT NULL

Impide los valores nulos para una columna


Se define a nivel de columna

Ejemplo:
CREATE TABLE
friend...
phone VARCHAR2(15) NOT NULL,...
last_name VARCHAR2(25)
CONSTRAINT friend_last_name_nn NOT NULL,...

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

13

El constraint UNIQUE
o Impide que una columna o combinacin de columnas tenga valores
repetidos. El propsito del constraint UNIQUE es ligeramente diferente al
del PRIMARY KEY. Las claves nicas son atributos de la entidad que no
admiten duplicacin, en tanto que la clave primaria no tiene otra funcin
que identificar cada fila unvocamente.
o Permite valores nulos solamente si la clave UNIQUE est basada en una
sola columna
o Se define a nivel de COLUMNA o a nivel de TABLA
o Automticamente crea un ndice nico.
... telefono
VARCHAR2(10)
CONSTRAINT s_emp_telefono_uk UNIQUE,...
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

14

El constraint PRIMARY KEY


Crea una Clave primaria para la TABLA. Obviamente se
permite una sola clave primaria para cada tabla.
Automticamente las columnas se crean como NOT NULL.
Se define a nivel de la tabla o a nivel de columnas
Automticamente crea un ndice UNIQUE.

... id
NUMBER(7)
CONSTRAINT p_personal_id_pk PRIMARY KEY,...

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

15

El constraint FOREIGN KEY


Designa una columna o combinacin de columnas como una
clave extranjera
Establece una relacin entre la clave primaria en la misma
tabla o entre las tablas
Puede definirse a nivel de tabla o columna.
Debe emparejar un valor existiendo en la tabla del padre o
debe ser NULO.
... Id_departamento NUMBER(7)
CONSTRAINT p_personal_dept_id_fk
REFERENCES p_departamento(id),...
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

16

Clusulas de FOREIGN KEY


FOREIGN KEY

Define una columna o serie de columnas en la tabla hija. Se


usa cuando se define a nivel de tabla.
REFERENCES

Identifica la tabla y columna en la tabla del padre


ON DELETE CASCADE

Permite borrar registros en la tabla del padre y de las filas


dependientes en la tabla hija.
ON DELETE SET NULL

Anula los valores de las columnas definidas como


FOREIGN KEY en las tablas hijas
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

17

El constraint CHECK
Define una condicin que debe satisfacer cada columna
Existen expresiones no permitidas:
- Referencias al pseudo columnas CURRVAL,
NEXTVAL, ROWNUM
- Llamadas a SYSDATE, Identificador nico
(UID), USER
- Consultas que se refieren a otros valores en
otras filas
Se define a nivel de tabla o al nivel de columna
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

18

Creacin Tabla: Ejemplo


SQL> CREATE TABLE p_departamento
2
3
4
5
6
7
8
9
10

(id
NUMBER(7)
CONSTRAINT p_departamento_id_pk PRIMARY KEY,
descripcion
VARCHAR2(25)
CONSTRAINT p_departamento_nombre_nn NOT NULL,
id_localidad NUMBER(7)
CONSTRAINT p_departamento_localidad_id_fk REFERENCES
p_localidad (id),
CONSTRAINT s_dept_desc_localidad_id_uk UNIQUE
(descripcion, id_localidad));

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

19

Creacin de Table usando un Subquery:


Ejemplo
Cree una tabla que contiene a todos los empleados del dpto.
nmero 4 en la tabla de P_PERSONAL.
CREATE TABLE emp_41
AS
SELECT
id, apellido, fecha_inicio
FROM
p_personal
WHERE id_departamento = 4;

No se olvide de que slo se copia el constraint NOT NULL.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

20

Tablas dentro del Servidor de Base de Datos.


Tablas del usuario
- La coleccin de tablas creadas y mantenidas por el usuario
- Contienen informacin del usuario

Diccionario de los datos


- La coleccin de tablas creadas y mantenidas por el Servidor
de Base de Datos
- Contienen informacin de la base de datos

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

21

Descripcin del Diccionario de Datos.


Se crea en el momento de la creacin de la BD
Es mantenido y actualizado por el Servidor de Base de Datos.
Las vistas del Diccionario de Datos pueden ser consultadas
La informacin que se guarda en el Diccionario de Datos es la
siguiente:
- Nombres de usuarios del Servidor de Base de Datos
- Los privilegios concedidos a los usuarios
- Nombres de los objetos de una base de datos
- Constraints de la tabla
- Informacin de auditoria.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

22

Consultas al diccionario de la BD
Cuatro clases de vistas (prefijos)
USER Objetos posedos por usuario
ALL Todos los objetos a los que el usuario tiene acceso
DBA Todos los objetos
V$
Valores actuales del Servidor
Otras vistas
DICTIONARY

Descripcin del diccionario de tablas y vistas

TABLE_PRIVILEGES

privilegios sobre tablas para las cuales el usuario es


propietario, o quien otorga o recibe el privilegio

IND

Los sinnimos para los USER_INDEXES

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

23

CONSULTAS AL DICCIONARIO
Listando todos las vistas del DD a los que el usuario tiene
acceso
SQL> SELECT *
2 FROM

DICTIONARY;

Desplegando la estructura de la vista de USER_OBJECTS.


SQL> DESCRIBE user_objects

Desplegando todos los nombres de objetos que usted posee.


SQL> SELECT object_name
2 FROM
user_objects
3 WHERE
object_type = 'TABLE';
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

24

Consultas al Diccionario de Datos: Ejemplos


Busque tablas de diccionario de datos en temas
especficos en la columna de los COMENTARIOS de la
tabla del DICCIONARIO.

SQL> SELECT
2 FROM
3 WHERE

SNPP - San Lorenzo

*
dictionary
LOWER(comments) LIKE '%grant%';

Oracle - Inst. Zulma Argello

25

Viendo los Constraints


Consulte la tabla de USER_CONSTRAINT para ver todas las
definiciones de constraints y nombres.
Ejemplo
Verifique los constraints en la tabla de P_PERSONAL.
SQL> SELECT constraint_name, constraint_type,
2
search_condition, r_constraint_name
3 FROM
user_constraints
4

SNPP - San Lorenzo

WHERE

table_name = 'P_PERSONAL';

Oracle - Inst. Zulma Argello

26

Viendo las Columnas Asociadas con


Constraints
Vea las columnas asociadas con los nombres de constrainst
en la vista USER_CONS_COLUMNS.
Esta vista es especialmente til si sus constraints usan los
nombres asignados por el sistema.
SQL> SELECT constraint_name, column_name
2 FROM
user_cons_columns
3

SNPP - San Lorenzo

WHERE

table_name = 'P_PERSONAL';

Oracle - Inst. Zulma Argello

27

ALTERACIN DE OBJETOS

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

28

ALTERACIN DE OBJETOS:

El comando ALTER TABLE, le permite:


Agregar y modificar columnas.
Agregar o quitar constraints.
Habilitar o desactivar constraints.
Eliminar una columna
El comando DROP TABLE: Elimina una tabla
Otras rdenes que afectan una tabla son: RENAME,
TRUNCATE, COMMENT.
Todas estas sentencias tienen un COMMIT automtico.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

29

Adicionando una Columna: Sintaxis


La nueva columna se agrega con la clusula ADD.
Se puede predefinir un valor para la nueva columna.
Puede especificar la restriccin NOT NULL para obligar a que
la columna tenga un valor
ALTER TABLE table
ADD
(column datatype [DEFAULT expr][NOT NULL]
[, column datatype]...);

Nota: Si la tabla ya contiene filas, cuando se agrega una columna, entonces la


columna es inicialmente nula, por lo que no se puede establecer un constraint
de NOT NULL al inicio
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

30

Adicionando una Columna:


Ejemplo
Adicione una columna COMENTARIO a la tabla de P_LOCALIDAD.
SQL> ALTER TABLE p_localidad
2 ADD
(comentario VARCHAR2(255));
Table altered.

La nueva columna se vuelve la ltima columna.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

31

Modificando una Columna: Sintaxis


Se puede cambiar: el tipo de dato de una columna, el tamao, el
valor predefinido, y el constraint NOT NULL.

ALTER TABLE tabla


MODIFY
(columna tipo_dato [DEFAULT expr][NOT NULL]
[, columna tipo_dato]...);

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

32

Modificaciones posibles en una columna


Aumentar el nmero de dgitos y la precisin de una columna
numrica
Aumentar el ancho de una columna alfanumrica
Disminuir el ancho de una columna si la columna contiene
valores nulos o si la tabla no tiene ninguna fila o si los valores
no sobrepasan el nuevo ancho.
Cambiar el valor predefinido para las posteriores inserciones.
Definir un constraint NOT NULL (slo si no hay valores en la
columna).
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

33

Modificando una Columna: Ejemplo


El tipo de datos puede modificarse si la columna no contiene
valores, excepto cuando se cambia de CHAR a VARCHAR2
El valor por defecto afecta solamente las inserciones
posteriores.
Ejemplo
Extienda la longitud mxima de la columna TTULO en la tabla
de P_PERSONAL a 50 caracteres.
SQL> ALTER TABLE p_personal
2 MODIFY
(cargo VARCHAR2(50));
Table altered.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

34

Borrando una Columna: Sintaxis


Desde las ltimas versiones de ORACLE es posible borrar una
columna a la vez.
ALTER TABLE tabla
DROP
(columna )

Cuando la columna se borra:


Se borran los ndices que incluyen a dicha columna
Una columna no puede ser borrada si forma parte de un
constraint o de una clave, a no ser que se agregue la opcin
CASCADE.
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

35

La opcin SET UNUSED


Borrar una columna puede llevar mucho tiempo si la misma
tiene muchos valores. En ese caso, conviene establecer que la
columna ya no ser utilizada hasta que se pueda borrar en un
momento de menor acceso
ALTER TABLE tabla
SET UNUSED (columna);
o bien
ALTER TABLE <tabla>
SET UNUSED COLUMN <columna>;

Cuando se marca una columna como UNUSED ya no es


accesible con el comando SELECT
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

36

Borrando columnas marcadas como


UNUSED
Para borrar las columnas marcadas como UNUSED se utiliza
el siguiente comando:
ALTER TABLE <tabla>
DROP UNUSED COLUMNS;

Las columnas no utilizadas pueden verse en


USER_UNUSED_COL_TABS

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

37

Adicionado un Constraint: Sintaxis


SQL> ALTER TABLE table
2 ADD [CONSTRAINT nombre_constraint] tipo (<columna>);

Adiciona o borra, pero no modifica un constraint. .


Para adicionar un constraint NOT NULL se puede usar la
clusula MODIFY.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

38

Adicionando un Constraint: Ejemplo


Adicione un constraint de tipo FOREIGN KEY a la tabla de
P_PERSONAL que indique que un gerente ya debe existir como
un empleado vlido en la Tabla de P_PERSONAL.
SQL> ALTER TABLE
p_personal
2 ADD CONSTRAINT s_per_superior_id_fk
3 FOREIGN KEY (id_superior)
4 REFERENCES
p_personal(id);
Table altered.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

39

Borrando un Constraint: Ejemplo


Borrar el constraint de integridad referencial con la tabla P_PERSONAL.

SQL> ALTER TABLE

p_personal

2 DROP CONSTRAINT
Table altered.

s_per_superior_id_fk;

Borre el constraint PRIMARY KEY en la tabla de P_DEPARTAMENTO y


consecuentemente el FOREIGN KEY asociado en la columna de
P_PERSONAL.
SQL> ALTER TABLE
2 DROP
Table altered.

SNPP - San Lorenzo

p_departamento
PRIMARY KEY CASCADE;

Oracle - Inst. Zulma Argello

40

Desactivar Constraints
La sentencia ALTER TABLE posee la clusula DISABLE que
permite deshabilitar el funcionamiento una regla de integridad.
Aplique la opcin CASCADE para desactivar constraint
dependientes.
SQL> ALTER TABLE
p_personal
2 DISABLE CONSTRAINT
pk_personal CASCADE;
Table altered.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

41

Activar Constraints
Active un constraint actualmente desactivado en la definicin
de la tabla usando la clusula ENABLE.
SQL> ALTER TABLE
p_personal
2 ENABLE CONSTRAINT pk_personal;
Table altered.

Si se habilita un constraint UNIQUE o PRIMARY KEY, se crea


automticamente un ndice.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

42

Borrando una Tabla: Sintaxis


DROP TABLE nombre_tabla [CASCADE CONSTRAINTS];
DROP TABLE nombre_tabla PURGE;

o
o
o
o

Se borra la tabla y todas las filas de la misma


Se confirman las transacciones pendientes
Todos los ndices se borran.
La opcin CASCADE CONSTRAINT elimina los
constraints de integridad dependientes.
o No se puede realizar un rollback de esta sentencia
o A partir de la versin 10g, la opcin PURGE libera
inmediatamente el espacio en el TABLESPACE.
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

43

Sentencia FLASHBACK TABLE


Repara una tabla de modificaciones accidentales
Restaura una tabla a un punto anterior en el tiempo
Es fcil de usar y ejecutar
FLASHBACK TABLE nombre_tabla [, nombre_tabla]..
TO {TIMESTAMP | SNC } expresin
[{ENABLE | DISABLE} TRIGGERS ];

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

44

Sentencia FLASHBACK TABLE Ej.


DROP TABLE nuevo_emp;
SELECT original_name, operation, droptime
FROM recyclebin;
FLASHBACK TABLE nuevo_emp TO BEFORE DROP;

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

45

Cambiando el Nombre de un Objeto


o

Ejecute la orden RENAME para cambiar el nombre de una


tabla, vista, secuencia, o sinnimo.
SQL> RENAME p_personal TO p_personal_otro;
Table renamed.

Usted debe ser el dueo del objeto.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

46

Truncando una Tabla: sentencia TRUNCATE


o
o
o

Elimina todas las filas de una tabla.


Libera el espacio utilizado por esa tabla.
Es una orden DDL, por lo tanto ejecuta un COMMIT
automtico
SQL> TRUNCATE TABLE p_suministro;
Table truncated.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

47

Comentarios de la tabla
Usted puede agregar comentarios a una tabla o columna usando
la orden COMMENT.
SQL> COMMENT ON TABLE p_personal
2

IS 'Informacion del Empleado';

Comment created.

Para limpiar el comentario use el string que simboliza NULL (' ').
Pueden verse comentarios a travs de las siguientes vistas del
Diccionario de Datos:

ALL_COL_COMMENTS
USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

48

Creacin de ndices

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

49

LOS NDICES
Son objetos de la Base de Datos, utilizados por la Base de
Datos para acelerar la recuperacin de filas a travs de la
utilizacin de punteros.
Los ndices reducen el tiempo de utilizacin de los
dispositivos de entrada/salida, pues utiliza mtodos
especiales de acceso
Los ndices son totalmente independientes de las tablas
Una vez que se definen , el Servidor se encarga de utilizarlos
y actualizarlos apropiadamente.
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

50

De qu manera se crean los


ndices?
DE MANERA AUTOMTICA
Cuando se define un PRIMARY KEY o una
restriccin UNIQUE, el ORACLE genera
automticamente un ndice
MANUALMENTE
Los usuarios pueden crear ndices sobre una
o ms columnas para acelerar el acceso a
las filas.
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

51

Utilizacin de los ndices

Bsicamente, no se requiere intervencin del usuario para


que el Servidor utilice los ndices.

El Servidor utiliza 2 mtodos de optimizacin

Basado en reglas

Basado en costo

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

52

Tipos de ndices en ORACLE


Lectura/Escritura
- B-tree (rboles binarios)
- Basado en funciones
Slo lectura (read only)
- Bitmap
- Bitmap join
- Index-organized table (algunas veces usados
en lectura/escritura)
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

53

ESTRUCTURA DE LOS NDICES


La mayora de los ndices utilizan
estructura de rboles B (B*tree).

la

Un rbol B es un ndice de multinivel


compuesto de los valores de las columnas y
punteros que son el identificador de las filas
(ROWIDs) que se organizan en pginas o
ramas.
El algoritmo consiste en buscar a travs de
las ramas del rbol hasta que se alcanza las
hojas con el valor que contiene el puntero.
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

54

Ejemplo de la estructura de
rboles B*Tree

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

55

TIPOS DE NDICES B*Tree


NICO: asegura
valores nicos en la
columna y se generan automticamente
al crear una PK o una restriccin UNIQUE.
NO NICOS: cuyo propsito es acelerar
las consultas
De una sola columna
De mltiples columnas concatenadas

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

56

Reglas con rboles B*Tree


Hay que respetar una serie de convenios.
En caso de que un ndice no sea UNIQUE, si
mltiples filas poseen el mismo valor de la clave
en la estructura del ndice se repetirn los valores
de dichas claves.
Si una fila posee para todas las columnas de la
clave el valor NULL, en el ndice no existir una
entrada correspondiente a dicha fila.
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

57

Ejemplo
SINTAXIS DE LA CREACIN DE UN NDICE:
CREATE INDEX index
ON table (column[, column]...);

Si se quisiera mejorar el acceso por la columna


APELLIDO en la tabla P_PERSONAL:
SQL> CREATE INDEX
p_per_apellido_idx
2 ON
p_personal(apellido);
Index created.
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

58

Se puede crear un ndice cuando se crea una


tabla

CREATE TABLE NUEVO_EMP


(id_emp NUMBER(6) PRIMARY KEY USING INDEX
(CREATE INDEX emp_idx ON
NUEVO_EMP(id_emp)),
nombre VARCHAR2(20),
apellido VARCHAR2(20));

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

59

ndices basados en Funciones


Una funcin puede estar basada en expresiones
La expresin es construida con las columnas de la
tabla, constantes, funciones SQL, y funciones
definidas por el usuario
CREATE INDEX upper_emp_idx
ON NUEVO_EMP(UPPER(nombre));

Nota: el parmetro de inicializacin


QUERY_REWRITE_ENABLED debe estar a TRUE
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

60

ndices BITMAP

Son efectivos para columnas simples con poca cardinalidad, esto es


debe tener pocos valores distintos. Son ms rpidos que los B*-Tree en
entornos de read-only y almacenan valores de 0 1 en el ROWID.

Se crea una estructura bi-dimensional, que consiste en cada valor del


ndice multiplicado por el nmero de filas en la tabla.

En el momento de la recuperacin de la fila, Oracle descomprime el


mapa de bits en los buffers de datos de memoria RAM, para que pueda
ser rpidamente escaneados para valores coincidentes. Estos valores
coincidentes se entregan a Oracle en la forma de una lista de Fila-ID, y
estos valores ID de fila pueden acceder directamente a la informacin
requerida

Facultad
SNPP
- San
Politcnica
Lorenzo

OracleBase
- Inst.
deZulma
Datos Argello
II

61

Cundo crear un ndice:

La columna es usada frecuentemente en la clusula


WHERE y en las condiciones de JOIN.
Si la columna tiene un rango de valores bien amplio
Si se presupone que la columna tiene muchos valores
nulos.
Cuando 2 o ms columnas son usadas juntas en
operaciones de JOIN entonces pueden utilizarse ndices
compuestos
Cuando la tabla es grande y se espera que la mayora de
los queries recuperen una mnima cantidad de filas (por
debajo del 5%).
La utilizacin de muchos ndices no siempre permite
acelerar las consultas.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

62

CUANDO NO CREAR UN NDICE


Cuando la tabla es muy pequea
Las
columnas
no
son
utilizadas
frecuentemente en las consultas
La mayora de las consultas recuperan la
totalidad o la mayor parte de las filas
(mucho ms del 5%)
Cuando la tabla es actualizada con mucha
frecuencia.
La columna se referencia como parte de una
expresin
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

63

CONSULTA DE LOS NDICES DE UNA


TABLA:
En la vista USER_INDEXES puede ver los ndices
La vista USER_IND_COLUMNS contiene el nombre del
ndice y que columnas lo conforman
SQL> SELECT ic.index_name, ic.column_name,
2
ic.column_position col_pos,ix.uniqueness
3
4
5

FROM
WHERE
AND

SNPP - San Lorenzo

user_indexes ix, user_ind_columns ic


ic.index_name = ix.index_name
ic.table_name = P_PERSONAL';

Oracle - Inst. Zulma Argello

64

ELIMINACIN DEL NDICE


Se elimina con la sentencia DROP
SQL> DROP INDEX s_emp_apellido_idx;
Index dropped.

Slo se puede eliminar un ndice si se es


propietario o si se tiene el privilegio
DROP ANY INDEX.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

65

CREACIN DE
SECUENCIAS

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

66

SECUENCIAS
Genera automticamente una numeracin nica y
consecutiva
Como otros objetos, puede ser compartido
Se usa tpicamente para generar los valores de una clave
primaria permitiendo evitar programar dicha generacin
Cuando se indica que resida en el cach de memoria, se
mejora la eficiencia del acceso.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

67

SINTAXIS
CREATE SEQUENCE nombre
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

68

Creando una Secuencia:


Ejemplo
Cree la secuencia P_DEPT_ID para ser usado para
la clave primaria de la tabla P_DEPARTAMENTO.
Esta secuencia no ser cclica
SQL> CREATE SEQUENCE p_dept_id
2
INCREMENT BY 1
3
START WITH 51
4
MAXVALUE 9999999
5
NOCACHE
6
NOCYCLE;
Sequence created.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

69

Confirmando Secuencias
En la tabla
USER_SEQUENCES del
Diccionario podr verificar los parmetros de
la secuencia
SQL> SELECT sequence_name, min_value,
2
max_value, increment_by,
3
last_number
4 FROM
user_sequences;

La columna LAST_NUMBER despliega el


prximo nmero disponible de la secuencia.
SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

70

Las pseudo columnas


NEXTVAL y CURRVAL
NEXTVAL devuelve el prximo valor disponible
de la secuencia
Devuelve un nico valor cada vez que es
referenciado, no importa si lo usan usuarios
diferentes.
CURRVAL obtiene el valor actual de la secuencia
CURRVAL no tendr un valor a no ser que
anteriormente se haya ejecutado un NEXTVAL

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

71

Usando la Secuencia: Ejemplos


Inserte un nuevo departamento nombrado
"Finanzas" en la localidad 2.
SQL> INSERT INTO
2

VALUES

p_departamento(id, descripcion, id_localidad)


(s_dept_id.NEXTVAL,

Finanzas', 2);

1 row created.

Vea el valor
S_DEPT_ID.
SQL> SELECT
2 FROM

SNPP - San Lorenzo

actual

para

la

sucesin

de

p_dept_id.CURRVAL
SYS.dual;

Oracle - Inst. Zulma Argello

72

Modificando una Secuencia:


Sintaxis
Se puede cambiar el valor de incremento, valor
mximo, valor mnimo, opcin del ciclo, y
opcin del cache.
ALTER SEQUENCE sequence
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

73

Eliminacin de la secuencia
Se elimina una secuencia usando la
sentencia DROP SEQUENCE.
Una vez eliminada la secuencia, ella ya no
puede ser referenciada.
SQL> DROP SEQUENCE p_dept_id;
Sequence dropped.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

74

TENGA EN CUENTA LO SIGUIENTE

Como se indic, si se define la secuencia en el cach de


memoria, facilita una acceso ms rpido (Por defecto
ORACLE realiza cach de 20 valores)
Pueden perderse valores de la secuencia en las
siguientes circunstancias:
- Cuando ocurre un rollback.

Se genera algn error de sistema o del hardware.


Se utiliza la misma secuencia en alguna otra
tabla o aplicacin
Las condiciones con las que se cre la secuencia, as
como el siguiente valor pueden consultarse en la tabla
USER_SEQUENCES.

SNPP - San Lorenzo

Oracle - Inst. Zulma Argello

75

You might also like