FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
codigo de producto como primary key
Buenas de nuevo,
Se que es una pregunta muy basica, pero estaba intentando hacer una base de datos de productos de un super y tengo la duda de si el codigo del producto (el del codigo de barras) se pueda usar o no como clave primaria. Estuve buscando en san google y, en principio, no recomiendan ese metodo sobretodo si va a usar en otras consultas, mejor usar un autoincremental. La pregunta es si esto es correcto, como se puede usar la clave codigo de producto (numero del codigo de barras) para que las consultas sean agiles como con la primary key, (imagino que como index pero no seria tan rapido) porque firebird no tiene alternative key. gracias |
#2
|
|||
|
|||
Hola foristas, un cordial saludo.
Pues les voy a contar una experiencia reciente respecto a un sistema para cobro de catastro en Colombia (Impuesto Predial) donde el identificador de la tabla principal del sistema era el la cédula catastral de los inmuebles, todo estaba perfecto pero el gobierno cambio la estructura y contenido de esa cédula catastral. La decisión que tomé fue conservar como identificador la cédula catastral y hacer una conversión de datos, levantar llaves foráneas y actualizar todas las tablas donde se hacia referencia a la cédula catastral, y crear un campo para guardar la cédula catastral anterior. Pero el problema se va a presentar en el futuro porque dentro de la cédula catastral hay 4 digitos que por el momento está en ceros (0000) pero que van a contener el codigo de Barrio / Vereda. Que sucede, esa concepción rompe el diseño de bases de datos pues eso 4 digitos no deberián forma parte de la llave primaria, la llave primaria depende de otras cosas para existir y puede variar en el tiempo y eso debe evitarse a toda costa. Que me toca hacer ? Pues crear un identificador consecutivo oculto al usuario, crear una llave única (uk = unique key) para la cedula catastral porque eso si es seguro que no puede haber dos cedulas catastrales con igual valor. Las consultas se pueden volver más complejas y más lentas y el trabajo de optimización se torna más importante. Mi recomendación utiliza un consecutivo como identificador, utiliza el codigo del producto como llave alterna única UK (esto lo permite firbird) si y solamente si se garantiza que no habrá dos registros con igual código de producto. Si el cliente por ejemplo quiere diferenciar por colores y tallas y los quiere manejar como productos diferentes los códigos también son distintos ?
__________________
Luis Fernando Buelvas T. |
#3
|
||||
|
||||
Puedes crear un índice para ese campo, si no lo usas como clave primaria. Por la velocidad no te preocupes, es igual, o más rápido.
|
#4
|
||||
|
||||
Hola.
Un apunte sobre el tema de los códigos de barra. Aunque parezca extraño los códigos de pueden barra cambiar para un mismo artículo con lo que será fácil que te encuentres en existencias dos artículos idénticos pero con distintos códigos de barras lo que te generará un problema grave. La solución para esto sería tener una tabla adicional de códigos en la que se guarde el código interno del artículo junto con su código de barras asociado y a la hora de buscar el artículo hacer una búsqueda del código de barras en esa tabla y luego buscar en la tabla de artículos el código interno que te devuelve esa búsqueda. Esto es bastante útil puesto que puedes tener códigos de barras ilimitados para un mismo artículo y al mismo tiempo puedes asignarle a ciertos artículos de venta muy habitual códigos rápidos como el 1, 2, etc. Saludos
__________________
Be water my friend. |
#5
|
||||
|
||||
Sólo como apostilla, según algunas lecturas (Scott W. Ambler, por ejemplo), no es buena idea usar como clave primaria cualquier dato que tenga que ver con las reglas de negocio. Pero sobre gustos...
Saludos |
#6
|
||||
|
||||
Algún apunte más, aunque creo que ya te lo han comentado.
Los numéricos siempre son mejores como claves que los alfanuméricos. Siempre puedes crearle un índice único por ese código, sin que sea clave primaria. Asegúrate de que cumple condiciones de Pk o índice único. No todos los códigos de barras lo cumplen. diferentes productos pueden tener el mismo cód. de barras (al menos en algunos campos) y el mismo artículo puede tener más de un código de barras.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#7
|
||||
|
||||
Se debe utilizar un código que tu mismo generes basado en las necesidades del cliente. Este código es lo que se conoce como SKU (Stock Keeping Unit) y debe ser único para cada artículo y por supuesto puede tener ligados n número de códigos de barras siempre que sea exactamente el mismo artículo ya que los fabricantes a veces cambian sus códigos cuando cambian la presentación, el empaque o la fórmula de sus productos. Para el caso de los supermercados por lo regular los SKUs se dividen en departamentos y el código puede contener el número del mismo.
Por ejemplo tenemos los siguientes departamentos con sus códigos: Abarrotes 92 Químicos del Hogar 13 Salud y Belleza 02.. Entonces los SKus de abarrates podrían empezar con 92 seguido del número de cifras que requieras según tu estimación de stock (92000 al 92999 por ejemplo). Asi en todo momento puedes identificar a que departamento pertenece un artículo solo sabiendo su SKU, además te puede servir para poder dar de alta y vender artículos que de origen no traen código de barras, dicho código lo puedes generar tu mismo.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#8
|
||||
|
||||
Gracias a todos por responder,
Si, ya lo aplique como decis
Bueno eso lo he sacado del flamerobin de lo que ya hice. La tabla de ventas y detalleventas quedaria asi, no se si esta bien.
Aprovechando la pregunta . Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
¿Cómo "sacar" la existencia de un producto? | Yare | SQL | 11 | 22-02-2013 23:28:24 |
Consultar el campo precio mediante el codigo de un producto | GABOCABALLERO | Conexión con bases de datos | 6 | 17-10-2010 17:30:55 |
¿Cómo definir un "primary key" en tiempo de ejecución? | SMTZ | .NET | 1 | 21-12-2005 19:43:00 |
primary key | AMO | SQL | 7 | 14-02-2004 20:50:05 |
Primary Key y Unique Key | DrMatasanos | Conexión con bases de datos | 1 | 21-05-2003 11:01:20 |
|