You are on page 1of 7

RESTRICCIONES SOBRE TABLAS Resumen

El servidor Oracle usa restricciones, llamadas constraints, para prevenir la entrada de datos no vlidos en las tablas. Los siguientes tipos de restricciones son vlidos en Oracle: NOT NULL UNIQUE Keyb PRIMARY KEY FOREIGN KEY CHECK
Puede consultar la tabla USER_CONSTRAINTS para visualizar todas las definiciones de constraints y sus nombres.

Objetivo
En esta leccin, aprender a implementar reglas de negocio a travs de restricciones de integridad (Integrity Constraints).

Restricciones
El servidor Oracle utiliza las constraints para prevenir la entrada de datos no vlidos en una tabla. Se pueden usar restricciones para: Garantizar el cumplimiento de las reglas a nivel de tablas, en cualquier momento que una fila es insertada, actualizada o borrada de la tabla. La restriccin debe ser satisfecha para que la operacin tenga xito. Impedir la eliminacin de una tabla si existen dependencias desde otras tablas. Ofrece reglas para las herramientas Oracle, tales como Developer/2000.

RESTRICCIONES SOBRE TABLAS

1. Restricciones de Integridad de Datos


Constraint NOT NULL UNIQUE Key PRIMARY KEY FOREIGN KEY CHECK Descripcin

Especifica que esta columna no puede contener un valor nulo. Especifica una columna o combinacin de ellas cuyos valores deben ser nicos para todas las filas en la tabla. Identifica unvocamente a cada fila de la tabla. Establece y garantiza una relacin de clave ajena entre la columna y una columna de la tabla referenciada. Especifica una condicin que debe ser verdadera.

2. Convenciones para los Nombres de las Restricciones Todas las restricciones se encuentran almacenadas en el diccionario de datos. Las restricciones son fciles de referenciar si se les da un nombre significativo. Los nombres deben seguir las reglas standard para los nombres de los objetos. Si no se le asigna un nombre a la restriccin, Oracle genera uno con el formato SYS_Cn, donde n es un entero para crear un nombre nico. Notas: Las restricciones pueden ser definidas al crear la tabla o despus. Puede ver las restricciones de una tabla especfica, mediante la tabla USER_CONSTRAINTS del diccionario de datos. 3. Definicin de Restricciones

CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [column_constraint], [table_constraint]);


En la Sintaxis: schema table DEFAULT expr column datatype column_constraint table_constraint

es el mismo que el nombre del propietario. es el nombre de la tabla. especifica un valor por defecto, si se omite el valor durante un INSERT. es el nombre de la columna. es el tipo de dato y longitud de la columna. es una constraint de integridad a nivel de columna. es una constraint de integridad a nivel de tabla.

Las constraints se crean normalmente a la vez que se crea la tabla. Pueden ser aadidas despus de haber creado la tabla y tambin pueden desactivarse temporalmente.

RESTRICCIONES SOBRE TABLAS


Las constraints pueden ser definidas a dos niveles:
Nivel Column Descripcin Referencia una nica columna y es definida dentro de una especificacin para la propia columna; puede definir cualquier tipo de restriccin de integridad. Referencia una o ms columnas y es definida separadamente de las definiciones de las columnas en la taba; puede definir cualquier restriccin, excepto NOT NULL

Table

Anivel de columna:

column [CONSTRAINT constraint_name] constraint_type,


A nivel de tabla

column,... [CONSTRAINT constraint_name] constraint_type (column, ...),


En la Sintaxis: constraint_name constraint_type es el nombre de la restriccin es el tipo de restriccin.

A) La restriccin NOT NULL La restriccin NOT NULL asegura que en la columna no se permitirn valores nulos. Las columnas sin la restriccin NOT NULL pueden contener valores nulos, por defecto. Esta restriccin puede especificarse solamente al nivel de columna, no a nivel de tabla. El ejemplo, aplica una constraint NOT NULL a las columnas E_NOMB y DEP_NO de la tabla EMP. Dado que estas constraints no han sido nombradas explcitamente, el servidor Oracle, crear nombres implcitamente. Puede especificar el nombre de una constraint, al especificar la misma. deptno NUMBER(7) CONSTRAINT emp_deptno_nn NOT NULL;

B) La Restriccin de UNIQUE KEY Una restriccin UNIQUE requiere que cada valor en una columna o conjunto de columnas (clave) sean nicas ,es decir, dos registros de una tabla no tendrn valores duplicados para determinada columna o conjunto de columnas. La columna (o conjunto de columnas) incluidas en la definicin de la constraint de clave UNIQUE se conoce con el nombre de clave nica (unique key). Si la clave UNIQUE

RESTRICCIONES SOBRE TABLAS


est compuesta de ms de una columna, ese grupo de columnas, recibe el nombre de clave nica compuesta (composite unique key). Las claves UNIQUE permiten la entrada de nulos, a menos que tambin defina la restriccin NOT NULL para las mismas columnas. De hecho, cualquier nmero de registros pueden incluir nulos para columnas que no tengan la clusula NOT NULL, porque los valores null no se consideran igual a nada. Un nulo en una columna (o en todas las columnas de una clave nica compuesta), siempre satisface un restriccin de clave UNIQUE. Nota: Dado el mecanismo de bsqueda para restricciones UNIQUE sobre ms de una columna, no puede haber valores idnticos en columnas parciales tipo not-null de una restriccin de clave UNIQUE compuesta. Las restricciones de clave UNIQUE pueden ser definidas a nivel de columna o de tabla. Una clave nica compuesta, se crear usando la definicin a nivel de tabla. C) La Restriccin PRIMARY KEY Una restriccin PRIMARY KEY crea una clave principal para la tabla. Se puede crear solamente una clave principal por tabla. La restriccin PRIMARY KEY es una columna o conjunto de ellas que identifican unvocamente a cada fila de una tabla. Esta restriccin: garantiza la unicidad de la columna (o combinacin de ellas) asegura que ninguna columna que sea parte de la clave principal pueda contener un valor nulo. Puede definirse a nivel de columna o de tabla; una PRIMARY KEY compuesta se crear usando la definicin a nivel de tabla. Nota: Un ndice UNIQUE es automticamente creado para la columna PRIMARY KEY. D) La Restriccin FOREIGN KEY (Clave Externa o Ajena) La restriccin FOREIGN KEY, o de integridad referencial, designa a una columna o combinacin de ellas como una clave ajena y establece una relacin con una primary key o unique key de la misma tabla o de otra tabla. El valor de la clave ajena debe ser del mismo tipo que de la tabla padre o ser NULL. Las restricciones FOREIGN KEY pueden definirse a nivel de columna o de tabla. Una clave ajena compuesta se crea usando la definicin a nivel de tabla. Las claves ajenas estn basadas en valores de datos y son puramente lgicos, no son punteros fsicos. Una clave ajena que es parte de una clave principal no puede tener un valor NULL porque ninguna parte de una clave principal puede tenerlo.

RESTRICCIONES SOBRE TABLAS


La clave ajena se define en la tabla hija, y la tabla que contiene la columna referenciada es la tabla padre. Para definirla se usa una combinacin de las siguientes palabras claves: FOREIGN KEY es usada para definir la columna en la tabla hija, cuando se establece la restriccin a nivel de tabla. REFERENCES identifica la tabla y columna de la tabla padre. ON DELETE CASCADE indica que cuando la fila en la tabla padre es borrada, las filas dependientes en la tabla hija tambin sern borradas.

Sin la opcin ON DELETE CASCADE, la fila en la tabla padre no puede ser borrada mientras haya referencias a ella en la tabla hija.
E) La Restriccin CHECK La restriccin CHECK define la condicin que cada fila debe satisfacer. La condicin puede usar la misma sintaxis que las condiciones de las consultas, con las siguientes excepciones: Llamadas a las funciones SYSDATE, UID, USER o USERENV Consultas que refieran a otros valores de otras filas Una columna simple puede tener varias restricciones CHECK que referencian la columna en su definicin. Pueden ser definidas tanto a nivel de columna como a nivel de tabla. La sintaxis de la restriccin puede aplicarse a cualquier columna en la tabla, no solamente a la columna sobre la que se est definiendo. 4. Aadir una Restriccin Puede aadir una restriccin para tablas ya existentes, usando la sentencia ALTER TABLE con la clusula ADD.

ALTER TABLE table ADD [CONSTRAINT constraint] type (column);


En la Sintaxis: table constraint type column es el nombre de la tabla. es el nombre de la restriccin. es el tipo de restriccin. es el nombre de la columna afectada por la restriccin.

El nombre de la restriccin es opcional, aunque recomendado. Si no nombra la restriccin, el sistema generar un nombre automticamente. Gua de Escritura Puede aadir, borrar, activar o desactivar una restriccin, pero no modificar su estructura. Puede aadir una restriccin NOT NULL a una columna existente, usando la clusula MODIFY de la sentencia ALTER TABLE.

RESTRICCIONES SOBRE TABLAS


5. Borrar una Restriccin Para borrar una restriccin, puede identificar el nombre consultado las vistas del d.d: USER_CONSTRAINTS y USER_CONS_COLUMNS. A continuacin, usaremos la sentencia ALTER TABLE con la clusula DROP. Sintaxis:

ALTER TABLE table DROP PRIMARY KEY | UNIQUE (column) | CONSTRAINT constraint [CASCADE];
donde: table column constraint es el nombre de la tabla. es el nombre de la columna afectada por la restriccin. es el nombre de la restriccin.

La opcin CASCADE de la clusula DROP provoca que cualquier restriccin dependiente, tambin se borre. Cuando borra una restriccin de integridad, esa restriccin ya no es parte del servidor Oracle y por tanto, no est disponible en el diccionario de datos. 6. Desactivando una Restriccin Puede desactivar una restriccin sin borrarla, usando la sentencia ALTER TABLE con la clusula DISABLE. Sintaxis:

ALTER TABLE table DISABLE CONSTRAINT constraint [CASCADE];


donde: table constraint Gua de Escritura Puede usar la clusula DISABLE tanto en la sentencia CREATE TABLE, como en la sentencia ALTER TABLE. La clusula CASCADE desactiva las restricciones de integridad dependientes. es el nombre de la tabla. es el nombre de la restriccin.

7. Activando una Restriccin Puede activar una restriccin sin borrarla, usando la sentencia ALTER TABLE con la clusula DISABLE. Sintaxis:

ALTER TABLE table ENABLE CONSTRAINT constraint;

RESTRICCIONES SOBRE TABLAS


donde: table constraint Gua de Escritura Si activa una restriccin, sta se aplica a todos los datos de la tabla. Todos los datos de la tabla tendrn que ajustarse a la restriccin. Si activa una restriccin UNIQUE o PRIMARY KEY, se crear automticamente un ndice para la clave UNIQUE o PRIMARY KEY. Puede usar la clusula ENABLE tanto en la sentencia CREATE TABLE, como en la sentencia ALTER TABLE. es el nombre de la tabla. es el nombre de la restriccin.

8. Visualizar Restricciones Tras crear una tabla, puede verificar su existencia haciendo uso del comando DESCRIBE. La nica restriccin que no puede verificar es NOT NULL. Para ver todas las restricciones sobre una tabla, consulte la tabla del d.d. USER_CONSTRAINTS. Nota: Las restricciones que no reciben un nombre explcitamente por el propietario de la tabla, reciben un nombre asignado por el sistema. En la columna constraint type C es CHECK P es PRIMARYKEY, R es Integridad Referencial, U es UNIQUE KEY. Observe que la restriccin NULL, realmente es una restriccin CHECK. Puede ver los nombres de las columnas involucradas en restricciones, consultando la vista del diccionario de datos USER_CONS_COLUMNS. Esta vista, es especialmente til para restricciones, a las que el propio sistema ha asignado un nombre.

You might also like