犬の健康状態を長期間記録するシステムでは、体重、食事量、運動量、投薬履歴、症状、検査結果など、さまざまな種類のデータを扱う必要があります。特に犬ごとの経時変化を追跡し、将来的に機械学習やAI分析へ活用する場合、最初のデータ設計が重要になります。この記事では、PHPで犬の健康記録システムを構築する際に、正規化されたRDBとイベントソーシングの考え方を比較し、実用的な設計方法を解説します。
犬の健康管理システムで考慮すべきデータの特徴
犬の健康データは一般的な業務システムのデータとは異なり、時間の経過による変化を記録することが重要です。
例えば、体重は毎日のように変化し、食事量や運動量も日によって異なります。また、投薬は開始日や終了日、薬の種類、投与量などの履歴が必要になります。
そのため、現在の状態だけを保存する設計ではなく、「いつ」「何が」「どのように変化したか」を保存できる仕組みが必要です。
| データ種類 | 特徴 |
|---|---|
| 体重 | 時系列で変化を追跡する必要がある |
| 食事 | 種類、量、回数など入力項目が多い |
| 投薬 | 開始・終了・変更履歴が重要 |
| 症状 | 自由入力と分類データの両方が必要 |
基本構成は正規化RDBを中心に設計する
犬の健康管理システムでは、まずMySQLやPostgreSQLなどのRDBを中心に設計する方法が現実的です。
正規化されたRDBでは、犬情報、飼い主情報、健康記録、食事記録、投薬記録などを分離して管理できます。
例えば以下のようなテーブル構成が考えられます。
| テーブル名 | 役割 |
|---|---|
| dogs | 犬の基本情報を保存 |
| owners | 飼い主情報を保存 |
| health_records | 体重や体温などの日次記録 |
| medications | 薬情報を管理 |
| exercise_logs | 散歩や運動履歴を保存 |
このような構造にすると、例えば「7歳以上の犬で、半年間に体重が減少した犬を検索する」といった分析が容易になります。
イベントソーシングを採用するメリットと注意点
イベントソーシングでは、現在の状態ではなく発生した出来事そのものを保存します。
例えば体重管理の場合、以下のようなイベントとして保存します。
2026年1月1日:体重8.2kgを記録
2026年2月1日:体重7.9kgを記録
2026年3月1日:体重7.5kgを記録
この方法では過去の変更履歴を完全に保持できるため、後から「なぜ現在の状態になったのか」を追跡できます。
一方で、イベントソーシングは設計や運用が複雑になります。単純な健康記録アプリでは過剰設計になる可能性もあります。
実用的な設計はRDB+履歴イベント方式がおすすめ
犬の健康管理システムでは、完全なイベントソーシングよりも、RDBを基本にしながら重要な変更履歴だけをイベントとして保存する方式が扱いやすいです。
例えば以下のような構成にします。
- 犬の基本情報はdogsテーブルで管理
- 最新状態はhealth_profilesなどで保持
- 体重、投薬変更、食事変更などは履歴テーブルへ保存
- 大きな変更イベントはevent_logsへ記録
この方式なら通常画面では高速に現在状態を表示でき、分析時には過去データを利用できます。
例えば動物病院へ提出する健康レポートでは現在値を利用し、AI分析では履歴データを利用するといった使い分けが可能です。
欠測値や入力揺れを考慮したデータ設計
飼い主による入力では、毎日必ず同じ形式で記録されるとは限りません。
例えば食事量では、「100g」「0.1kg」「少なめ」「いつも通り」など異なる入力が発生する可能性があります。
そのため、保存時には入力値を正規化する仕組みが必要です。
| 入力例 | 保存方法 |
|---|---|
| 100g | 100グラムとして数値保存 |
| 0.1kg | 100グラムへ変換 |
| 少なめ | 自由記録または分類値として保存 |
また欠測値については、未入力を0として扱わないことが重要です。
例えば体重測定を忘れた日と、体重が0kgの日は意味が全く異なるため、NULLや欠測フラグを利用して区別します。
将来的な機械学習利用を考えたデータ保存方法
将来的にAIで病気予測や健康分析を行う場合、重要なのは大量の正確な時系列データを残しておくことです。
機械学習では以下のようなデータが利用されます。
- 年齢
- 犬種
- 体重推移
- 食事内容
- 運動量
- 投薬履歴
- 症状発生履歴
そのため、最初から分析用データへ変換しやすいように、日時、単位、カテゴリ分類を明確に保存する設計が重要です。
例えば体重を「最近少し減った」という文章だけで保存するより、「測定日時」「体重値」「測定者」を分けて保存することで、後から機械学習用データセットへ変換できます。
PHPで構築する場合のおすすめアーキテクチャ
PHPで犬の健康管理サービスを開発する場合、Laravelなどのフレームワークを利用すると、データ管理やAPI化が容易になります。
基本構成としては以下のような形が考えられます。
- PHPフレームワーク:Laravel
- データベース:MySQLまたはPostgreSQL
- 履歴管理:イベントログテーブル
- 分析用DB:必要に応じて別途作成
- API:スマートフォンアプリ連携用
将来的にスマートフォンアプリやAIサービスと連携する場合も、最初からAPI中心の設計にしておくことで拡張しやすくなります。
まとめ:犬の健康記録システムはRDB+履歴管理が現実的な選択
犬ごとの健康状態を長期間管理し、将来的に機械学習へ活用する場合、完全なイベントソーシングよりも正規化されたRDBを中心に、重要な変化履歴を保存する設計が実用的です。
時系列データ、欠測値、単位違い、入力揺れを考慮して設計することで、飼い主にとって使いやすく、分析にも利用できるデータ基盤になります。
最初から将来的なAI利用を意識して、日時・数値・単位・分類情報を整理して保存することが、長期的に価値のある犬の健康管理システムにつながります。

コメント