-- Creación de Tablas con sus claves primarias
CREATE TABLE carreras(
id_carrera int NOT NULL,
nombre_carrera varchar2(50) NOT NULL,
	titulo varchar2(50) ,
 CONSTRAINT PK_carreras PRIMARY KEY (id_carrera)
);

CREATE TABLE sexos(
	id_sexo integer NOT NULL,
	n_sexo varchar2(20) NOT NULL,
CONSTRAINT PK_sexos PRIMARY KEY (id_sexo)
);

CREATE TABLE estados_cursados(
	id_estado integer NOT NULL,
	n_estado varchar2(30) NOT NULL,
 CONSTRAINT PK_estados_cursados PRIMARY KEY (id_estado)
);
CREATE TABLE barrios(
	id_barrio integer NOT NULL,
	n_barrio varchar2(50) NOT NULL,
 CONSTRAINT PK_barrios PRIMARY KEY (id_barrio)
);
CREATE TABLE tipo_notas(
	id_tipo_nota integer NOT NULL,
	n_tipo_nota varchar2(20) NOT NULL,
 CONSTRAINT PK_tipo_notas PRIMARY KEY (id_tipo_nota)
);
CREATE TABLE tipo_documentos(
	id_tipo_documento integer NOT NULL,
	n_tipo_documento varchar2(20) NOT NULL,
 CONSTRAINT PK_tipo_documentos PRIMARY KEY (id_tipo_documento)
);
CREATE TABLE materias(
	id_materia integer NOT NULL,
	nombre VARCHAR2(50) NOT NULL,
 CONSTRAINT PK_materias PRIMARY KEY (id_materia)
);

CREATE TABLE alumnos_cursando_materias(
	id_materia integer NOT NULL,
        id_carrera integer NOT NULL,
	id_estudiante integer NOT NULL,
	fecha_inscripcion date NOT NULL,
	id_estado integer NOT NULL,
	fecha_estado date NOT NULL,
 CONSTRAINT PK_alumnos_cursando_materias PRIMARY KEY (id_materia, id_carrera, id_estudiante, fecha_inscripcion)
);
CREATE TABLE alumnos_examenes(
	id_materia integer NOT NULL,
id_carrera integer NOT NULL,    
	id_estudiante integer NOT NULL,  
	fecha_del_examen date NOT NULL,
	fecha_inscripcion_a_exament date NOT NULL,
	nota integer,
 CONSTRAINT PK_alumnos_examenes PRIMARY KEY (id_materia, id_carrera, id_estudiante, fecha_del_examen)
);
CREATE TABLE alumnos_cursando_notas(
	id_materia integer NOT NULL,
	id_carrera integer NOT NULL,    
	id_estudiante integer NOT NULL,
	fecha_inscripcion date NOT NULL,
	fecha_nota date NOT NULL,
	id_tipo_nota integer NOT NULL,
	nota integer NULL,
 CONSTRAINT PK_alumnos_cursando_notas PRIMARY KEY (id_materia, id_carrera, id_estudiante, fecha_inscripcion, fecha_nota)
);
CREATE TABLE inscripciones_a_carreras(
	id_estudiante integer NOT NULL,
	id_carrera integer NOT NULL,
	fecha date NOT NULL,
 CONSTRAINT PK_inscripciones_a_carreras PRIMARY KEY (id_estudiante,id_carrera)
);

CREATE TABLE plan_de_carrera(
	id_materia integer NOT NULL,
	id_carrera integer NOT NULL,
	anio_cursado integer,
	cuatrimestre_anio integer,
 CONSTRAINT PK_plan_de_carrera PRIMARY KEY (id_materia,id_carrera));

CREATE TABLE estudiantes(
	id_estudiante integer NOT NULL,
	apellido varchar2(30) NOT NULL,
	nombres varchar2(100) NOT NULL,
	id_tipo_documento integer NOT NULL,
	documento integer NOT NULL,
	id_sexo integer,
	calle varchar2(60) NOT NULL,
	calle_numero varchar2(30) NOT NULL,
	id_barrio integer,
 CONSTRAINT PK_estudiantes PRIMARY KEY (id_estudiante));

CREATE TABLE materias_x_turnos_examenes(
	id_turno integer NOT NULL,
	id_materia integer NOT NULL,
 	id_carrera integer NOT NULL,  
	fecha_del_examen date NOT NULL,
 CONSTRAINT PK_materias_x_turnos_examenes PRIMARY KEY (id_materia, id_carrera, fecha_del_examen)
) ;
-- Creación de claves foráneas
 ALTER TABLE alumnos_cursando_materias  ADD CONSTRAINT FK_alu_cur_mat_estados FOREIGN KEY(id_estado)
REFERENCES estados_cursados (id_estado);
ALTER TABLE alumnos_cursando_materias  ADD CONSTRAINT FK_alu_cur_mat_estudiantes FOREIGN KEY(id_estudiante)
REFERENCES estudiantes (id_estudiante);
ALTER TABLE alumnos_cursando_materias  ADD CONSTRAINT FK_alu_cur_mat_plan_carrera FOREIGN KEY(id_materia, id_carrera)
REFERENCES plan_de_carrera (id_materia, id_carrera);
ALTER TABLE alumnos_examenes  ADD CONSTRAINT FK_alu_exam_estudiantes FOREIGN KEY(id_estudiante)
REFERENCES estudiantes (id_estudiante);
ALTER TABLE alumnos_examenes ADD  CONSTRAINT FK_alu_exam_mat_x_tur_exam FOREIGN KEY(id_materia, id_carrera, fecha_del_examen)
REFERENCES materias_x_turnos_examenes (id_materia, id_carrera, fecha_del_examen);
ALTER TABLE alumnos_cursando_notas  ADD CONSTRAINT FK_alu_curs_notas_t_notas FOREIGN KEY(id_tipo_nota)
REFERENCES tipo_notas (id_tipo_nota);
ALTER TABLE alumnos_cursando_notas ADD  CONSTRAINT FK_alu_curs_notas_alu_cur_mat FOREIGN KEY(id_materia, id_carrera, id_estudiante, fecha_inscripcion)
REFERENCES alumnos_cursando_materias (id_materia, id_carrera, id_estudiante, fecha_inscripcion);
ALTER TABLE inscripciones_a_carreras  ADD CONSTRAINT FK_insc_a_carr_carr FOREIGN KEY(id_carrera)
REFERENCES carreras (id_carrera);
ALTER TABLE inscripciones_a_carreras  ADD CONSTRAINT FK_insc_a_carr_est FOREIGN KEY(id_estudiante)
REFERENCES estudiantes (id_estudiante);
ALTER TABLE plan_de_carrera  ADD CONSTRAINT FK_p_de_carrera_carr FOREIGN KEY(id_carrera)
REFERENCES carreras (id_carrera);
ALTER TABLE plan_de_carrera  ADD CONSTRAINT FK_p_de_carrera_mate FOREIGN KEY(id_materia)
REFERENCES materias (id_materia);
ALTER TABLE estudiantes  ADD CONSTRAINT FK_estudiantes_barrios FOREIGN KEY(id_barrio)
REFERENCES barrios (id_barrio);
ALTER TABLE estudiantes  ADD CONSTRAINT FK_estudiantes_sexos FOREIGN KEY(id_sexo)
REFERENCES sexos (id_sexo);
ALTER TABLE estudiantes  ADD CONSTRAINT FK_estudiantes_tipo_doc FOREIGN KEY(id_tipo_documento)
REFERENCES tipo_documentos (id_tipo_documento);