Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/02/2016, 11:31
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Diseñar correctamente una tabla (Recibo de pago)

Un recibo, usualmente, es un comprobante de recepción de fondos, referido a una Factura. En ciertos países, incluso, un Recibo se usa sólo para la cobranza de servicios, y no productos.
Más alla de eso, cualquier documento que sea comprobante de pago de productos y servicios requiere una relacion maestro-detalle, es decir que deberías tener a menos dos tablas: CabeceraRecibo y Detalle_recibo. La primera con los datos generales de un documento de ese tipo, y la segunda con un registro por cada producto/servicio cobrado.
La emisión del comprobante físico es un tema de aplicación, no de BBDD, aunque puede existir una tabla de ComprobantesEmitidos, para guardar ese detalle.
Adicionalmente, para que el modelo del recibo funcione en el mudo real, es posible que necesites muchas tablas mas, en un esquema algo complejo. Sería el caso de incluir los Medios de Pago, Cuentas de Clientes, Clientes, Stock, Listados de Precios (si hay variaciones de precio en el tiempo), Productos, Servicios, y un largo etcétera.
El nivel de complejidad dependerá del modelo del sistema.

Sobre los tipos de campo que tu has elegido, hay dos errores graves:
1) Todo campo monetario debe sí o sí ser DECIMAL, al menos en MYSQL. En los demás debe usarse un tipo de campo que no sea de punto flotante, ya que ese tipo es por aproximación, y no de precisión. Para darte una idea, un FLOAT o DOUBLE podría hacer que un valor de 395,00 se almacenase como 394,999999998... con lo que pueden acumularse errores e inexactitudes contables.
2) Un campo de descripción NUNCA puede ser TEXT. Este tipo de campos no es indexable y además es innecesariamente lago para una descripción de producto, que muy rara vez requiere más de 500 caracteres.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)