让我们想象一下: 有一个网站,一种工作板。产品在那里是虚拟的。发布条目还有额外的选项和费用。
现在,在我们国家,有增值税,非常复杂的规则。业务位于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_rates
和tax_rates_rules
。但是不知道第二个表的结构。
修改
为了说清楚:对我来说没有0%的规则,它被称为NP(不适用)。但是,税收规则有一个主要要求:来自欧盟的公司需要提供有效的增值税号。这就是为什么我们创建了两种帐户类型:公司帐户和个人用户。
答案 0 :(得分:0)
有两种方法可以解决这个问题。
我可能只存储增值税税率> 0
但是你的规则看起来很简单,只有两种可能性。
您可以轻松确定用户所在国家/地区以及该用户是个人还是公司。你唯一缺少的是欧盟成员。
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;