43 - Indice único (unique)


Problema:
Un instituto de enseñanza guarda los siguientes datos de sus alumnos:
 - año de inscripción,
 - número de inscripto, comienza desde 1 cada año,
 - nombre del alumno,
 - documento del alumno,
 - domicilio,
 - ciudad,
 - provincia,
 - clave primaria: número de inscripto y año de inscripción.

1- Elimine la tabla "alumnos" si existe.

2- Cree la tabla definiendo una clave primaria compuesta (año de inscripción y número de 
inscripto), un índice único por el campo "documento" y un índice común por ciudad y provincia:
 create table alumnos(
  año year not null,
  numero int unsigned not null,
  nombre varchar(30),
  documento char(8) not null,
  domicilio varchar(30),
  ciudad varchar(20),
  provincia varchar(20),  
  primary key(año,numero),
  unique i_documento (documento),
  index i_ciudadprovincia (ciudad,provincia),
 );

3- Vea los índices de la tabla.

4- Ingrese algunos registros. Ingrese 2 ó 4 alumnos para los años 2004, 2005 y 2006.

5- Intente ingresar un alumno con clave primaria repetida.

6- Intente ingresar un alumno con documento repetido.

7- Ingrese varios alumnos de la misma ciudad y provincia.



 

Otros problemas:
A) Una clínica registra las consultas de los pacientes en una tabla llamada "consultas" que 
almacena la siguiente información:
 - fecha de la consulta,
 - número de consulta por día,
 - documento del paciente,
 - obra social del paciente,
 - nombre del médico que atiende al paciente,

1- Elimine la tabla si existe.

2- Cree la tabla con una clave primaria compuesta (fecha y número de consulta); un índice único 
(fecha,documento y médico). Hay 2 campos por los cuales podemos realizar consultas 
frecuentemente: "medico" y "obrasocial", cree índices para esos campos.

3- Cree la tabla con la siguiente estructura:
 create table consultas(
  fecha date,
  numero int unsigned,
  documento char(8) not null,
  obrasocial varchar(30),
  medico varchar(30),
  primary key(fecha,numero),
  unique i_consulta(documento,fecha,medico),
  index i_medico (medico),
  index i_obrasocial (obrasocial)
 );

4- Vea los índices.

5- Los valores de la clave primaria no pueden repetirse. Intente ingresar dos pacientes el mismo 
día con el mismo número de consulta.

6- Los valores para el índice único no pueden repetirse. Intente ingresar una consulta del mismo 
paciente, en la misma fecha con el mismo médico.

7- Note que los índices por los campos "medico" y "obrasocial" son comunes, porque los valores se 
repiten. Ingrese consultas en las cuales se repitan los médicos y las obras sociales.


B) Una empresa de remises tiene registrada la información de sus vehículos en una tabla 
llamada "remis".

1- Elimine la tabla si existe.

2- Cree la tabla con una clave primaria por número de vehículo y un índice único por "patente", 
éste es un valor por el cual podemos realizar consultas frecuentemente y es único (igual que el 
número del remis):
 create table remis(
  patente char(6) not null,
  numero tinyint unsigned not null,
  marca varchar(15),
  modelo year,
  primary key (numero),
  unique i_patente (patente),
 );

3- Vea los índices y analice la información.

4- Los valores de la clave primaria no pueden repetirse. Intente ingresar 2 vehículos con el mismo 
número.

5- Los valores para el índice único no pueden repetirse. Intente ingresar 2 vehículos con igual 
patente.

Retornar