Databases
T05-003 Claves ajenas
Enunciado
FOREIGN KEY.Si la definición de la clave ajena se pone al final, tendremos que colocar el texto
FOREIGN KEYpara especificar a qué campo se está refiriendo.En el caso en el que la clave ajena estuviera formada por más de un atributo, sería obligatorio que la restricción se colocara tras la definición de los atributos. Veamos un ejemplo con Cod_Partida y Fecha de la partida de la tabla PARTIDAS:
CREATE TABLE USUARIOS ( Cod_Partida NUMBER(8), F_Partida DATE, CONSTRAINT Partida_Cod_F_FK FOREIGN KEY (Cod_Partida, F_Partida) REFERENCES PARTIDAS);Tenemos otras soluciones y es añadir tras la cláusula
REFERENCE:
ON DELETE CASCADE: te permitirá borrar todos los registros cuya clave ajena sea igual a la clave del registro borrado.ON DELETE SET NULL: colocará el valorNULLen todas las claves ajenas relacionadas con la borrada.Ejercicio:
Supongamos que tenemos que almacenar datos de los MODULOS, según la siguiente definición:
CREATE TABLE MODULOS ( CODIGO NUMBER, NOMBRE VARCHAR2 (100), CICLO CHAR(3), PRIMARY KEY (CODIGO, CICLO) );Como material de apoyo, para cada módulo se hace uso de un libro de texto, cuyos datos se almacenarán en la siguiente tabla:
CREATE TABLE LIBROS ( ISBN NUMBER PRIMARY KEY, TITULO VARCHAR2 (100), MODULO NUMBER, CICLO CHAR(3));Crea las tablas y relaciónalas a través de una clave ajena.
Tipo
Solución
CREATE TABLE MODULOS (
CODIGO NUMBER,
NOMBRE VARCHAR2 (100),
CICLO CHAR(3),
PRIMARY KEY (CODIGO, CICLO)
);
CREATE TABLE LIBROS (
ISBN NUMBER PRIMARY KEY,
TITULO VARCHAR2 (100),
MODULO NUMBER,
CICLO CHAR(3),
FOREIGN KEY (MODULO, CICLO) REFERENCES MODULOS (CODIGO, CICLO)
);
Prueba
SELECT USER_CONSTRAINTS.TABLE_NAME, STATUS, COLUMN_NAME, POSITION
FROM USER_CONSTRAINTS JOIN USER_CONS_COLUMNS USING (CONSTRAINT_NAME)
WHERE CONSTRAINT_TYPE = 'R';
LibrerÃas (Onfly databases)
--

