36 - Restricción check |
Una empresa tiene registrados datos de sus empleados en una tabla llamada "empleados". 1- Créela con la siguiente estructura: create table empleados ( documento varchar(8), nombre varchar(30), fechanacimiento date, cantidadhijos smallint, seccion varchar(20), sueldo decimal(6,2) ); 2- Agregue una restricción "check" para asegurarse que no se ingresen valores negativos para el sueldo 3- Ingrese algunos registros válidos: insert into empleados values ('22222222','Alberto Lopez','1965/10/05',1,'Sistemas',1000); insert into empleados values ('33333333','Beatriz Garcia','1972/08/15',2,'Administracion',3000); insert into empleados values ('34444444','Carlos Caseres','1980/10/05',0,'Contaduría',6000); 4- Intente agregar otra restricción "check" al campo sueldo para asegurar que ninguno supere el valor 5000 La sentencia no se ejecuta porque hay un sueldo que no cumple la restricción. 5- Elimine el registro infractor y vuelva a crear la restricción alter table empleados add constraint CK_empleados_sueldo_maximo check (sueldo<=5000); 6- Establezca una restricción para controlar que la fecha de nacimiento que se ingresa no supere la fecha actual 7- Establezca una restricción "check" para "cantidadhijos" que permita solamente valores entre 0 y 15. 8- Vea todas las restricciones de la tabla (5 filas) 9- Intente agregar un registro que vaya contra alguna de las restricciones al campo "sueldo". Mensaje de error porque se infringe la restricción "CK_empleados_sueldo_positivo". 10- Intente agregar un registro con fecha de nacimiento futura. Mensaje de error. 11- Intente modificar un registro colocando en "cantidadhijos" el valor "21". Mensaje de error.Ver solución
drop table if exists empleados; create table empleados ( documento varchar(8), nombre varchar(30), fechanacimiento date, cantidadhijos smallint, seccion varchar(20), sueldo decimal(6,2) ); alter table empleados add constraint CK_empelados_sueldo_positivo check (sueldo>0); insert into empleados values ('22222222','Alberto Lopez','1965/10/05',1,'Sistemas',1000); insert into empleados values ('33333333','Beatriz Garcia','1972/08/15',2,'Administracion',3000); insert into empleados values ('34444444','Carlos Caseres','1980/10/05',0,'Contaduría',6000); alter table empleados add constraint CK_empleados_sueldo_maximo check (sueldo<=5000); delete from empleados where sueldo=6000; alter table empleados add constraint CK_empleados_sueldo_maximo check (sueldo<=5000); alter table empleados add constraint CK_fechanacimiento_actual check (fechanacimiento<current_date); alter table empleados add constraint CK_cantidadhijos_valores check (cantidadhijos between 0 and 15); select * from information_schema.table_constraints where table_name = 'empleados'; insert into empleados values ('24444444','Carlos Fuentes','1980/02/05',2,'Administracion',-1500); insert into empleados values ('25555555','Daniel Garcia','2007/05/05',2,'Sistemas',1550); update empleados set cantidadhijos=21 where documento='22222222';
Una playa de estacionamiento almacena los datos de los vehículos que ingresan en la tabla llamada "vehiculos". 1- Cree la tabla: create table vehiculos( numero serial, patente char(6), tipo char(4), fechahoraentrada timestamp, fechahorasalida timestamp, primary key(numero) ); 2- Ingresamos algunos registros: insert into vehiculos (patente,tipo,fechahoraentrada,fechahorasalida) values('AIC124','auto','2007/01/17 8:05','2007/01/17 12:30'); insert into vehiculos (patente,tipo,fechahoraentrada,fechahorasalida) values('CAA258','auto','2007/01/17 8:10',null); insert into vehiculos (patente,tipo,fechahoraentrada,fechahorasalida) values('DSE367','moto','2007/01/17 8:30','2007/01/17 18:00'); 3- Agregue una restricción "check" para asegurarse que la fecha de entrada a la playa no sea posterior a la fecha y hora actual 4- Agregue otra restricción "check" al campo "fechahoraentrada" que establezca que sus valores no sean posteriores a "fechahorasalida" 5- Intente ingresar un valor que no cumpla con la primera restricción establecida en el campo "fechahoraentrada" 6- Intente modificar un registro para que la salida sea anterior a la entrada Mensaje de error. 7- Vea todas las restricciones para la tabla "vehiculos": select * from information_schema.table_constraints where table_name = 'empleados'; 8- Vea todos los registros
drop table if exists vehiculos; create table vehiculos( numero serial, patente char(6), tipo char(4), fechahoraentrada timestamp, fechahorasalida timestamp, primary key(numero) ); insert into vehiculos (patente,tipo,fechahoraentrada,fechahorasalida) values('AIC124','auto','2007/01/17 8:05','2007/01/17 12:30'); insert into vehiculos (patente,tipo,fechahoraentrada,fechahorasalida) values('CAA258','auto','2007/01/17 8:10',null); insert into vehiculos (patente,tipo,fechahoraentrada,fechahorasalida) values('DSE367','moto','2007/01/17 8:30','2007/01/17 18:00'); alter table vehiculos add constraint CK_vehiculos_fechahoraentrada_actual check (fechahoraentrada<=current_date); alter table vehiculos add constraint CK_vehiculos_fechahoraentradasalida check (fechahoraentrada<=fechahorasalida); insert into vehiculos (patente,tipo,fechahoraentrada,fechahorasalida) values('ABC123','auto','2007/05/05 10:10',null); update vehiculos set fechahorasalida='2007/01/17 7:30' where patente='CAA258'; select * from information_schema.table_constraints where table_name = 'vehiculos'; select * from vehiculos;