job_masters テーブル定義
概要
職業を管理するマスターテーブル。顧客登録やユーザー情報で使用する職業の選択肢を管理する。
用途: 顧客情報、ユーザープロフィールでの職業選択肢として使用。
テーブル情報
| 項目 | 値 |
|---|---|
| テーブル名 | job_masters |
| エンジン | InnoDB |
| 文字セット | utf8mb4 |
| 照合順序 | utf8mb4_unicode_ci |
| コメント | 職業マスター |
カラム定義
| カラム名 | 型 | NULL | デフォルト | キー | 説明 |
|---|---|---|---|---|---|
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | PK | 主キー |
| name | VARCHAR(100) | NOT NULL | - | - | 名称(会社員、自営業、学生等) |
| sort_order | INT UNSIGNED | NOT NULL | 0 | INDEX | 表示順序 |
| is_active | BOOLEAN | NOT NULL | TRUE | INDEX | 有効フラグ |
| created_at | TIMESTAMP | NULL | NULL | - | 作成日時 |
| updated_at | TIMESTAMP | NULL | NULL | - | 更新日時 |
インデックス
| 種別 | 名称 | 対象カラム | 説明 |
|---|---|---|---|
| PRIMARY KEY | pk_job_masters | id | 主キー |
| INDEX | idx_sort_order | sort_order | 表示順序検索 |
| INDEX | idx_is_active | is_active | 有効フラグ検索 |
外部キー制約
なし(マスターテーブルのため)
リレーション
このテーブルは他のテーブルから参照される:
- users: ユーザーの職業を記録(将来実装)
- customers: 顧客の職業を記録(将来実装)
データ例
| id | name | sort_order | is_active |
|---|---|---|---|
| 1 | 会社員 | 1 | TRUE |
| 2 | 自営業 | 2 | TRUE |
| 3 | 公務員 | 3 | TRUE |
| 4 | 学生 | 4 | TRUE |
| 5 | 主婦・主夫 | 5 | TRUE |
| 6 | 無職 | 6 | TRUE |
| 7 | その他 | 7 | TRUE |
備考・注意事項
職業の管理方針
選択肢の柔軟性
- 一般的な職業: 会社員、自営業、公務員、学生など一般的な職業を用意
- その他オプション: 上記に該当しない場合は「その他」を選択可能
有効化ポリシー
- is_active: 有効/無効フラグ
- 無効化: 使用されていない職業を無効化(論理削除ではない)
- 再有効化: 無効化された職業を再度有効化可能
クエリ例
-- 有効な職業一覧を取得
SELECT id, name
FROM job_masters
WHERE is_active = TRUE
ORDER BY sort_order;
-- 職業別のユーザー数(将来実装)
SELECT
j.name,
COUNT(u.id) as user_count
FROM job_masters j
LEFT JOIN users u ON j.id = u.job_id
WHERE j.is_active = TRUE
GROUP BY j.id, j.name
ORDER BY j.sort_order;
Eloquentモデル例
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Job extends Model
{
protected $table = 'job_masters';
protected $fillable = [
'name',
'sort_order',
'is_active',
];
protected function casts(): array
{
return [
'is_active' => 'boolean',
];
}
// 有効な職業一覧を取得
public static function getActiveJobs(): Collection
{
return self::where('is_active', true)
->orderBy('sort_order')
->get();
}
// 並び替え順で取得
public function scopeOrdered($query)
{
return $query->orderBy('sort_order');
}
}