39 - Clave primaria compuesta. |
Una playa de estacionamiento guarda cada día los datos de los vehículos que ingresan a la playa en una tabla llamada "vehiculos".
Eliminamos la tabla, si existe:
drop table if exists vehiculos;
Para crear una tabla con clave primaria compuesta usamos la siguiente sintaxis:
create table vehiculos( patente char(6) not null, tipo char(4), horallegada time not null, horasalida time, primary key(patente,horallegada) );
Veamos la estructura de la tabla:
describe vehiculos;
Vemos que en la columna "key", en ambos campos aparece "PRI", porque ambos son clave primaria.
Ingresemos los siguientes registros:
insert into vehiculos (patente,tipo,horallegada,horasalida) values('ACD123','auto','8:30','9:40'); insert into vehiculos (patente,tipo,horallegada,horasalida) values('AKL098','auto','8:45','11:10'); insert into vehiculos (patente,tipo,horallegada,horasalida) values('HGF123','auto','9:30','11:40'); insert into vehiculos (patente,tipo,horallegada,horasalida) values('DRT123','auto','15:30',null); insert into vehiculos (patente,tipo,horallegada,horasalida) values('FRT545','moto','19:45',null); insert into vehiculos (patente,tipo,horallegada,horasalida) values('GTY154','auto','20:30','21:00');
4- Intente ingresar un vehículo con clave primaria repetida:
insert into vehiculos (patente,tipo,horallegada,horasalida) values('ACD123','auto','16:00',null);
Aparece un mensaje de error indicando que la clave está duplicada.
5- Si ingresamos un registro con patente repetida, no hay problemas, siempre que la hora de ingreso sea diferente, sino, repetimos el valor de la clave:
insert into vehiculos (patente,tipo,horallegada,horasalida) values('ACD123','auto','16:00',null);
6- Si ingresamos un registro con hora de ingreso repetida, no hay problemas, siempre que la patente sea diferente, sino, repetimos el valor de la clave:
insert into vehiculos (patente,tipo,horallegada,horasalida) values('ADF123','moto','8:30','10:00');
7- Intente eliminar el campo "horallegada":
alter table vehiculos drop horallegada;
No se puede porque quedarían registros con clave repetida.
8- Elimine los registros con patente "ACD123":
delete from vehiculos where patente='ACD123';
9- Intente nuevamente eliminar el campo "horallegada":
alter table vehiculos drop horallegada;
Ahora si lo permite.
10- Vea la estructura de la tabla para ver cómo quedó la clave primaria:
describe vehiculos;