Bases de Datos - Clave Primaria que se resiste

 
Vista:
sin imagen de perfil
Val: 7
Ha disminuido su posición en 5 puestos en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Clave Primaria que se resiste

Publicado por Antonio (4 intervenciones) el 08/02/2020 12:57:16
La clave primaria de una tabla de articulos (productos) quiero que sea compuesta formada por 10 caracteres:
MA 01 09 0322
- los dos primeros caracteres (son los dos primeros caracteres del proveedor) en el ejemplo MA
- a continuación dos cifras pertenecientes al grupo, en el ejemplo 01
- despues otras dos cifras que apuntan al subgrupo o familia, en el ejemplo 09
- por último el número, 0322 en el ejemplo. De forma que cada numero pueda incrementarse según en que familia esté cuando se le vaya a dar de alta.

Estoy intentando el diseño conceptual de esta tabla y no lo veo claro como hacerlo, ya que cada parte seria una clave foranea de otra tabla proveedores, grupo y subgrupo. Me podeis echar un cable?
Gracias. Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Clave Primaria que se resiste

Publicado por floriando (1 intervención) el 04/05/2020 16:31:24
Vamos a ver entendí. Quieres crear artículos con las nomenclaturas del suplidor, categoría y subcategorías del producto más un secuencial, aquí no estoy claro si el secuencial es en orden de acuerdo al suplidor o es un secuencial que incrementa no importa el suplidor (ejemplo: la secuencia 8909 tiene el suplidor A y la 8908 la tiene el suplidor B) o el orden es secuencial por suplidor.

1- si es por suplidor y categoría debe crear una tabla de manejo de secuencias con cada nomenclatura.

2- entiendo que a la hora de crear el producto le está indicado el suplidor y sus categorías. Aquí te creas una función tipo sequencial (create sequence) la cual al invocarla le concatena las nomenclaturas seleccionadas.

En cuanto a las FK las validaciones referenciales deben ser a nivel de base de datos las cuales puedes hacerlas al momento de crear las tablas o luego de crearlas los campos referenciales deben ser parte del PK en cada tabla y crearle índice para que evite posibles contenciones.

Espero te haya servido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Leonardo Daniel A.
Val: 434
Oro
Ha mantenido su posición en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Clave Primaria que se resiste

Publicado por Leonardo Daniel A. (211 intervenciones) el 04/05/2020 19:24:46
Hace muchos años aprendi que no debes manejar llaves primarias asi, son mejor las numericas para relaciones internas, ya si quieres tener otro codigo que identifique al registro, lo usas como indice unico, ademas las consultas las resuelve mas rapido, asi es como hago, en el caso de mi tabla de Productos, tiene un producto_id (integer), y clave_producto (varchar) y en ventas, pido la clave del producto, pero solo para buscarlo, me traigo su id y descripcion, en ventas_detalle, queda asi detalle_id, venta_id (que la relaciona con el encabezado de la venta), producto_id, clave_producto, descripcion, cantidad, total . Guardo la descripcion en el detalle porque puede ser que en un futuro cambies la descripcion del producto y no queremos que afecte a ventas ya realizadas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha disminuido su posición en 5 puestos en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Clave Primaria que se resiste

Publicado por Antonio (4 intervenciones) el 06/05/2020 19:25:41
Muchas gracias a todas las respuestas. Os lo agradezco sinceramente.

Leeré detenidamente vuestras opiniones y veré cual es la mejor solución. Dicho lo cual, he leido por ahí sobre el tema de las claves primarias compuestas que puede adaptarse a este problema, ya que el 01 09 0322 (por ejemplo) es unico y no se puede repetir más.

Que pensais? Seria un problema para las busquedas? Habría otro tipo de problemas?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 28
Ha mantenido su posición en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Clave Primaria que se resiste

Publicado por Vega (13 intervenciones) el 06/05/2020 20:15:41
buff, muchos problemas amigo!

identificar este tipo de claves compuestas es una verdadera faena y una tarea innecesaria... ¿por qué no consideras una tabla designada a manejar esos códigos complejos y asociarlos a un valor numérico autoincrementado? Así manejarías una clave sustituta de una manera algo eficiente. Yo que tú intentaría salirme de ese fregonazo de identificador e intentaría convencer a quien tuviera de que un identificador numérico es infinitamente mejor de manejar en la base de datos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha disminuido su posición en 5 puestos en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Clave Primaria que se resiste

Publicado por Antonio (4 intervenciones) el 06/05/2020 21:02:22
Hola, gracias por tu opinión,

El problema es que todos los articulos (productos) estan ya etiquetados de esta forma y son unos cuantos cientos. Cambiar sería otro fregonazo, como dices tu.

Tambien estaba pensando en mongodb (base de datos NoSql) ya que esta base de datos es más libre y utilizar un codigo de barras code39 o code93.

Que opinais?

¿por qué no consideras una tabla designada a manejar esos códigos complejos y asociarlos a un valor numérico autoincrementado?:
Me puedes ampliar mas la idea?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 28
Ha mantenido su posición en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Clave Primaria que se resiste

Publicado por Vega (13 intervenciones) el 06/05/2020 22:02:33
Sinceramente, no lo veo como un problema, pero sí un pequeño inconveniente. Si usas una tabla para manejar la afinidad entre código de producto y una llave única e intrasferible, lo tendrás solucionado.

Lo que necesitas hacer es acoger una situación que manifestada en la realidad y manejarla de una manera eficaz en un motor de bases de datos conforme a un modelo lógico.

Es más, utilizar una clave sustituta ofrece muchas ventajas cuando se combina con una clave natural ya que puedes manjar excepciones y cambios de una manera más elegante.

Con referencia a la pregunta que te hice anteriormente, crea una tabla "artículos" con un mínimo de dos atributos necesarios para mantener un registro de productos. Los atributos serian los siguientes (como ejemplo):


1
2
3
4
CREATE TABLE Articulo (
  idArticulo int NOT NULL AUTO_INCREMENT,
  Codigo varchar(50) not null unique
);

y una vez tengas allí los códigos usas el idArticulo en la aplicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha disminuido su posición en 5 puestos en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Clave Primaria que se resiste

Publicado por Antonio (4 intervenciones) el 08/05/2020 11:54:02
Hola y Gracias por la respuesta,

No estoy seguro, en este momento, cual va a ser la solución que le vaya a dar.

Todo indica que utilizaré clave sustituta. De todas formas estudiaré las respuestas que me disteis antes para el incremento del siguiente producto de un grupo y subgrupo determinado.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar