50 - Restricción primary key


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) not null,
  nombre varchar(30),
  seccion varchar(20)
 );

3- Ingrese algunos registros, dos de ellos con el mismo número de documento:
 insert into empleados
  values ('22222222','Alberto Lopez','Sistemas');
 insert into empleados
  values ('23333333','Beatriz Garcia','Administracion');
 insert into empleados
  values ('23333333','Carlos Fuentes','Administracion');

4- Intente establecer una restricción "primary key" para la tabla para que el documento no se repita 
ni admita valores nulos:
 alter table empleados
 add constraint PK_empleados_documento
 primary key(documento);
No lo permite porque la tabla contiene datos que no cumplen con la restricción, debemos eliminar (o 
modificar) el registro que tiene documento duplicado:
 delete from empleados
  where nombre='Carlos Fuentes';

5- Establezca la restricción "primary key" del punto 4.

6- Intente actualizar un documento para que se repita.
No lo permite porque va contra la restricción.

7-Intente establecer otra restricción "primary key" con el campo "nombre".
No lo permite, sólo puede haber una restricción "primary key" por tabla.

8- Intente ingresar un registro con valor nulo para el documento.
No lo permite porque la restricción no admite valores nulos.

9- Establezca una restricción "default" para que almacene "00000000" en el documento en caso de 
omitirlo en un "insert".

10- Ingrese un registro sin valor para el documento.

11- Vea el registro:
 select * from empleados;

12- Intente ingresar otro empleado sin documento explícito.
No lo permite porque se duplicaría la clave.

13- Vea las restricciones de la tabla empleados (2 filas):
 exec sp_helpconstraint empleados;
Ver solución

 if object_id('empleados') is not null
  drop table empleados;

 create table empleados (
  documento varchar(8) not null,
  nombre varchar(30),
  seccion varchar(20)
 );

 insert into empleados
  values ('22222222','Alberto Lopez','Sistemas');
 insert into empleados
  values ('23333333','Beatriz Garcia','Administracion');
 insert into empleados
  values ('23333333','Carlos Fuentes','Administracion');

 alter table empleados
 add constraint PK_empleados_documento
 primary key(documento);
 delete from empleados
  where nombre='Carlos Fuentes';

 alter table empleados
 add constraint PK_empleados_documento
 primary key(documento);

 update empleados set documento='22222222'
  where documento='23333333';

 alter table empleados
 add constraint PK_empleados_nombre
 primary key(nombre);

 insert into empleados values(null,'Marcelo Juarez','Sistemas');

 alter table empleados
  add constraint DF_empleados_documento
  default '00000000'
  for documento;

 insert into empleados (nombre,seccion) values('Luis Luque','Sistemas'); 

 select * from empleados;

 insert into empleados (nombre,seccion) values('Ana Fuentes','Sistemas'); 

 exec sp_helpconstraint empleados;



 

Segundo problema:
Una empresa de remises tiene registrada la información de sus vehículos en una tabla llamada 
"remis".
1- Elimine la tabla si existe:
 if object_id('remis') is not null
  drop table remis;

2- Cree la tabla con la siguiente estructura:
 create table remis(
  numero tinyint identity,
  patente char(6),
  marca varchar(15),
  modelo char(4)
 );

3- Ingrese algunos registros sin repetir patente:
 insert into remis values('ABC123','Renault 12','1990');
 insert into remis values('DEF456','Fiat Duna','1995');

4- Intente definir una restricción "primary key" para el campo "patente".
No lo permite porque el campo no fue definido "not null".

5- Establezca una restricción "primary key" para el campo "numero".
Si bien "numero" no fue definido explícitamente "not null", no acepta valores nulos por ser 
"identity".

6- Vea la información de las restricciones (2 filas):
 exec sp_helpconstraint remis;

Ver solución
 if object_id('remis') is not null
  drop table remis;

 create table remis(
  numero tinyint identity,
  patente char(6),
  marca varchar(15),
  modelo char(4)
 );

 insert into remis values('ABC123','Renault 12','1990');
 insert into remis values('DEF456','Fiat Duna','1995');

 alter table remis
 add constraint PK_remis_patente
 primary key(patente);

 alter table remis
 add constraint PK_remis_numero
 primary key(numero);

 exec sp_helpconstraint remis;

Retornar