03.1.Oracle - Claves, contraints, references

Anuncio
Claves, Constraints y References
Ing. Gustavo Delgado
Clave Primaria
• Dept_tab – Tabla de departamentos
• Deptno – Código del departamento, que debe
ser único (regla de negocio)
ALTER TABLE Dept_tab ADD PRIMARY KEY (Deptno);
Clave Foranea
• Dept_tab – Tabla de departamentos
• Deptno – Código del departamento, que debe ser
único (regla de negocio)
• Emp_tab – Tabla de Empleados
– Regla de Negocio: Cada departamento listado en la
tabla de Empleados debe coincidir con un valor en la
tabla de Departamentos.
ALTER TABLE Emp_tab ADD FOREIGN KEY (Deptno)
REFERENCES Dept_tab(Deptno);
Clave Foranea
• Oracle no genera índices automáticamente
para claves foráneas
• Podría ser conveniente generar indices para
claves foráneas
Restricción de No Nulo
Restricción de No Nulo
• La restricción de No Nulo puede prevenir que
no se ingresen valores que deben ser
obligatorios.
• Regla de negocio: ename de la tabla Emp,
debe tener siempre valores.
ALTER TABLE emp MODIFY ename NOT NULL;
Valor por Defecto
• A las columnas de una tabla se les puede
asignar un valor típico en caso que no se
ingrese valor.
CREATE TABLE audit_trail (
value1 NUMBER,
value2 VARCHAR2(32),
inserter VARCHAR2(30) DEFAULT USER );
Valor por Defecto
• Los valores de DEFAULT pueden ser literales,
expresiones o llamadas a funciones como:
– SYSDATE .- Devuelve la fecha y hora actual
– USER.- Devuelve el nombre de usuario de la
sesión actual (VARCHAR2)
– USERENV .- Devuelve información de la sesión
actual
– UID .- Devuelve un entero que identifica
unívocamente a la sesión de usuario.
Valor por Defecto
• DEFAULT no puede tener:
– Expresiones referidas a secuencias
– Funciones PL/SQL
– Columnas
– LEVEL .- Devuelve el nivel en el árbol de búsqueda
– ROWNUM .- Indica el número de orden en que
Oracle selecciona las filas
– PRIOR.- Hace referencia a la fila anterior.
UNIQUE
• Esta clausula es apropiada para las columnas
cuyos valores no deben repetirse.
• Se diferencian de las claves primarias, en que
las claves primarias persiguen identificar los
registros unívocamente.
UNIQUE
UNIQUE
CREATE TABLE promotions_var1
(
promo_id NUMBER(6) CONSTRAINT promo_id_u UNIQUE ,
promo_name VARCHAR2(20) ,
promo_category VARCHAR2(15) ,
promo_cost NUMBER(10,2) ,
promo_begin_date DATE ,
promo_end_date DATE
);
CHECK
• Permite validar que las columnas cumplan
ciertas reglas de negocio particulares.
• Se pueden usar expresiones para validar los
valores de una columna.
CHECK
CREATE TABLE divisions
(
div_no NUMBER CONSTRAINT check_divno CHECK (div_no
BETWEEN 10 AND 99) DISABLE,
div_name VARCHAR2(9) CONSTRAINT check_divname CHECK
(div_name = UPPER(div_name)) DISABLE,
office VARCHAR2(10) CONSTRAINT check_office CHECK (office
IN ('DALLAS','BOSTON', 'PARIS','TOKYO')) DISABLE
);
CHECK
CREATE TABLE dept_20
(
employee_id NUMBER(4) PRIMARY KEY,
last_name VARCHAR2(10),
job_id VARCHAR2(9),
manager_id NUMBER(4),
salary NUMBER(7,2),
commission_pct NUMBER(7,2),
department_id NUMBER(2),
CONSTRAINT check_sal CHECK (salary * commission_pct <= 5000)
);
CHECK
CREATE TYPE person_name AS OBJECT
(
first_name VARCHAR2(30),
last_name VARCHAR2(30)
);
/
CREATE TABLE students
(
name person_name,
age INTEGER,
CHECK (name.first_name IS NOT NULL AND name.last_name IS NOT NULL)
);
Uso explicito de índices
CREATE TABLE promotions_var3
(
promo_id NUMBER(6) ,
promo_name VARCHAR2(20) ,
promo_category VARCHAR2(15) ,
promo_cost NUMBER(10,2) ,
promo_begin_date DATE ,
promo_end_date DATE ,
CONSTRAINT promo_id_u UNIQUE (promo_id, promo_cost) USING INDEX
(CREATE UNIQUE INDEX promo_ix1 ON promotions_var3 (promo_id,
promo_cost)) ,
CONSTRAINT promo_id_u2 UNIQUE (promo_cost, promo_id) USING INDEX
promo_ix1
);
Integridad Referencial
Constraints Deferrable
CREATE TABLE dept
(
deptno NUMBER PRIMARY KEY,
dname VARCHAR2 (30)
);
CREATE TABLE emp (
empno NUMBER,
ename VARCHAR2 (30),
deptno NUMBER,
CONSTRAINT epk PRIMARY KEY (empno) DEFERRABLE,
CONSTRAINT efk FOREIGN KEY (deptno)
REFERENCES dept(deptno) DEFERRABLE
);
Constraints Deferrable
INSERT INTO dept VALUES (10, 'Accounting');
INSERT INTO dept VALUES (20, 'SALES');
INSERT INTO emp VALUES (1, 'Corleone', 10);
INSERT INTO emp VALUES (2, 'Costanza', 20);
COMMIT;
Constraints Deferrable
Integridad Referencial
Documentos relacionados
Descargar