CREATE DATABASE IF NOT EXISTS restricciones CHARACTER SET utf8 COLLATE utf8_general_ci;
USE restricciones;

/*La Tabla licenciatura no tiene ninguna llave foránea a otra tabla*/
CREATE TABLE licenciatura (
	clave VARCHAR(6) PRIMARY KEY,
	licenciatura VARCHAR(30),
	annio_creacion YEAR
)ENGINE=InnoDB;


/*La Tabla uea no tiene llaves foráneas a otras tablas*/
CREATE TABLE uea (
	clave VARCHAR(7) PRIMARY KEY,
	nombre VARCHAR(40),
	creditos INT
)ENGINE=InnoDB;

/*La Tabla alumno tiene una llave foránea a la licenciatura en la que está inscrito*/
/*Si se modifica la clave de la uea, se refleja el cambio en todas las filas correspondientes*/
/*Si se eliminina la clave de la uea, ésto no se permitirá*/
CREATE TABLE alumno (
	matricula VARCHAR(12) PRIMARY KEY,
	nombre VARCHAR(40),
	primer_apellido VARCHAR(40),
	segundo_apellido VARCHAR(40),
	licenciatura_clave VARCHAR(7),
	CONSTRAINT llave_foranea_licenciatura
	FOREIGN KEY (licenciatura_clave) REFERENCES licenciatura(clave) ON UPDATE CASCADE ON DELETE RESTRICT 
)ENGINE=InnoDB;

/*La Tabla alumno_uea tiene llaves foráneas a dos tablas: alumno y uea*/
/*Si se modifica la clave de la uea, se refleja el cambio en todas las filas correspondientes*/
/*Si se eliminina la clave de la uea, ésto no se permitirá*/
/*Si se modifica la matrícula de un alumno, ésto no se permitirá*/
/*Si se eliminina la matrícula de un alumno,se elimina la relación*/
CREATE TABLE alumno_uea(
	id_alumno_uea INT PRIMARY KEY AUTO_INCREMENT,
	alumno_matricula VARCHAR(12),
	uea_clave VARCHAR(7),
	CONSTRAINT llave_foranea_alumno
	FOREIGN KEY (alumno_matricula) REFERENCES alumno(matricula) ON UPDATE RESTRICT ON DELETE CASCADE,
	CONSTRAINT llave_foranea_uea
	FOREIGN KEY (uea_clave) REFERENCES uea(clave) ON UPDATE CASCADE ON DELETE RESTRICT
)ENGINE=InnoDB;
/***********************INSERCIONES********************/

/*Insertar en la tabla de licenciaturas que no tiene referencias*/
INSERT INTO licenciatura VALUES
('101112','Ingeniería en Computación',2003),
('101109','Ingeniería en Electrónica',1985),
('101108','Ingeniería Industrial',1985),
('101107','Ingeniería Ambiental',1985),
('101106','Ingeniería Civil',1985);

SELECT * FROM licenciatura;

/*Insertar en la tabla de ueas que no tiene referencias*/
INSERT INTO uea VALUES
('1151023','Métodos Numéricos',9),
('1110012','Cálculo Diferencial II',12),
('1145067','Circuitos Eléctricos',9),
('1151009','Ingeniería y Sociedad',6),
('1151014','Programación Estructurada',9),
('1110015','Ecuaciones Diferenciales',9),
('1164023','Cuidado Ambiental I',9),
('1177099','Sólidos y Materiales',9),
('1143056','Contaminación por Partículas',9),
('1151018','Redacción de Textos',9);

SELECT * FROM uea;

/*Insertar datos en alumno que tiene llave foránea con licenciatura*/
INSERT INTO alumno VALUES ('12345','Nombre_1','Primero_1','Segundo_1','101112'); 
INSERT INTO alumno VALUES ('23456','Nombre_2','Primero_2','Segundo_2','101112'); 
INSERT INTO alumno VALUES ('34567','Nombre_3','Primero_3','Segundo_3','101109'); 
INSERT INTO alumno VALUES ('45678','Nombre_4','Primero_4','Segundo_4','101108'); 
INSERT INTO alumno VALUES ('56789','Nombre_5','Primero_5','Segundo_5','101112'); 
INSERT INTO alumno VALUES ('67890','Nombre_6','Primero_6','Segundo_6','101108'); 
INSERT INTO alumno VALUES ('78901','Nombre_7','Primero_7','Segundo_7','101107'); 
INSERT INTO alumno VALUES ('89012','Nombre_8','Primero_8','Segundo_8','101112'); 
INSERT INTO alumno VALUES ('90123','Nombre_9','Primero_9','Segundo_9','101106'); 
INSERT INTO alumno VALUES ('01234','Nombre_10','Primero_10','Segundo_10','101112'); 
INSERT INTO alumno VALUES ('10123','Nombre_11','Primero_11','Segundo_11','101107'); 
INSERT INTO alumno VALUES ('20123','Nombre_12','Primero_12','Segundo_12','101109'); 
INSERT INTO alumno VALUES ('30123','Nombre_13','Primero_13','Segundo_13','101107'); 

SELECT * FROM alumno;

/*Insertar en alumno_uea que tiene dos llaves foráneas, alumno y uea*/
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('12345','1151023');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('12345','1110012');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('23456','1151018');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('23456','1143056');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('34567','1177099');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('34567','1110015');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('45678','1145067');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('45678','1151014');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('56789','1143056');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('56789','1145067');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('67890','1151018');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('67890','1151023');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('78901','1177099');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('78901','1151018');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('89012','1151009');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('89012','1110015');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('90123','1110012');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('90123','1143056');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('01234','1110012');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('01234','1110015');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('10123','1151014');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('10123','1151018');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('20123','1164023');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('20123','1151009');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('30123','1110015');
INSERT INTO alumno_uea (alumno_matricula,uea_clave) VALUES('30123','1164023');

SELECT * FROM alumno_uea;

