elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Diferencia KEY y PRIMARY KEY
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Diferencia KEY y PRIMARY KEY  (Leído 8,005 veces)
ma__tt

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Diferencia KEY y PRIMARY KEY
« en: 24 Diciembre 2009, 13:48 pm »

Hola, no entiendo cuales la diferencia entre que una clave sea KEY o PRIMARY KEY. Alguién puede aclararme esto?  :)

Muchas gracias


En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Diferencia KEY y PRIMARY KEY
« Respuesta #1 en: 24 Diciembre 2009, 15:51 pm »

Ambos son indices. La mayor diferencia radica en que KEY accepta valores nulos y repetidos, sin embargo PRIMARY KEY no accepta valores nulos ni repetidos  ;)


En línea

ma__tt

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: Diferencia KEY y PRIMARY KEY
« Respuesta #2 en: 24 Diciembre 2009, 17:25 pm »

Vale, capto xd  Ahora bien, he visto en un diseño de una base de datos, que en todas las tablas, tenía un campo (o varios) con primary key, y el resto de atributos puestos como key. La explicación que da es que así se mejora los tiempos de búsqueda. Como véis esto? Una chapuza... es necesario o puede venir bien?... no se debe hacer nunca... en fin, a ver vuestra opinión cuál es y ya de paso, si podéis explicarme que implicaciones tiene esta forma de proceder :P

muchas gracias
En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Diferencia KEY y PRIMARY KEY
« Respuesta #3 en: 24 Diciembre 2009, 21:24 pm »

claro las claves de una tabla la pueden conformar varios campos (indices compuestos), ponerle indices a las tablas es necesario para como decis, acelerar en lo tiempos de busqueda, por experiencia que he visto consultas (habia una consulta que bajo de 1 minuto a 2 segundos con solo agregarle un indice), pero los indices no van en cualquier campo, sino en los que vas a usar en el WHERE, y que presenten valores repetidos. ^TiFa^ te lo puede explicar mejor, pero creo que ya esta cansada de explicar siempre lo mismo ;D, porque ya hubo un post parecido. igualmente te sugiero que hagas una busqueda en internet sobre "que son los indices" y te aseguro vas a encontrar un monton de paginas que te explican muy bien.

saludos.
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Diferencia KEY y PRIMARY KEY
« Respuesta #4 en: 24 Diciembre 2009, 22:27 pm »

Lol seba123neo

Haber chico depende, suponte que quieres la informacion (nombres, apellidos, telefonos) de distintas personas. Procedes a crear 1 sola tabla con todos los datos asumiendo que es suficiente:

Código
  1. SQL> CREATE TABLE DATA(
  2.  2  nombres CHAR(20),
  3.  3  apellidos CHAR(20),
  4.  4  id INTEGER,        
  5.  5  PRIMARY KEY(id),        
  6.  6  telefono NCHAR(20));
  7.  
  8. TABLE created.
  9.  

Y vienes y quieres insertarle datos ahora:

Citar
SQL> insert into data values('Juan Manuel', 'Perez', 1, '555-2344');

1 row created.

SQL> insert into data values('Juan Manuel', 'Perez', 1, '666-3455');
insert into data values('Juan Manuel', 'Perez', 1, '666-3455')     
*                                                                   
ERROR at line 1:                                                   
ORA-00001: unique constraint (MARIAN.SYS_C005303) violated         


Te da error porque obviamente el campo ID que es primario no accepta valores repetidos, por ende o obvias tener el campo primario o le agregas otro valor distinto a 1 pero en este caso terminarias con algo tipo:

Código
  1.  
  2. SQL> SELECT * FROM DATA;
  3.  
  4. NOMBRES              APELLIDOS                    ID TELEFONO
  5. -------------------- -------------------- ---------- --------------------
  6. Juan Manuel          Perez                         1 555-2344            
  7. Juan Manuel          Perez                         2 555-2344
  8. Juan Manuel          Perez                         3 555-2344
  9.  
  10.  

O quizas quieras resolver rapido, y en vez de declarar el campo ID como primary key lo declares como KEY o INDEX para repetir valores y terminarias con algo tipo:

Código
  1. SQL> SELECT * FROM DATA;
  2.  
  3. NOMBRES              APELLIDOS                    ID TELEFONO
  4. -------------------- -------------------- ---------- --------------------
  5. Juan Manuel          Perez                         1 555-2344            
  6. Juan Manuel          Perez                         1 678-2344
  7. Juan Manuel          Perez                         1 777-2234
  8.  
  9.  

Que a la hora de consultar la tabla seria mas rapido en retornarte el valor que si hicieras JOIN con otra, pero aunque esto a nivel de optimizacion es mas rapido, te dejaria valores repetidos y redundantes en la tabla como el ejemplo expuesto anteriormente... por ende en su lugar seria favorable eliminar el campo telefono de la tabla Data y crear otra tabla que haga referencia al telefono de cada usuario.

Código
  1. SQL> CREATE TABLE copia(
  2.  2  id INTEGER,        
  3.  3  telefono NCHAR(20));
  4.  
  5. TABLE created.
  6.  
  7. SQL> CREATE INDEX indice ON copia(id);
  8.  
  9. INDEX created.
  10.  
  11.  
  12.  

Le insertas datos:

Código
  1. SQL> INSERT INTO copia VALUES(1,'666-7655');
  2.  
  3. 1 ROW created.
  4.  
  5. SQL> INSERT INTO copia VALUES(1, '765-4599');
  6.  
  7. 1 ROW created.
  8.  
  9. SQL> SELECT * FROM copia;
  10.  
  11.        ID TELEFONO
  12. ---------- --------------------
  13.         1 666-7655
  14.         1 765-4599
  15.  
  16.  
  17.  

Y ya tienes una tabla no desnormalizada donde puedes agregar todos los telefonos que quieras para un usuario en especifico, y consultar esos datos de retorno:

Código
  1. SQL> SELECT a.nombres, b.telefono FROM copia b, DATA a;
  2.  
  3. NOMBRES              TELEFONO
  4. -------------------- --------------------
  5. Juan Manuel          666-7655
  6. Juan Manuel          765-4599
  7.  
  8.  
  9.  
  10.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
error: expected primary-expression before ‘=’ token
Programación C/C++
YDOM 2 13,133 Último mensaje 18 Noviembre 2013, 03:45 am
por YDOM
CRUD PDO UPDATE y DELETE recogiendo varias primary key
Bases de Datos
synysevend90 0 2,575 Último mensaje 5 Abril 2017, 16:16 pm
por synysevend90
Cambiar la ubicación de una columna con PRIMARY KEY
Bases de Datos
manwan 0 1,591 Último mensaje 2 Enero 2019, 03:22 am
por manwan
Violation of PRIMARY KEY
Programación Visual Basic
stivcen 1 1,507 Último mensaje 27 Enero 2021, 04:31 am
por BlackZeroX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines