4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

金融システムで取りこぼしゼロを目指すSQL+Java設計の考え方

4
Posted at

はじめに

金融系システムでは、正確性・確実性・信頼性が最優先です。
特に、発信・受信データや統合前金融機関情報など、条件が多い場合は「取りこぼしゼロ」を意識した設計が重要です。
この記事では、PostgresとJavaを例に、SQLとJavaの条件分担による安全な設計パターンを解説します。

健全性とは

金融システムの健全性は、次の要素で構成されます:
確実性:システムが落ちない、データの取りこぼしがない、大量データ・攻撃に耐えられる
正確性:金額・件数の誤差ゼロ、トランザクションの整合性
セキュリティ:不正アクセス・改ざん防止、通信の暗号化
運用性・監視:異常検知、障害復旧
金融システムでは「信頼」が最優先であり、健全性を高めることがその土台になります。

SQLとJavaの条件分担の考え方

  1. SQLでざっくり取得
    最小限の条件だけをSQLで絞る
    データ量が少ない場合は、全件取得してもパフォーマンスに問題なし
    取りこぼしがないことを最優先
    WITH base AS (
    SELECT *
    FROM transactions
    WHERE transaction_date BETWEEN '2025-09-01' AND '2025-09-30'
    )
    SELECT * FROM base WHERE type='HASSIN';
    SELECT * FROM base WHERE type='JUSHIN';
  2. Javaで条件分岐・整理
    SQLでざっくり取った結果をJavaで振り分ける
    条件が多くてもコードで整理できる
    単体テストや統合テストで条件ごとの取りこぼし確認がしやすい
    enum TransactionType { HASSIN, JUSHIN }

Map> grouped = transactions.stream()
.collect(Collectors.groupingBy(t -> t.getType()));

List hassinList = grouped.get(TransactionType.HASSIN);
List jushinList = grouped.get(TransactionType.JUSHIN);

テスト戦略

SQL単体テスト
境界値、増分データ、ゼロ件ケースを確認
DB上で正確に取得できているか検証
Java統合テスト
条件ごとの振り分けや集計を確認
取りこぼしや抜け漏れがないかチェック

まとめ

SQLで取りこぼしなくざっくり取得 → 正確性の土台
Javaで条件分岐・整理 → 保守性・テスト性・柔軟性を確保
条件の明文化とテスト → 境界値・増分データを必ず確認
金融システムでは「SQLで全条件まとめて一発取得」が必ずしも最適ではなく、ざっくり取得+Java振り分けの方が健全性・保守性・テスト性の面で安心です。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?