コンテンツにスキップ

tax_rates テーブル定義

テーブル概要

税率のマスターテーブルです。商品ごとに異なる税率(標準税率、軽減税率等)を管理し、適用期間を設定できます。

テーブル名: tax_rates 説明: 税率マスター 用途: 商品の税率管理(消費税10%、軽減税率8%等)

カラム定義

カラム名 NULL デフォルト キー 説明
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PK 主キー
name VARCHAR(100) NOT NULL - - 税率名
rate DECIMAL(5,2) NOT NULL - - 税率(パーセンテージ)
applies_from TIMESTAMP NOT NULL - INDEX 適用開始日時
applies_until TIMESTAMP NULL NULL INDEX 適用終了日時(NULLの場合は無期限)
sort_order INT UNSIGNED NOT NULL 0 INDEX 表示順序
created_at TIMESTAMP NULL NULL - 作成日時
updated_at TIMESTAMP NULL NULL - 更新日時
deleted_at TIMESTAMP NULL NULL INDEX 削除日時(Soft Delete)

インデックス

種別 名称 対象カラム 説明
PRIMARY KEY pk_tax_rates id 主キー
INDEX idx_sort_order sort_order 表示順序検索
INDEX idx_applies_from applies_from 適用開始日時検索
INDEX idx_applies_period applies_from, applies_until 適用期間検索
INDEX idx_deleted deleted_at Soft Delete用

外部キー制約

なし(マスターテーブルのため)

リレーション

関連先テーブル 関連タイプ 外部キー 参照先 ON DELETE ON UPDATE 説明
product_vars 1:N id tax_rate_id SET NULL RESTRICT 1つの税率は複数の商品バリエーションで使用される

データ例

id name rate applies_from applies_until sort_order
1 消費税10% 10.00 2019-10-01 00:00:00 NULL 1
2 軽減税率8% 8.00 2019-10-01 00:00:00 NULL 2
3 消費税8%(旧) 8.00 2014-04-01 00:00:00 2019-09-30 23:59:59 10
4 消費税5%(旧) 5.00 1997-04-01 00:00:00 2014-03-31 23:59:59 11

備考・注意事項

税率管理

命名規則

  • name: 表示用(「消費税10%」「軽減税率8%」等)
  • rate: パーセンテージ値(10.00、8.00等)

適用期間管理

  • applies_from: 税率の適用開始日時(必須)
  • applies_until: 税率の適用終了日時(NULL=無期限)
  • 現在有効な税率: applies_from <= NOW() AND (applies_until IS NULL OR applies_until >= NOW())

税率の種類

日本の消費税

税率 適用対象 適用開始
10% 一般商品・サービス 2019年10月1日〜
8%(軽減税率) 食品(酒類・外食除く)、新聞 2019年10月1日〜

過去の税率(履歴管理)

税率 適用期間
8% 2014年4月1日〜2019年9月30日
5% 1997年4月1日〜2014年3月31日
3% 1989年4月1日〜1997年3月31日

使用例

現在有効な税率一覧

-- 現在適用可能な税率を取得
SELECT id, name, rate, applies_from, applies_until
FROM tax_rates
WHERE applies_from <= NOW()
  AND (applies_until IS NULL OR applies_until >= NOW())
  AND deleted_at IS NULL
ORDER BY sort_order;

特定日時に有効な税率

-- 2020年1月1日時点で有効な税率を取得
SELECT id, name, rate
FROM tax_rates
WHERE applies_from <= '2020-01-01 00:00:00'
  AND (applies_until IS NULL OR applies_until >= '2020-01-01 00:00:00')
  AND deleted_at IS NULL
ORDER BY sort_order;

税率別商品数

-- 税率別の商品バリエーション数
SELECT
    t.name,
    t.rate,
    COUNT(pv.id) as product_var_count
FROM tax_rates t
LEFT JOIN product_vars pv ON t.id = pv.tax_rate_id AND pv.deleted_at IS NULL
WHERE t.deleted_at IS NULL
GROUP BY t.id, t.name, t.rate
ORDER BY t.sort_order;

税率未設定の商品バリエーション

-- 税率が設定されていない商品バリエーション一覧
SELECT
    pv.id,
    p.name as product_name,
    pv.product_code,
    pv.price
FROM product_vars pv
JOIN products p ON pv.product_id = p.id
WHERE pv.tax_rate_id IS NULL
  AND pv.deleted_at IS NULL
  AND p.deleted_at IS NULL
ORDER BY p.name;

パフォーマンス考慮

  • インデックス: applies_fromapplies_untilの複合インデックスで期間検索を高速化
  • キャッシュ: 現在有効な税率はキャッシュ化推奨
  • Soft Delete: deleted_at IS NULL条件をクエリに含める

税率変更時の対応

新税率の追加

-- 2024年10月1日から消費税12%に変更する場合
INSERT INTO tax_rates (name, rate, applies_from, applies_until, sort_order)
VALUES ('消費税12%', 12.00, '2024-10-01 00:00:00', NULL, 1);

-- 既存の消費税10%の適用終了日を設定
UPDATE tax_rates
SET applies_until = '2024-09-30 23:59:59'
WHERE id = 1;

商品の税率変更

-- 新税率への一括変更(消費税10% → 消費税12%)
UPDATE product_vars
SET tax_rate_id = 3  -- 消費税12%のID
WHERE tax_rate_id = 1  -- 消費税10%のID
  AND deleted_at IS NULL;

削除管理(deleted_at)

説明
NULL 有効
TIMESTAMP 削除済み(Soft Delete)

削除時の注意

Soft Delete

外部キー制約: ON DELETE SET NULL

  • deleted_atで論理削除(Soft Delete)
  • デフォルト税率にフォールバック: tax_rate_idがNULLの場合、システムデフォルト税率を適用
  • UI推奨: 削除前に使用中の商品数を表示し、警告を出す
  • 例: 「この税率は5件の商品で使用されています。削除すると、これらの商品はデフォルト税率が適用されます。よろしいですか?」

削除された税率の扱い

  • 管理画面の税率選択肢: 削除済み税率(deleted_at IS NOT NULL)は選択肢に表示されない
  • 価格計算: 税率がNULLの場合はシステムデフォルト税率を適用
  • 履歴保持: 過去の注文データの整合性のため、削除された税率のレコードは物理削除しない

将来の拡張

複数税率の同時適用

現在は1つの税率のみ対応。将来的に複数税率(例:消費税10% + 酒税77円)が必要になった場合:

-- 中間テーブルの追加
CREATE TABLE product_var_tax_rates (
    product_var_id BIGINT UNSIGNED NOT NULL,
    tax_rate_id BIGINT UNSIGNED NOT NULL,
    priority INT UNSIGNED NOT NULL DEFAULT 0,
    PRIMARY KEY (product_var_id, tax_rate_id),
    FOREIGN KEY (product_var_id) REFERENCES product_vars(id) ON DELETE CASCADE,
    FOREIGN KEY (tax_rate_id) REFERENCES tax_rates(id) ON DELETE RESTRICT
);

固定額税の追加

パーセンテージ以外に固定額税(酒税等)を追加する場合:

ALTER TABLE tax_rates
ADD COLUMN tax_type ENUM('percentage', 'fixed') NOT NULL DEFAULT 'percentage' COMMENT '税種別(percentage:パーセント、fixed:固定額)';

地域別税率

将来的に地域別の税率が必要になった場合:

ALTER TABLE tax_rates
ADD COLUMN region_code VARCHAR(10) NULL COMMENT '地域コード(NULL=全国共通)';

更新日: 2024-01-XX バージョン: 1.0