La Web del Programador: Comunidad de Programadores
 
    Pregunta:  57906 - PROBLEMAS CON LLAVE FORANEA TIPO FECHA SQL
Autor:  Oscar Ibarra
Hola a todos, tengo el siguiente problema con SQL plus. Al crear 2 tablas con el mismo campo(fecha) del mismo tipo(date) quiero hacer una llave foranea, pero me dice que el campo no es del mismo tipo. El codigo lo anexo a continuación:

CREATE TABLE Horario
(
claveHorario CHAR(4) NOT NULL CONSTRAINT claveHorario_PK PRIMARY KEY,
hora NUMBER(4) NOT NULL,
fecha DATE NOT NULL
);

CREATE TABLE fechaClaveProg
(
fecha DATE NOT NULL,
claveProg CHAR(4) NOT NULL
);

ALTER TABLE fechaClaveProg ADD FOREIGN KEY(fecha) REFERENCES Horario;

Alguien puede decirme que es lo que está mal?

Saludos y gracias

  Respuesta:  Oscar Ibarra
Hola de nuevo, he hayado la respuesta al problema, resulta que no se puede hacer referencia a un campo que no es llave foranea, además, una fecha no puedeser llave foranea, por lo que se crean ambos campos de la tabla como llave foranea, quedando la creación de la tabla de la siguiente manera

CREATE TABLE Horario
(
hora NUMBER(4) NOT NULL,
fecha DATE NOT NULL,
CONSTRAINT claveHorario_PK PRIMARY KEY(hora,fecha)
);

Ahora, para poder hacer referencia a los campos se tiene que crear una llave foranea de dos columnas (puesto que la primaria es de 2 columnas). pero dejando como valor nulo el campo que no se va a usar, en este caso "hora". La tabla quedaría de la siguiente forma

CREATE TABLE fechaClaveProg
(
claveProg CHAR(4) NOT NULL,
fecha DATE NOT NULL,
hora NUMBER(4),
CONSTRAINT claveProg2_FK_01 FOREIGN KEY(claveProg) REFERENCES Programa,
CONSTRAINT fecha_fechaClaveProg_FK_02 FOREIGN KEY(hora,fecha) REFERENCES Horario
);

Saludos