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

[SOLUCIONADO] Varchar como FK

Estas en el tema de Varchar como FK en el foro de Mysql en Foros del Web. Buen dia amigos,tengo una consulta, estoy armando un programa que en un sentido me gustaria que generara los codigos de esta forma normalmente he usado ...
  #1 (permalink)  
Antiguo 22/12/2014, 14:14
 
Fecha de Ingreso: noviembre-2010
Mensajes: 70
Antigüedad: 13 años, 5 meses
Puntos: 0
Varchar como FK

Buen dia amigos,tengo una consulta, estoy armando un programa que en un sentido me gustaria que generara los codigos de esta forma
normalmente he usado El indice FK como int lo cual almacena numero entero
pero me surge la idea de quererlo armar asi 000001, 000002 y asi sucesivamente
ya el FK no seria tipo int, a mi parecer seria tipo varchar.

mi pregunta es, que tan bueno o que tan malo seria hacer algo asi, si haria algun problema en aplicarlo, o si habrian problemas al momento de relacionarlo con otras tablas como en facturas relacionarlo con detalles.
Muchas Gracias
  #2 (permalink)  
Antiguo 22/12/2014, 14:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Varchar como FK

¿Bueno o malo?
En general, si leugo sólo ocntendrá números, carece de utilidad y sentido ponerlo como VARCHAR.
Problemas no tendrás en tanto sea PK, seguirá funcioanndo igual, aunque tendrás que tener mucho cuidado con lo que insertes, ya que si no controlas la longitud de la cadena luego podrías tener códigos como "00001" y "0001", que para el caso serían diferentes.
Por otro lado, podrías tener a la larga problemas de performance, de ordenamiento, etc. Habría que ver que tan bien los manejas.

Exactamente ¿cuál es la ventaja que quieres lograr, o que supones que lograrás?
__________________
¿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 22/12/2014, 16:42
 
Fecha de Ingreso: noviembre-2010
Mensajes: 70
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Varchar como FK

ME imagino que lo tendria que ponercomo varchar para que me pueda contener losceros a la derecha tipo asi, 000001 en ves de 1, y para controlar la longitud usaria
String.format("%05d", 11) ya que lo estoy haciendo en java, para lo cual con el codigo si el numero es 1 obtendria 00001 o si el numero es 300 obtendria 00300 para lo cual siempre sera de 5 digitos, y para que lo quisiera, bueno normalmente el codigo de factur, articulos lo hago obteniendo el valor incremental del indice osea, 1,2,3,4 y asi.

para lo que en apariencia me gustaria que fuera 00001, 00002, para asi tener la oportunidad de generar codigos de barras en base a estos numeros, que opinas tu?

O si hay alguna otra forma de hacerlo sinvar char manteniendo los digitos antes
  #4 (permalink)  
Antiguo 22/12/2014, 17:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Varchar como FK

Estás confundiendo representación visual de un dato, con requisitos de almacenamiento. Son cosas completamente diferentes.
Un numero de factura se almacena como INT UNSIGNED, lo mismo que cualquier otro código numérico secuencial. El que luego se represente con un ancho de 8 dígitos, rellenado a la izquierda con ceros es un problema de programación, no de datos. El dato sigue siendo el mismo sin importar como lo representes luego.
Si más adelante quieres que salga con un formato determinado, es decir con una cantidad de ceros a la izquierda, directamente en la consulta, eso también se puede, y es muy sencillo, sin por eso necesitar corromper los datos de la tabla.
Puedes hacerlo así:
Código SQL:
Ver original
  1. mysql> SELECT CONCAT(LPAD(12, 4,'0'), '-', LPAD(340, 8,'0')) FACTURA;
  2. +---------------+
  3. | FACTURA       |
  4. +---------------+
  5. | 0012-00000340 |
  6. +---------------+
  7. 1 ROW IN SET (0.05 sec)
O simplemente manejarlo por programación (OFF TOPIC en este foro).

El único caso donde se debe usar obligatoriamente un VARCHAR para almacenar un código es cuando se trata de un código de barras, porque los ceros tienen valor de representación, es decir, son parte del valor a almacenar. Pero se trata de un caso especial y sólo para esos códigos.
Asimismo, los códigos que se guardan obligatoriamente como VARCHAR son sólo los que llevan letras...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 22/12/2014, 17:55
 
Fecha de Ingreso: noviembre-2010
Mensajes: 70
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Varchar como FK

AGradezco inmensamente tus respuestas, creo que lo mejor sera continuar con Integer para no tener futuros problemas.

muchas Gracias.

Etiquetas: tabla, varchar
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 12:29.