Hola, nunca he hecho un sistema con productos y ventas, tengo la duda en como hacerlo. Tengo una tabla productos
relacionada con otra tabla tarifas
, que a su vez tiene relación con temporadas
. El sistema es el siguiente, un producto tiene un precio para cada temporada.
A la hora de hacer una venta, tengo una tabla ventas
y he pensado guardar el precio, el id
del producto, el id
de la tarifa, el id
del usuario y unas opciones más que tiene el producto así como el precio de la temporada elegida del producto, y el precio de la opción elegida.
No sé si guardar más información del producto, o simplemente como tengo la relación ya las tengo, pero claro ¿que ocurre si se borra el producto? ¿se suele dejar la posibilidad de borrar el producto? ¿o y si se edita la información del producto?
También tengo dudas en las relaciones, aunque va un poco relacionado con la posibilidad de borrar productos, ya que no sé si poner ON delete
en cascade
, restict
o set null
Un saludo
Respuestas
Aunque algunos te dirán que es una burrada y que puedes acabar con mucha información duplicada, mi recomendación es que en la tabla ventas
guardes toda la información que podría cambiar en el futuro. Un ejemplo: si tienes una tabla ivas
y en el registro de la tabla ventas
guardas solamente el tipo de IVA y no su valor, te encontrarás con muchos problemas cuando el gobierno cambie los porcentajes del IVA. Cosas como el precio, porcentaje de IVA, gastos de envío, descuentos, etc. deberían guardarse directamente con el dato específico y no con una relación a otra tabla.
Con respecto al borrado, te recomiendo que en tus tablas de productos, ofertas y demás apliques el soft delete, que consiste en añadir una columna llamada is_deleted
. Cuando el usuario de la aplicación borre un producto, en vez de borrarlo de la tabla, le cambias el valor de la columna is_deleted
a true
.
Después, en los listados de la aplicación, en la web y en cualquier otro sitio similar, solo muestras los productos cuya columna is_deleted
vale false
. La ventaja es que si una factura, un pedido o una venta hace referencia a ese producto, sus datos siempre estarán disponibles.
@javiereguiluz
Javier no es ninguna burrada lo que comentas.
La tecnica de soft delete la puedes usar en todas las tablas IVA incluido aunque en el IVA sería más interesante utilizar fecha_validez_inicio
y fecha_validez_final
.
Como regla sencilla hay que ver las entidades importantes como facturas como si se tratase de una foto, es decir, guardando en la entidad todos los datos del momento en que se creo la entidad. Para una factura sería dirección del cliente , porcentaje IVA, etc. Como comenta Javier todo aquello susceptible de cambiar el futuro.
@antoniogarcia78
Muchas gracias a los dos, he visto soft delete varias veces pero siempre pensé que para qué se inventó el delete jaja y pensaba que lo ideal para mantener limpia la base de datos era borrarlo todo. Pero claro, nunca he tenido que hacer nada así de importante como son las ventas.
Un saludo!!
@AlbertoVioque