sábado, 7 de abril de 2012

11 - Clave primaria.

Una clave primaria es un campo (o varios) que identifica 1 solo registro (fila) en una tabla.

Para un valor del campo clave existe solamente 1 registro. Los valores no se repiten ni pueden ser nulos.
Veamos un ejemplo, si tenemos una tabla con datos de personas, el número de documento puede establecerse como clave primaria, es un valor que no se repite; puede haber personas con igual apellido y nombre, incluso el mismo domicilio (padre e hijo por ejemplo), pero su documento será siempre distinto.

Si tenemos la tabla "usuarios", el nombre de cada usuario puede establecerse como clave primaria, es un valor que no se repite; puede haber usuarios con igual clave, pero su nombre de usuario será siempre distinto.
Establecemos que un campo sea clave primaria al momento de creación de la tabla:

create table usuarios (
  nombre varchar(20),
  clave varchar(10),
  primary key(nombre)
 );
 
Para definir un campo como clave primaria agregamos "primary key" luego de la definición de todos los campos y entre paréntesis colocamos el nombre del campo que queremos como clave.

Si visualizamos la estructura de la tabla con "describe" vemos que el campo "nombre" es clave primaria y no acepta valores nulos(más adelante explicaremos esto detalladamente).

Ingresamos algunos registros:

insert into usuarios (nombre, clave)
  values ('Leonardo','payaso'); 
 insert into usuarios (nombre, clave)
  values ('MarioPerez','Marito');
 insert into usuarios (nombre, clave)
  values ('Marcelo','River');
 insert into usuarios (nombre, clave)
  values ('Gustavo','River');
 
Si intentamos ingresar un valor para el campo clave que ya existe, aparece un mensaje de error indicando que el registro no se cargó pues el dato clave existe. Esto sucede porque los campos definidos como clave primaria no pueden repetirse.

Ingresamos un registro con un nombre de usuario repetido, por ejemplo:

insert into usuarios (nombre, clave)
 values ('Gustavo','Boca');
 
Una tabla sólo puede tener una clave primaria. Cualquier campo (de cualquier tipo) puede ser clave primaria, debe cumplir como requisito, que sus valores no se repitan.

Al establecer una clave primaria estamos indexando la tabla, es decir, creando un índice para dicha tabla; a este tema lo veremos más adelante.


Problema Resuelto: 

Trabajamos con la tabla "usuarios" que contiene el nombre de usuario y su clave.

Eliminamos la tabla, si existe:

drop table if exists usuarios;
 
Creamos la tabla:

create table usuarios (
  nombre varchar(20),
  clave varchar(10),
  primary key (nombre)
 );
 
Vemos la estructura de la tabla:

describe usuarios;
 
Note que en la columna "KEY" del campo "nombre" aparece "PRI", esto significa que ese campo es clave primaria.

Ingresamos algunos registros:

insert into usuarios (nombre, clave) values ('Leonardo','payaso');
 insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
 insert into usuarios (nombre, clave) values ('Marcelo','River');
 insert into usuarios (nombre, clave) values ('Gustavo','River');
 
Al intentar ingresar un valor repetido para el campo clave, aparece un mensaje de error indicando que el registro no se cargó pues el dato está duplicado; veámoslo en un ejemplo, ingresemos un registro con un nombre de usuario repetido:

insert into usuarios (nombre, clave)
 values ('Gustavo','Boca');
 
 
Problema Propuesto: 
 
Trabaje con la tabla "libros" de una librería.

1- Elimine la tabla si existe.

2- Créela con los siguientes campos y clave: codigo (integer), 
   titulo (cadena de 20 caracteres de longitud), autor (cadena de 30), 
   editorial (cadena de 15), codigo será clave primaria:
 
3- Visualice la estructura de la tabla "libros", compruebe la clave primaria.

4- Ingrese los siguientes registros:
 
1,El aleph,Borges,Planeta;
 2,Martin Fierro,Jose Hernandez,Emece;
 3,Aprenda PHP,Mario Molina,Emece;
 4,Cervantes y el quijote,Borges,Paidos;
 5,Matematica estas ahi, Paenza, Paidos;

5- Seleccione todos los registros.

6- Ingrese un registro con código no repetido y nombre de autor repetido.

7- Ingrese un registro con código no repetido y título y editorial repetidos.

8- Intente ingresar un registro que repita el campo clave (aparece mensaje de error 
   por clave repetida).
 
Otros problemas:
 
A) Una empresa almacena los datos de sus clientes en una tabla llamada "clientes".

1- Elimine la tabla "clientes" si existe:
 
2- Créela con los siguientes campos y clave: 
 
create table clientes(
  documento varchar(8),
  apellido varchar(20),
  nombre varchar(20),
  domicilio varchar(30),
  telefono varchar (11),
  primary key(documento)
 );

3- Visualice la estructura de la tabla para compruebar la clave primaria 
establecida.

4- Ingrese los siguientes registros:
 (documento,apellido,nombre,domicilio, telefono)
  22345678,Perez,Marcos,Colon 123,4545454
  23222222,Garcia,Ana,Avellaneda 1345,4252652
  20454545,Lopez,Susana,Urquiza 344,4522525
  35454545,Lopez,Susana,Urquiza 344,4522525
 
 Note que hay 2 registros con todos los datos iguales excepto el documento.

6- Ingrese un cliente con código no repetido y apellido y nombre repetido.

7- Ingrese un cliente con código no repetido y domicilio repetido.

8- Intente ingresar un registro con documento repetido 
(aparece mensaje de error por clave repetida).


B) Un instituto de enseñanza almacena los datos de sus estudiantes 
   en una tabla llamada "alumnos".

1- Elimine la tabla "alumnos" si existe.

2- Cree la tabla con la siguiente estructura: 
 
create table alumnos(
  legajo varchar(4) not null,
  documento varchar(8) not null,
  apellido varchar(30),
  nombre varchar(30),
  domicilio varchar(30),
  primary key (legajo)
 );

3- Ingrese los siguientes registros:
 (legajo,documento,apellido,nombre,domicilio)
  A233,22345345,Perez,Mariana,Colon 234
  A567,23545345,Morales,Marcos,Avellaneda 348
  B654,24356345,Gonzalez,Analia,Caseros 444
  A642,20254125,Torres,Ramiro,Dinamarca 209
  B509,20445778,Miranda,Carmen,Uspallata 999
  C777,28111444,Figueroa,Natalia,Sarmiento 856

4- Seleccione todos los registros.

5- Ingrese 2 alumnos con igual nombre y apellido pero distinto legajo.

6- Intente ingresar un registro que repita el campo clave ("legajo"). 
   Aparece mensaje de error por clave repetida).


No hay comentarios:

Publicar un comentario