Está en la página 1de 5

CONSTRAINTS

Las constraints son las encargadas de asegurar la integridad referencial en la base de datos. Tipos de constraints: CHECK NOT NULL UNIQUE KEY PRIMARY KEY FOREIGN KEY Las constraints existen slo en el diccionario de datos y son aplicadas (o comprobadas) durante la ejecucin del SQL o PL/SQL. Cuando estn habilitadas, las constraints estn aseguradas. Si no estn habilitadas, no tienen porque cumplirse, pero siguen en el diccionario de datos. ALTER TABLE table_name ENABLE CONSTRAINT const_name; ALTER TABLE table_name DISABLE CONSTRAINT const_name; Para eliminar una constraint, utilizamos el ALTER TABLE: ALTER TABLE table_name DROP CONSTRAINT const_name; ALTER TABLE table_name DROP PRIMARY KEY;

Check constraints
Este tipo de constraints son usadas para asegurar reglas simples de negocio sobre el contenido de los datos en las tablas. Los check pueden referenciar a otras columnas en la fila que est siendo chequeada, pero no pueden referenciar a otras filas o a otras tablas, o llamar a funciones como SYSDATE, UID, USER o USERENV. No se puede asociar una check a una columna de tipo LOB, object, nested table, VARRAY o REF. Una columna puede estar protegida por ms de una constraint y una check puede proteger a ms de una columna. En el CREATE TABLE: CONSTRAINT [constraint_name] CHECK (condition); El nombre de la constraint no es obligatorio. Si no se especifica, se crear un nombre nico que comience por SYS_

CREATE TABLE persona ( Codigo NUMBER, Sexo VARCHAR2(1) CONTRAINT chk_genero CHECK (genero in (H,M)), Estado VARCHAR2(1), Nombre VARCHAR2(200), CONSTRAINT chk_estado CHECK (estado in (S, C, D, V)) ); Se debe especificar al final si la check involucra a ms de una columna.

Constraint NOT NULL


Se aplica a una columna y requiere valores para la columna que protege. Por defecto, Oracle pone a NULL la columnas no introducidas de la tabla. CREATE TABLE persona ( Nombre VARCHAR2(200) NOT NULL ); La constraint NOT NULL aparece en la vista del diccionario de datos DBA_CONSTRAINTS como una check. Si se crea inline, adems aparecer en la vista DBA_TAB_COLUMNS como una atributo de columna. Para eliminar la constraint: ALTER TABLE persona MODIFY nombre NULL;

Unique constraint
Una constraint unique protege a una o ms columnas de una tabla, asegurando que no hay dos filas que contengan informacin duplicada en las columnas aseguradas.

Ejemplo:

Nombre_col VARCHAR2(50) CONSTRAINT nombre_unique UNIQUE Si la constraint UNIQUE protege dos o ms columnas, sta debe ser aadida al final de la tabla. Las constraints UNIQUE generan un ndice B-TREE. Podemos indicar donde (tablespace) y con que condiciones se almacenar el ndice. CREATE TABLE insured_autos ( Policiy_id NUMBER, Vin VARCHAR2(40), Coverage_begin DATE, Coverage_term NUMBER, CONSTRAINT uniq_auto UNIQUE (policy_id, vin) USING INDEX TABLESPACE indx STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0) ); Para eliminar una nique: ALTER TABLE insured_autos DROP CONSTRAINT uniq_auto; No se puede borrar una UNIQUE de una tabla si sta est apuntada por una foreign key. Pasos: 1. Deshabilitar la foreign 2. Borrar la nique Si eliminamos la UNIQUE, eliminamos el ndice asociado. Esto es, eliminando la constraint podemos hacer que el rendimiento de las consultas baje. Lo que debemos hacer es: 1. Crear un ndice no nico sobre la/s columna/s que la UNIQUE debe proteger 2. Crear la CONSTRAINT La UNIQUE no crear un segundo ndice. CREATE INDEX insured_autos_u1 ON insured_autos (policy_id, vin) TABLESPACE indx STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0); ALTER TABLE insured_autos ADD CONSTRAINT uniq_autos UNIQUE (policy_id, vin); El problema de esta solucin es que las bsquedas sern un poco peores, ya que las bsquedas se harn por RANGE SCAN y no por UNIQUE SCAN.

Foreign keys
Una foreign key protege una o ms columnas de una tabla, asegurando que cada valor de la fila es, o bien nulo en su conjunto, o bien apunta a un valor de una clave nica o primaria. No se genera un B-TREE al crear la constraint. Siempre, al hablar de claves externas, forneas o extranjeras, se mencionan dos trminos: parent table o tabla maestra y child table o tabla detalle. Tabla maestra. Tabla referenciada. Es la que tiene la primary o la unique Tabla detalle. La tabla donde se encuentra la referencia. L a que es chequeada para garantizar que sus valores se corresponden con los de la tabla maestra La integridad referencial est basada en las foreign keys CREATE TABLE coche_asegurado ( Numero_matricula NUMBER, Letras_matricula VARCHAR2(3), Poliza NUMBER CONSTRAINT poliza_fk REFERENCES polizas (codigo_poliza) ON DELETE CASCADE, RESTO DE CAMPOS DE LA TABLA, CONSTRAINT coche_fk FOREIGN KEY (numero_matricula, letras_matricula) REFERENCES coche (numero, letra) ON DELETE SET NULL -- Si la foreign afecta a ms de una columna, debe especificarse as ); La clusula ON DELETE le dice a Oracle como comportarse si se borra el registro padre: 1. Si no se especifica nada, por defecto saltar un error 2. CASCADE. Borrar los registros hijo 3. SET NULL. Pondr los campos del registro hijo a null

Deferred constraint checking

1. Immediate. Por defecto. La constraint se valida en el momento en el que se produce la accin. 2. Deferred. La constraint se valida al finalizar la transaccin. La ejecucin en Oracle se basa en un criterio optimista. Esto es, el chequeo se realiza siempre despus de: 1. Insertar los valores en el segmento de rollback 2. Modificar los valores de las tablas 3. Modificar los valores de los ndices Si sabemos que hay muchas posibilidades de que el programa falle, lo mejor es garantizarlo por programa, no esperar a que salte la constraint.

También podría gustarte