2011-12-17 22 views
0

想像してみましょう: ジョブボードの一種です。製品はそこに仮想です。エントリを投稿するための追加オプションと料金があります。データベース:税金の保存料金と情報

現在、私たちの国では、VATという非常に複雑なルールがあります。ビジネスはPLに位置しています:
- PLからのユーザ - VAT率は23%
ある - EUから個々のユーザー - VAT率は23%
ある - EUから企業 - NP(適用されない)
- 企業/個々のユーザーEU外 - 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情報が格納されます。しかし、2番目のテーブルの構造については考えていません。

編集
それを明確にする:私には0%ルールはありません、それはNP(適用されない)と呼ばれています。しかし、税規則には1つの大きな要件があります:EUからの企業は有効なVAT IDを提供する必要があります。そのため、企業アカウントと個人ユーザーの2つのアカウントタイプを作成しました。

+0

「私には0%のルールはありません。それはNP(not applicable)」と呼ばれています。あなたが*呼び出す*ルールは本当に重要ではありません。適用されないルールは、付加価値税の計算には実質的に0%です。同じパーツに数値パーセンテージと文字列( 'NP')を格納することはできません。それらは異なる制約を持つ異なるデータ型です。 –

+0

ユーザーの請求先住所、配送先住所などを確認して、ユーザーがEUの内外にいるかどうかを判断しますか? –

+0

@Catcall - 提供された住所の詳細に基づいたユーザー国 - そのため、私たちは国ごとに別々のテーブルを使用しました。 – DaveW

答えて

0

これには2つの方法があります。

  1. すべての可能性を保存します。
  2. 、店は唯一のVAT率> 0

を持っている可能性が私はおそらく> 0

VAT率を持っているだけの可能性を保存したいしかし、あなたのルールは私には本当に簡単に見えます2つの可能性しか持たない。

  1. EUのユーザー:23%。 (ポーランドは、EUでまだ右 ある?)
  2. 世界のすべての他の個人や会社:0%

あなたは簡単にユーザーの国を判断し、そのユーザーが個人または会社であるかどうかをすることができます。あなたが欠けているのはEUのメンバーだけです。

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; 
+0

私は自分の質問を編集しました。はい、あなたが正しい。このケースでは2つの税率がありますが、私はデータベースに特定のルールを格納することを考えています、それは重要です:) – DaveW

関連する問題