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

Duda en PK natural

Estas en el tema de Duda en PK natural en el foro de Mysql en Foros del Web. Una duda simple... En una tabla de telefonos donde se guarda el numero telefonico con clave lada, operador y el tipo de telefono, se puede ...
  #1 (permalink)  
Antiguo 19/03/2012, 12:09
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 8 años, 2 meses
Puntos: 12
Información Duda en PK natural

Una duda simple...

En una tabla de telefonos donde se guarda el numero telefonico con clave lada, operador y el tipo de telefono, se puede usar el numero telefonico como llave primaria? y que ventajas / desventajas tendria?

Hasta ahora solo he usado llaves subrogadas (INT autoincremental), no se en que casos sea mejor usar una llave natural..
  #2 (permalink)  
Antiguo 19/03/2012, 13:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 12 años
Puntos: 2653
Respuesta: Duda en PK natural

La mejor PK es siempre una que se obtenga de los propios atributos de la entidad representada. Yo soy contrario a usar autoincrementales como PK, porque a la larga traen problemas, y no soluciones.
Puntualmente, un numero telefónico sólo puede servir (y a medias) como PK, para la propia empresa de telefonía. Pero no sirve como identificador de personas, entidades comerciales, organizaciones ni ningun otro por varias razones:
1) El numero telefónico no es propio de la persona. Aunque la gente no lo sepa, los números pertenecen a la sepresas proveedoras de telefonía, y aún en ese caso no son asignados en forma explusiva a las personas. Lo que la empresa relaciona es a la persona con el contrato de servicio. El numero es irrelevante.
2) Una misma persona puede contar con N numeros telefónicos, y cada numero telefónico puede en realidad relacionarse con multiples personas, al mismo tiempo o a través del tiempo.
3) El numero telefonico puede "desaparecer", eventualmente, ante modificaciones del sistema telefónico, pero la persona sigue existiendo, aunque muera.

En términos generales, el mejor ID para una persona es el numero de documento nacional. Ese no se repite. En su defecto es el identificador de registro comercial o laboral (CUIT/CUIL en Argentina, RUP en algunos otros países), ya que efectivamente no puede repetirse.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/03/2012, 14:36
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 8 años, 2 meses
Puntos: 12
Respuesta: Duda en PK natural

Entonces si me sirve... ya habia considerado eso que dices y tengo una tabla separada para la persona, donde momentaneamente la estoy identificando con una llave artificial pero tambien asigno un indice unico a un campo de CURP (numero de identificacion nacional en Mexico), esto lo hago asi por que no todos conocen su CURP y por eso no puedo colocarla como primaria

Despues tengo una tabla que relaciona telefonos y personas, donde puse una llave compuesta con el ID de la persona y el numero telefonico, finalmente tengo una tabla de telefonos donde tengo los operadores telefonicos, asi si una persona cambia su telefono solo se actualiza la llave en la tabla relacional, y no afecta a otras personas (o empresas) que usen el mismo numero telefonico

Mas que nada la duda era para simplificar un poco mis JOINs.. ya que primero comenze a usar solo llaves artificiales, y se me comenzo a incrementar el numero de uniones y busquedas que tenia que hacer para actualizar las tablas....al buscar por telefono todo queda mucho mas simple de entender... pero como tengo poco tiempo estudiando SQL no sabia si esto es valido o no...

Etiquetas: natural, subrogada, teléfono
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 23:14.