Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

¿Claves naturales o artificiales?

Estas en el tema de ¿Claves naturales o artificiales? en el foro de SQL Server en Foros del Web. hola gente, tengo la siguiente pregunta: ¿Me conviene usar siempre que se pueda las claves naturales (ej: DNI) en mis tablas o usar un clave ...
  #1 (permalink)  
Antiguo 15/05/2012, 09:19
 
Fecha de Ingreso: febrero-2012
Ubicación: Mar del Plata
Mensajes: 8
Antigüedad: 12 años, 2 meses
Puntos: 0
¿Claves naturales o artificiales?

hola gente, tengo la siguiente pregunta:

¿Me conviene usar siempre que se pueda las claves naturales (ej: DNI) en mis tablas o usar un clave artificial (ej: ID identity(1,1)) ?

Un abrazo. gracias...
  #2 (permalink)  
Antiguo 15/05/2012, 09:39
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: ¿Claves naturales o artificiales?

Una columna IDENTITY, no te sirve si vas a tener delete's, ya que no hay una renumeracion de los mismos.
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 15/05/2012, 10:07
 
Fecha de Ingreso: febrero-2012
Ubicación: Mar del Plata
Mensajes: 8
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: ¿Claves naturales o artificiales?

Si no fuera identity y yo le asignara el valor, ¿convienen las claves naturales o artificiales en mis tablas ?

tabla empleados:

dni (pk)
nombre
apellido

0

idEmpleado (pk)
dni (unique)
nombre
apellido

Última edición por scroogle; 15/05/2012 a las 10:17
  #4 (permalink)  
Antiguo 15/05/2012, 12:56
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: ¿Claves naturales o artificiales?

Bueno, ahi depende de las reglas de negocio (el caso que pones), es muy claro que tus 2 campos (dni y idEmpleado), no se pueden repetir, entonces, cualquiera de las 2 prodria pasar a ser una PRIMARY KEY
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 15/05/2012, 20:27
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: ¿Claves naturales o artificiales?

Cita:
Iniciado por iislas Ver Mensaje
Una columna IDENTITY, no te sirve si vas a tener delete's, ya que no hay una renumeracion de los mismos.
Que tal iislas, cuando hablas de renumeracion... podrias explicar un poco mas en detalle a que te estas refieriendo con este termino?

Gracias
  #6 (permalink)  
Antiguo 16/05/2012, 13:01
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: ¿Claves naturales o artificiales?

Hola que tal, bueno lo que pasa es que si tu tienes los siguientes datos:

1
2
3

y haces un delete al 2, te quedaria:

1
3

No se renumera el 3 por el 2.

Depende como vas a utilizar la tabla, es si te sirve un IDENTITY o tu mismo estarla numerando.
  #7 (permalink)  
Antiguo 16/05/2012, 14:58
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: ¿Claves naturales o artificiales?

Drako

Mas que excelente explicacion, gracias.
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 16/05/2012, 16:40
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: ¿Claves naturales o artificiales?

Cita:
Iniciado por drako_darpan Ver Mensaje
Hola que tal, bueno lo que pasa es que si tu tienes los siguientes datos:

1
2
3

y haces un delete al 2, te quedaria:

1
3

No se renumera el 3 por el 2.

Depende como vas a utilizar la tabla, es si te sirve un IDENTITY o tu mismo estarla numerando.
Gracias por el ejemplo, en base al mismo, cree una tabla con dos campos: id int IDENTITY ; nombre char(10)

Cuando fui insertando los distintos nombres el campo ID se fue incrementando en una unidad.

Quise probar lo que vos propones en el ejemplo, y al borrar el nombre correspondiente al ID 2, el registro nro 3 (ID = 3) no se renumero al 2... entonces en Sql Server 2008 los IDENTITYS NO SE REORDENAN???

Aclarenmelo, gracias!
  #9 (permalink)  
Antiguo 17/05/2012, 09:32
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: ¿Claves naturales o artificiales?

Ya se te dijo que NO, no se reordenan y se vas a guardar (almacenar) numeros, hazlo en el tipo de dato correspondiente (INT, BIGINT, DECIMAL, FLOAT, etc).
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 17/05/2012, 11:37
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: ¿Claves naturales o artificiales?

Cita:
Iniciado por iislas Ver Mensaje
Ya se te dijo que NO, no se reordenan y se vas a guardar (almacenar) numeros, hazlo en el tipo de dato correspondiente (INT, BIGINT, DECIMAL, FLOAT, etc).
Pero el ejemplo que posteó drako_darpan, a que tipo de dato corresponde??? No es el caso del IDENTITY?
  #11 (permalink)  
Antiguo 17/05/2012, 15:50
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: ¿Claves naturales o artificiales?

Una vez mas, los campos IDENTITY, al momento de borrar o "sufrir" una inserccion masiva fallida, NO SE RENUMERAN.
__________________
MCTS Isaias Islas
  #12 (permalink)  
Antiguo 17/05/2012, 16:10
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: ¿Claves naturales o artificiales?

Cita:
Iniciado por iislas Ver Mensaje
Una vez mas, los campos IDENTITY, al momento de borrar o "sufrir" una inserccion masiva fallida, NO SE RENUMERAN.
Quedó mas que claro! entonces las claves del tipo IDENTITY no se renumeran... ahora quiero saber si un tipo de dato int definido como PRIMARY KEY puede renumerarse???

Existe alguna clave o constraint que permita renumeración al hacer un delete?

Gracias iislas!
  #13 (permalink)  
Antiguo 17/05/2012, 16:13
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: ¿Claves naturales o artificiales?

NO, tendrias que hacer un MAX(TUCAMPO) + 1

Pero si borras registros intermediaos, ¿como los renumeras?

Solo que hicieras un proceso de renumerar todos tus registros, despues de un delete, pero no lo creo eficiente ni conveniente.
__________________
MCTS Isaias Islas
  #14 (permalink)  
Antiguo 17/05/2012, 16:40
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: ¿Claves naturales o artificiales?

Cita:
Iniciado por iislas Ver Mensaje
NO, tendrias que hacer un MAX(TUCAMPO) + 1

Pero si borras registros intermediaos, ¿como los renumeras?

Solo que hicieras un proceso de renumerar todos tus registros, despues de un delete, pero no lo creo eficiente ni conveniente.
Bien iislas, y ya que estas te consulto, volviendo al ejemplo anterior,

el campo ID (int) como IDENTITY VS. el mismo campo pero como PRIMARY KEY

Cual es mas eficiente en la busqueda de una clave? Deberia ser la PRIMARY KEY, pero me gustaria que me den alguna justificacion tecnica del porque...

Gracias
  #15 (permalink)  
Antiguo 17/05/2012, 17:37
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: ¿Claves naturales o artificiales?

Creo que no tienes ni idea que es una PRIMARY KEY, este, es una columna (s) que te permiten NO REPETIR los registros en tu tabla, ademas de que te sirven para realizar el constrain de liga vs otras tablas (DRI).

Nada que ver con la eficiencia o no de las busquedas.

Para declarar la PK debe tomarse en cuenta que las columnas que la conforman, no deberan sufrir modificacion alguna.

Lee este articulo de Carlos Sacristan:

http://www.helpdna.net/sqlserver_cla...tificiales.htm
__________________
MCTS Isaias Islas

Etiquetas: artificiales, naturales
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:57.