Diseño de Base de Datos

25/01/2007 - 21:25 por Mickro | Informe spam
Tengo un negocio en el cual ademas de recibir pagos en efectivo, tambien
recibo ordenes de compra que expide un sindicato por un cierto valor. Por
ejemplo, un cliente puede venir a comprar a mi negocio con una Orden de
Compra de $ 10,00 o sea, tiene $ 10,00 para gastar en mi negocio, a fin de
mes yo le cobro esos $ 10 pesos al sindicato correspondiente.

Tambien puede darse el caso en el que el cliente puede pagarme con, por
ejemplo, 2 Ordenes de Compra cada una de $ 5,00 (que en total harian $
10,00). Pero yo debe ingresar en mi programa las dos ordenes por separado.
No puedo sumarlas he ingresar una sola Orden de $ 10,00.

Tambien puede darse el caso en el que el Total de la venta sea de $ 15,00 y
el cliente me pague con una Orden de Compra de $ 10,00 y el resto me pague
en efectivo (o sea $ 5,00 en efectivo).

Tambien, el cliente puede pagar el total de la compra solamente en Efectivo
o solamente con Ordenes de Compra.

En el caso en que el pago de la venta sea solamente en Efectivo, el valor de
IDOrden de la tabla tblPagos queda NULL.

En base a esto diseñe estas tablas

tblVentas

[IDVenta] (PK)
[Fecha]

tblDetalleVentas

[IDVenta] (FK)
[Codigo] (PK) > ' Codigo de barras del producto vendido
[Descripcion]
[Cantidad]
[Precio]
[Importe]

tblPagos

[IDVenta] (FK)
[IDPago] (PK)
[Tipo] ==> ' Puede ser "Efectivo" u "Orden"
[Monto] ==> ' Cantidad de Efectivo que recibo o Monto de la Orden
[Numero] => ' Numero de la Orden que genera al sindicato, es unica no hay
dos Ordenes con el mismo numero.
[IDCliente]
[FechaEmision] ==> 'Figura en la Orden, es la fecha en que el sindicato
emitio esa orden


Este diseño me funciona bien, pero cuado el pago de la venta es solamente en
Efectivo (que es en la mayoria de los casos) los campos Numero, IDCliente,
FechaEmision quedan en NULL. Mi pregunta es si este diseño es correcto?, en
caso de que no sea asi, como lo diseñarian ustedes?.
Un saludo
 

Leer las respuestas

#1 Gustavo Larriera (MVP)
25/01/2007 - 22:02 | Informe spam
No existe un único diseño cponceptual correcto y del mismo diseño pueden
hacerse diversas representaciones lógicas. Y para hacer más entretenido el
asunto, una representación lógica puede implementarse físicamente de diversas
maneras :-)

Si consideras que tu implementación resuelve bien el problema y puedes
aplicar sin problemas todas las consultas qe necesitas y con buen
rendimiento, entonces déjalo como está.

Si conceptualmente entiendes que las compras en efectivo y las compras con
órdenes son diferentes y deben tratarse en forma diferente cada una, podrías
implementar en tablas separadas.

Pero también considera lo que posibemente te sugieran otros amigos del foro.
Hay muchas alternativas cuando de diseñar se trata.

Gustavo Larriera, MVP
Solid Quality Mentors [www.solidq.com]
Este mensaje se proporciona tal como es, sin garantías de ninguna clase



"Mickro" wrote:

Tengo un negocio en el cual ademas de recibir pagos en efectivo, tambien
recibo ordenes de compra que expide un sindicato por un cierto valor. Por
ejemplo, un cliente puede venir a comprar a mi negocio con una Orden de
Compra de $ 10,00 o sea, tiene $ 10,00 para gastar en mi negocio, a fin de
mes yo le cobro esos $ 10 pesos al sindicato correspondiente.

Tambien puede darse el caso en el que el cliente puede pagarme con, por
ejemplo, 2 Ordenes de Compra cada una de $ 5,00 (que en total harian $
10,00). Pero yo debe ingresar en mi programa las dos ordenes por separado.
No puedo sumarlas he ingresar una sola Orden de $ 10,00.

Tambien puede darse el caso en el que el Total de la venta sea de $ 15,00 y
el cliente me pague con una Orden de Compra de $ 10,00 y el resto me pague
en efectivo (o sea $ 5,00 en efectivo).

Tambien, el cliente puede pagar el total de la compra solamente en Efectivo
o solamente con Ordenes de Compra.

En el caso en que el pago de la venta sea solamente en Efectivo, el valor de
IDOrden de la tabla tblPagos queda NULL.

En base a esto diseñe estas tablas

tblVentas

[IDVenta] (PK)
[Fecha]

tblDetalleVentas

[IDVenta] (FK)
[Codigo] (PK) > ' Codigo de barras del producto vendido
[Descripcion]
[Cantidad]
[Precio]
[Importe]

tblPagos

[IDVenta] (FK)
[IDPago] (PK)
[Tipo] ==> ' Puede ser "Efectivo" u "Orden"
[Monto] ==> ' Cantidad de Efectivo que recibo o Monto de la Orden
[Numero] => ' Numero de la Orden que genera al sindicato, es unica no hay
dos Ordenes con el mismo numero.
[IDCliente]
[FechaEmision] ==> 'Figura en la Orden, es la fecha en que el sindicato
emitio esa orden


Este diseño me funciona bien, pero cuado el pago de la venta es solamente en
Efectivo (que es en la mayoria de los casos) los campos Numero, IDCliente,
FechaEmision quedan en NULL. Mi pregunta es si este diseño es correcto?, en
caso de que no sea asi, como lo diseñarian ustedes?.
Un saludo



Preguntas similares