My situation is as follows. Structure:
Grupo (GrupoId, GrupoNombre)
Asignatura (AsignaturaId, AsignaturaNombre)
GrupoTieneAsignatura (GrupoId, AsignaturaID)
Planilla(GrupoId(de grupotieneasignatura), AsignaturaID(de grupotieneasignatura), otros)
As you can see in the structure I try to reference a key you could say in cascade. But when referencing in the last one, I get an error. Why can it be?
The code I am using is the following:
CREATE TABLE asignatura (
asignaturaid SERIAL NOT NULL,
asignaturanombre VARCHAR(25) NOT NULL,
asignaturaestado BOOLEAN DEFAULT T,
areaid INTEGER NOT NULL,
PRIMARY KEY(asignaturaid)
);
CREATE TABLE grupo (
grupoid SERIAL NOT NULL,
gruponombre VARCHAR(25) NOT NULL,
grupocantidad SMALLINT NOT NULL,
grupoestado BOOLEAN DEFAULT T,
PRIMARY KEY(grupoid)
);
CREATE TABLE grupotieneasignatura (
asignaturaid INTEGER NOT NULL,
grupoid INTEGER NOT NULL,
PRIMARY KEY(asignaturaid, grupoid)
);
CREATE TABLE planilla (
diaid INTEGER NOT NULL,
horaid INTEGER NOT NULL,
personaci CHAR(8) NOT NULL,
aulaid INTEGER,
asignaturaid INTEGER,
grupoid INTEGER,
PRIMARY KEY(diaid,horaid,aulaid,personaci)
);
ALTER TABLE grupotieneasignatura
ADD CONSTRAINT ( FOREIGN KEY(grupoid)
REFERENCES grupo(grupoid) CONSTRAINT ex1
);
ALTER TABLE grupotieneasignatura
ADD CONSTRAINT ( FOREIGN KEY(asignaturaid)
REFERENCES asignatura(asignaturaid) CONSTRAINT ex2
);
ALTER TABLE planilla
ADD CONSTRAINT ( FOREIGN KEY(personaci)
REFERENCES persona(personaci) CONSTRAINT externapersona
);
ALTER TABLE planilla
ADD CONSTRAINT ( FOREIGN KEY(grupoid)
REFERENCES grupotieneasignatura(grupoid) CONSTRAINT externagrupo
);
ALTER TABLE planilla
ADD CONSTRAINT ( FOREIGN KEY(aulaid)
REFERENCES aula(aulaid) CONSTRAINT externaaula
);
ALTER TABLE planilla
ADD CONSTRAINT ( FOREIGN KEY(asignaturaid)
REFERENCES grupotieneasignatura(asignaturaid) CONSTRAINT externaasignatura
);
The error that is throwing me when executing these sql intrusions is the following:
No primary key or single type constraint is found in the table (grupotieneasignatura).