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_fromとapplies_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:固定額)';
地域別税率
将来的に地域別の税率が必要になった場合:
更新日: 2024-01-XX バージョン: 1.0