Primer problema:
Una empresa tiene registrados datos de sus empleados en una tabla llamada "empleados".
1- Elimine la tabla si existe:
if object_id('empleados') is not null
drop table empleados;
2- Créela con la siguiente estructura:
create table empleados (
documento varchar(8),
nombre varchar(30),
fechanacimiento datetime,
cantidadhijos tinyint,
seccion varchar(20),
sueldo decimal(6,2)
);
3- Agregue una restricción "check" para asegurarse que no se ingresen valores negativos para el
sueldo:
alter table empleados
add constraint CK_empelados_sueldo_positivo
check (sueldo>0);
4- 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);
5- Intente agregar otra restricción "check" al campo sueldo para asegurar que ninguno supere el
valor 5000:
alter table empleados
add constraint CK_empleados_sueldo_maximo
check (sueldo<=5000);
La sentencia no se ejecuta porque hay un sueldo que no cumple la restricción.
6- Elimine el registro infractor y vuelva a crear la restricción:
delete from empleados where sueldo=6000;
alter table empleados
add constraint CK_empleados_sueldo_maximo
check (sueldo<=5000);
7- Establezca una restricción para controlar que la fecha de nacimiento que se ingresa no supere la
fecha actual:
alter table empleados
add constraint CK_fechanacimiento_actual
check (fechanacimientoVer solución
Segundo problema:
Una playa de estacionamiento almacena los datos de los vehículos que ingresan en la tabla llamada
"vehiculos".
1- Elimine la tabla, si existe:
if object_id('vehiculos') is not null
drop table vehiculos;
2- Cree la tabla:
create table vehiculos(
numero int identity,
patente char(6),
tipo char(4),
fechahoraentrada datetime,
fechahorasalida datetime
);
3- Ingresamos algunos registros:
insert into vehiculos values('AIC124','auto','2007/01/17 8:05','2007/01/17 12:30');
insert into vehiculos values('CAA258','auto','2007/01/17 8:10',null);
insert into vehiculos values('DSE367','moto','2007/01/17 8:30','2007/01/17 18:00');
4- Agregue una restricción "check" que especifique un patrón de 3 letras y 3 dígitos para "patente":
alter table vehiculos
add constraint CK_vehiculos_patente_patron
check (patente like '[A-Z][A-Z][A-Z][0-9][0-9][0-9]');
5- Intente ingresar un registro con un valor inapropiado para "patente":
insert into vehiculos values('AB1234','auto',getdate(),null);
No lo permite.
6- Agregue una restricción "check" que especifique que el campo "tipo" acepte solamente los valores
"auto" y "moto":
alter table vehiculos
add constraint CK_vehiculos_tipo_valores
check (tipo in ('auto','moto'));
7- Intente modificar el valor del campo "tipo" ingresando un valor inexistente en la lista de
valores permitidos por la restricción establecida a dicho campo:
update vehiculos set tipo='bici' where patente='AIC124';
No lo permite.
8- Agregue una restricción "default" para el campo "tipo" que almacene el valor "bici":
alter table vehiculos
add constraint DF_vehiculos_tipo
default 'bici'
for tipo;
Lo acepta. Pero, note que va en contra de la restricción "check" impuesta en el punto 6.
9- Intente ingresar un registro sin valor para "tipo":
insert into vehiculos values('SDF134',default,null,null);
No lo permite porque va contra la restricción "check" del campo.
10- Agregue una restricción "check" para asegurarse que la fecha de entrada a la playa no sea
posterior a la fecha y hora actual:
alter table vehiculos
add constraint CK_vehiculos_fechahoraentrada_actual
check (fechahoraentrada<=getdate());
11- Agregue otra restricción "check" al campo "fechahoraentrada" que establezca que sus valores no
sean posteriores a "fechahorasalida":
alter table vehiculos
add constraint CK_vehiculos_fechahoraentradasalida
check (fechahoraentrada<=fechahorasalida);
12- Intente ingresar un valor que no cumpla con la primera restricción establecida en el campo
"fechahoraentrada":
insert into vehiculos values('ABC123','auto','2007/05/05 10:10',null);
La inserción no se realiza.
13- Intente modificar un registro para que la salida sea anterior a la entrada:
update vehiculos set fechahorasalida='2007/01/17 7:30'
where patente='CAA258';
Mensaje de error.
14- Vea todas las restricciones para la tabla "vehiculos":
sp_helpconstraint vehiculos;
aparecen 5 filas, 4 correspondientes a restricciones "check" y 1 a "default".
15- Establezca una restricción "default" para el campo "fechahoraentrada" para que almacene la fecha
actual del sistema:
alter table vehiculos
add constraint DF_vehiculos_fechahoraentrada
default getdate()
for fechahoraentrada;
16- Ingrese un registro sin valor para "fechahoraentrada":
insert into vehiculos values('DFR156','moto',default,default);
17- Vea todos los registros:
select *from vehiculos;
18- Vea las restricciones:
sp_helpconstraint vehiculos;
4 restricciones "check" y 2 "default".
Ver solución
if object_id('vehiculos') is not null
drop table vehiculos;
create table vehiculos(
numero int identity,
patente char(6),
tipo char(4),
fechahoraentrada datetime,
fechahorasalida datetime
);
insert into vehiculos values('AIC124','auto','2007/01/17 8:05','2007/01/17 12:30');
insert into vehiculos values('CAA258','auto','2007/01/17 8:10',null);
insert into vehiculos values('DSE367','moto','2007/01/17 8:30','2007/01/17 18:00');
alter table vehiculos
add constraint CK_vehiculos_patente_patron
check (patente like '[A-Z][A-Z][A-Z][0-9][0-9][0-9]');
insert into vehiculos values('AB1234','auto',getdate(),null);
alter table vehiculos
add constraint CK_vehiculos_tipo_valores
check (tipo in ('auto','moto'));
update vehiculos set tipo='bici' where patente='AIC124';
alter table vehiculos
add constraint DF_vehiculos_tipo
default 'bici'
for tipo;
insert into vehiculos values('SDF134',default,null,null);
alter table vehiculos
add constraint CK_vehiculos_fechahoraentrada_actual
check (fechahoraentrada<=getdate());
alter table vehiculos
add constraint CK_vehiculos_fechahoraentradasalida
check (fechahoraentrada<=fechahorasalida);
insert into vehiculos values('ABC123','auto','2007/05/05 10:10',null);
update vehiculos set fechahorasalida='2007/01/17 7:30'
where patente='CAA258';
sp_helpconstraint vehiculos;
alter table vehiculos
add constraint DF_vehiculos_fechahoraentrada
default getdate()
for fechahoraentrada;
insert into vehiculos values('DFR156','moto',default,default);
select *from vehiculos;
sp_helpconstraint vehiculos;