我正在尝试确定最合适的方法来存储产品税。

TABLE products (
    id
    name
    description
)

TABLE tax_zones (
    id
    code
)

TABLE tax_rates (
    id
    zone_id
    rate
)

TABLE tax (
    id
    rate_id
)

TABLE product_tax (
    id
    product_id
    tax_id
)


我承认,即使我对此结构有些困惑,所以我需要一些帮助以简化或阐明这两者。

我的商店是国际性的,因此仅适用于加拿大和美国...产品可以在世界各地购买。

最佳答案

product_tax表的目的是什么?存储每种产品的税收信息不是您应该采取的方式。

美国(可能还有加拿大)的税收因州而异,通常降至邮政编码级别(有时甚至是子邮政编码!)。处理税款的正确方法是将其应用于整个购物车(即按百分比计算),而不是应用于单个产品。

至于您如何处理税收……欢迎来到在线购物的有趣世界。那里有一些提供Web服务的服务(因为税金变化非常频繁)。一种这样的产品是AvaTax

我将重申我在评论中所说的话。我已经建立了许多购物车(并且在此过程中被烧毁了!),我在该领域具有丰富的经验。


  在税收方面,“本地”无关紧要。应课税
  根据国家,州,地区,县,镇等
  物品被“运送”到。换句话说,这是收件人的税
  适用的规则。如果产品是给某人的礼物
  除了购买者以外的其他地区,是他们的税收规定
  应用。换句话说,买方要支付适用于
  收到礼物的人!


另外,我将在下面进一步阐明我的评论...

税与相关产品完全分开。税项应适用于全部费用金额,而不是个别项目。唯一的例外是产品被视为“免税”。这主要适用于某些被视为“必需品”的食品。显然,其他所有东西都被视为奢侈品!

因此,如果购物车中有3件1美元的商品,则应采用8.00%的税率,使总金额达到3.24美元。应用税款后,将增加任何运输费用。运费不属于产品价格的一部分,因此无需征税(运费由FedEx,UPS等预先征税)。

由于税率在地理位置上有所不同,因此尝试在数据库中将“税”值附加到产品上是没有意义的。该数据应分别应用于每笔交易。从Web服务中获取正确的税额可以减少出错的可能性。重要的是要注意税收经常变化。如果经过审核并证明您收取了错误的税款,则可能需要您自己支付差额。税法很少关心谁缴税,只关心缴税。

好吧,那么关于表结构的一些想法...

product table {
    id
    sku [manufacturer or made up]
    related_items
    brand
    description
    features
    specifications
    keywords
    price
    weight
    width
    height
    length
    packaging_type
    shipping_info
    flatrate_shipping
    taxable
    discountable
    insured
    featured
    status [enum('outofstock','instock','specialorder','calltoorder','comingsoon','onorder','sold','onhold','hide')]
    stock
}

category table {
    id
    category_id
    category_name
    category_description
}

product_category table {
    id
    category_id
    product_id
}


上一张表提供了一种将许多产品归为一个类别或将一个产品归为多个的方法。

关于php - 税收数据库架构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16801286/

10-12 13:57