2010-03-08 16 views
6

Al diseñar un sistema de base de datos de gestión de existencias para las ventas y las compras, ¿cuál sería la mejor manera de almacenar los diversos impuestos y otras cantidades similares?La mejor manera de almacenar información de impuestos sobre las ventas

Algunos de los campos que podrían salvarse son:

  • precio unitario sin impuestos
  • precio unitario incluyendo impuestos
  • impuestos por artículo
  • Total impuesto a excluir (redondeado a 2 decimales)
  • Total incluyendo impuesto (redondeado a 2 decimales)
  • Impuesto total (redondeado a 2 decimales)
  • porcentaje de impuestos
  • Fk enlace con el% de impuestos (y no almacenar el importe del impuesto)

Actualmente la solución más razonable hasta el momento es el almacenamiento de abajo (más o menos) del artículo, cantidad, impuestos excluyendo totales (redondeado) y el impuesto total (redondeado).

¿Existe alguna forma mejor de almacenar estos detalles para un sistema genérico?

Dado que el sistema debe ser robusto, ¿qué se debe hacer si hay varios valores de impuestos que pueden necesitar separarse (por ejemplo, estado y ciudad)? En este caso, una tabla separada estaría en orden, pero ¿se consideraría excesiva tener solo un rowID y algún mapeo de taxID a una columna TotalTax?

Para aclarar: Preguntando cómo almacenar los datos sobre las transacciones individuales y ese lado; no tanto los detalles sobre las tasas específicas de impuestos.

+4

Tenga cuidado con las transacciones anteriores que no hacen FK directamente a estos números; si los actualiza, cambiará las cantidades de transacciones anteriores. Tener una configuración de revisión. –

Respuesta

8

El problema con el enfoque es si el impuesto cambia, el IVA (impuesto a las ventas) en el Reino Unido ha cambiado dos veces en los últimos 12 meses.

Cuando trabajaba en sitios web de comercio electrónico, teníamos una tabla Tax_Rate que contenía las diferentes tasas impositivas que una tienda trataría, por ejemplo.

  1. TaxFree - 0%
  2. Vat - 17,5%
  3. DiscountedVat - 15%
  4. etc ...

y sus campos de la tabla de valores pueden tener

  • ItemId
  • PrecioUnidad
  • fk_TaxRate

su mesa fila invoice_detail será

  • f k_OrderId
  • fk_ItemId
  • PerItemPriceCharged (sin normalizar)
  • TaxRateCharged (sin normalizar)
  • QuantityOrdered

su mesa factura será

  • OrderId
  • fk_CustomerId

Donde fk_denotes una clave externa. Tenga en cuenta que OrderId no será único en la tabla de fila de su factura.

EDITORÍAS: Jefe de todo el lugar hoy.

Debe desnormalizar el total de la fila de la factura y el total de la tasa impositiva porque no desea que los cambios futuros en el precio o la tasa impositiva afecten las facturas históricas.

+0

Enfoque interesante, realmente no había considerado no almacenar los detalles del monto del impuesto en absoluto con las transacciones, y si su transacción debe tener tasas impositivas múltiples (si fuera necesario por alguna razón), podría tener una tabla fk para vincular la mesa principal y las diversas tasas de impuestos. – Seph

+0

En esa última edición agregué una fila perdida TaxRateCharged que debería ser desnormalizada en caso de que cambie Tax_Rate. – gingerbreadboy

+0

Sí, también tiene un poco de flexibilidad en que una costumbre podría tener una tasa de impuesto fk_ basada en la ubicación, como STEVE en EE. UU. Tiene un TaxCode USA1 predeterminado. – gingerbreadboy

Cuestiones relacionadas