Primer problema:
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';
Segundo problema:
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
Ver solución
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;