Hola estimados:
Tuve que construir una bd en postgresql para una tarea de la U y al crear una tabla me arroja este error
ERROR: no hay restricción unique que coincida con las columnas dadas en la tabla referida «semestre»
Ademas de darme el error no me crea otras tablas: curso, asignacion, horario, recurso y asignacion_recursos, horario. Aqui les dejo las definiciones usadas.
CREATE TABLE Persona(
rut CHAR(10) NOT NULL PRIMARY KEY,
nombres VARCHAR(25) NOT NULL,
apellidos VARCHAR(25) NOT NULL,
direccion VARCHAR(40),
password CHAR(15) NOT NULL,
telefono CHAR(10),
correo_personal VARCHAR(25) NOT NULL,
fecha_nacimiento DATE);
CREATE TABLE Administrador(
rut CHAR(10) NOT NULL PRIMARY KEY,
correo_administrativo VARCHAR(25) NOT NULL,
FOREIGN KEY (rut) REFERENCES Persona(rut));
CREATE TABLE Profesor(
rut CHAR(10) NOT NULL PRIMARY KEY,
grado_academico CHAR(4),
area_desarrollo VARCHAR(20),
departamento VARCHAR(20) NOT NULL,
FOREIGN KEY (rut) REFERENCES Persona (rut));
CREATE TABLE Ayudante(
rut CHAR(10) NOT NULL PRIMARY KEY,
nivel CHAR(1) NOT NULL,
an_o_ingreso CHAR(2),
carrera VARCHAR(20),
FOREIGN KEY (rut) REFERENCES Persona (rut));
CREATE TABLE Semestre(
an_o CHAR(2) NOT NULL,
id_semestre CHAR(2) NOT NULL,
fecha_inicio DATE,
fecha_termino DATE,
PRIMARY KEY (an_o, id_semestre));
CREATE TABLE Curso(
id_curso CHAR(2) NOT NULL PRIMARY KEY,
sigla CHAR(7) NOT NULL,
nombre_curso VARCHAR(25),
departamento VARCHAR(20) NOT NULL,
creditos CHAR(1) NOT NULL,
numero_inscritos INT NOT NULL,
rut CHAR(10) NOT NULL,
an_o CHAR(2) NOT NULL,
id_semestre CHAR(2) NOT NULL,
FOREIGN KEY (rut) REFERENCES Profesor (rut),
FOREIGN KEY (an_o) REFERENCES Semestre (an_o),
FOREIGN KEY (id_semestre) REFERENCES Semestre (id_semestre)); <---- Aqui me da un error
CREATE TABLE Ayudantia(
rut CHAR(10) NOT NULL,
id_curso CHAR(2) NOT NULL,
PRIMARY KEY (rut, id_curso),
FOREIGN KEY (rut) REFERENCES Ayudante (rut),
FOREIGN KEY (id_curso) REFERENCES Curso (id_curso));
CREATE TABLE Asignacion(
id_asignacion CHAR(2) NOT NULL PRIMARY KEY,
id_curso CHAR(2) NOT NULL,
id_sala CHAR(2) NOT NULL,
id_horario INT NOT NULL,
FOREIGN KEY (id_curso) REFERENCES Curso (id_curso),
FOREIGN KEY (id_sala) REFERENCES Sala (id_sala),
FOREIGN KEY (id_horario) REFERENCES Horario (id_horario));
CREATE TABLE Horario(
id_horario INT NOT NULL PRIMARY KEY,
bloque VARCHAR(5) NOT NULL,
dia CHAR(10) NOT NULL,
mes CHAR(10) NOT NULL,
an_o CHAR(2) NOT NULL,
id_semestre CHAR(2) NOT NULL,
FOREIGN KEY (an_o) REFERENCES Semestre (an_o),
FOREIGN KEY (id_semestre) REFERENCES Semestre (id_semestre)); <------- Aqui me da otro error
CREATE TABLE Asignacion_Recurso(
id_asignacion CHAR(2) NOT NULL,
id_recurso CHAR(2) NOT NULL,
PRIMARY KEY (id_asignacion, id_recurso),
estado_devolucion CHAR(1) NOT NULL,
FOREIGN KEY (id_asignacion) REFERENCES Asignacion (id_asignacion),
FOREIGN KEY (id_recurso) REFERENCES Recurso (id_recurso));
CREATE TABLE Recurso(
id_recurso CHAR(2) NOT NULL PRIMARY KEY,
nombre_recurso VARCHAR(20) NOT NULL,
tipo_recurso VARCHAR(20) NOT NULL,
estado VARCHAR(10) NOT NULL);
CREATE TABLE Sala(
id_sala CHAR(2) NOT NULL PRIMARY KEY,
edificio CHAR(1) NOT NULL,
numero CHAR(3) NOT NULL,
capacidad CHAR(3) NOT NULL);
Estoy usando Postgresql 8.1 y he revisado por todos lados tratando de encontrar la respuesta pero no la veo, si alguien aqui me puede ayudar me salvaria de reprobar la tarea xD.
Salu2!