数据库:存储税率和税率信息

时间:2011-12-17 12:02:51

标签: mysql database database-design

让我们想象一下: 有一个网站,一种工作板。产品在那里是虚拟的。发布条目还有额外的选项和费用。

现在,在我们国家,有增值税,非常复杂的规则。业务位于PL:
- 来自PL的用户 - 增值税率为23%
- 来自欧盟的个人用户 - 增值税税率为23% - 来自欧盟的公司 - NP(不适用)
- 欧盟以外的公司/个人用户 - NP(不适用)。

现在我想知道数据库设计的最佳方法。我们有以下表格:

countries
code VARCHAR(3) PK AI
NAME VARCHAR(200) NN

users
country VARCHAR(3) FK_countries_code
account_type TINYINT //0 - individual, 1 - company

在应用税收规则时,很少有事情适用:
- 用户位置
- 用户帐户类型。

您对数据库设计有什么建议吗?我在考虑改变国家/地区表并在此处应用一些非规范化 - 创建几列:vat_rate_eu_personal等等,但这是一个糟糕的主意。当存储信息时,我也在暗示要实现新表:tax_ratestax_rates_rules。但是不知道第二个表的结构。

修改
为了说清楚:对我来说没有0%的规则,它被称为NP(不适用)。但是,税收规则有一个主要要求:来自欧盟的公司需要提供有效的增值税号。这就是为什么我们创建了两种帐户类型:公司帐户和个人用户。

1 个答案:

答案 0 :(得分:0)

有两种方法可以解决这个问题。

  1. 存储所有可能性。
  2. 仅存储增值税税率>的可能性0
  3. 我可能只存储增值税税率> 0

    但是你的规则看起来很简单,只有两种可能性。

    1. 来自欧盟的个人用户:23%。 (波兰仍然在欧盟, 右?)
    2. 世界上所有其他个人和公司:0%
    3. 您可以轻松确定用户所在国家/地区以及该用户是个人还是公司。你唯一缺少的是欧盟成员。

      create table EU (
        country_code varchar(3) primary key references countries (code)
      );
      
      insert into EU values ('PL'); -- or whatever code you use.
      ...
      

      等等。然后,您可以创建一个查看税率的视图。

      create view VAT_rates as
      select 0 account_type, country_code, .23 VAT_rate
      from eu;