MySQL - Diseño de una base de datos

 
Vista:

Diseño de una base de datos

Publicado por antoine (4 intervenciones) el 14/01/2017 18:46:58
Hola, estoy diseñando un programa, y tras haber planificado la base de datos, estoy dudando sobre la conveniencia de un determinado campo. Me explico:

Tengo la tabla PEDIDOS con:
ID (clave primaria), fecha, estado, etc

Tengo la tabla ARTICULOS con:
ID (clave primaria), referencia, nombre, etc

Tengo la tabla ENTREGAS con:
ID (clave primaria), fecha, albaran

Para almacenar las entregas que se van recibiendo de los pedidos, tengo la tabla DETALLES_ENTREGA con:
id_entrega (fk que depende de la tabla entregas), id_pedido (fk que depende de la tabla pedidos), id_articulo (fk que depende de la tabla articulos) y cantidad_entregada. La clave primaria de esta tabla son los tres primeros campos (id_entrega - id_pedido - id_articulo).

Mi duda es si lo que he hecho es lo más adecuado, no está mal del todo o si debería cambiarlo, eliminando de la tabla DETALLES_ENTREGA el campo id_pedido, añadiéndolo a la tabla ENTREGAS.
De esta forma tendría en la tabla ENTREGAS cuatro campos, recogiendo para cada entrega el pedido con el que se relaciona, y en la tabla DETALLES_ENTREGA un campo menos, pero aún así la información suficiente sobre el id de la entrega, el id del artículo entregado y la cantidad entregada.

Espero haberme explicado bien.
Muchas gracias de antemano.

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
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Diseño de una base de datos

Publicado por xve (1151 intervenciones) el 15/01/2017 09:17:32
Hola Antoine, la manera que lo has hecho seria correcta, te funcionara, aunque creo que como lo explicas en tu comentario podría ser mejor...

De un pedido, hay una entraga y varios artículos? es decir, no hay dos pedidos y una entrega, o un pedido y dos entregas, verdad?

Si es así, la única tabla que es uno a muchos es la tabla artículos, que por un pedido, puedes haber uno o mas artículos.

Siendo así, yo crearía las tablas de esta manera:
Tengo la tabla PEDIDOS con:
ID (clave primaria), fecha, estado, etc

Tengo la tabla ARTICULOS con:
ID (clave primaria), referencia, nombre, etc

Tengo la tabla ENTREGAS con:
ID (clave primaria), idPEDIDOS, fecha, albaran

Tabla PEDIDOS_ARTICULOS con:
ID (clave primaria), idPEDIDOS, cantidad

Creo que con esto te funcionaria perfectamente... como lo ves?
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

Diseño de una base de datos

Publicado por antoine (4 intervenciones) el 15/01/2017 18:45:16
Hola, xve, muchas gracias por tu respuesta.

La tabla DETALLES_ENTREGA es una tabla que recoge todos los artículos que componen cada una de las entregas que va recibiendo la empresa de los pedidos que ha realizado.

O sea:

La empresa hace pedidos, que se registran en la tabla PEDIDOS. Cada pedido puede contener varios artículos, los cuales se almacenan como filas separadas en otra tabla, DETALLES_PEDIDO, que no la he especificado en la duda porque no venía al caso, pero que se correspondería más o menos con la que me has indicado tú (PEDIDOS_ARTICULOS).

Posteriormente van llegando a la empresa entregas correspondientes a esos pedidos que ha hecho, por lo que puede darse el caso de que para un pedido se produzcan varias entregas, hasta que se complete.

Cada entrega se corresponde única y exclusivamente con un pedido, y a su vez, esa entrega puede contener varios artículos, que es lo que estoy almacenando en la tabla DETALLES_ENTREGA.

Como bien dices, lo que tenía hecho me funcionaba, pero al empezar a trabajar me he dado cuenta de que en la tabla DETALLES_ENTREGA estoy almacenando de manera repetida para cada artículo a qué pedido se corresponde, lo cual veo innecesario ya que también estoy indicando a qué entrega se corresponde, por lo que podría ahorrarme el campo con el id del pedido si lo adjuntase en la tabla ENTREGAS.

Puff, no sé si lo he liado mucho más en la explicación :)

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