prefectures テーブル定義
概要
都道府県を管理するマスターテーブル。住所情報や配送先選択で使用する都道府県の選択肢を管理する。
用途: 住所登録、配送先選択、都道府県別の分析などで使用。
テーブル情報
| 項目 | 値 |
|---|---|
| テーブル名 | prefectures |
| エンジン | 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_prefectures | id | 主キー |
| INDEX | idx_sort_order | sort_order | 表示順序検索 |
| INDEX | idx_is_active | is_active | 有効フラグ検索 |
外部キー制約
なし(マスターテーブルのため)
リレーション
このテーブルは他のテーブルから参照される:
- addresses: 住所情報の都道府県を記録
- shipping_addresses: 配送先の都道府県を記録(将来実装)
- users: ユーザーの都道府県を記録(将来実装)
データ例
| id | name | sort_order | is_active |
|---|---|---|---|
| 1 | 北海道 | 1 | TRUE |
| 2 | 青森県 | 2 | TRUE |
| 3 | 岩手県 | 3 | TRUE |
| ... | ... | ... | ... |
| 47 | 沖縄県 | 47 | TRUE |
備考・注意事項
都道府県の管理方針
標準的な並び順
- sort_order: 北海道から沖縄まで、北から南への順番で並ぶ(1〜47)
- 表示順序: 住所選択ドロップダウンなどではこの順序で表示
都道府県コード(将来実装)
将来的に都道府県コード(JIS X 0401)を追加する場合:
都道府県コード例: - 01: 北海道 - 02: 青森県 - 13: 東京都 - 27: 大阪府 - 47: 沖縄県
有効化ポリシー
- is_active: 有効/無効フラグ
- デフォルト: すべての都道府県が有効(通常は無効化しない)
- 無効化: 特別な理由がある場合のみ無効化
クエリ例
-- 有効な都道府県一覧を取得(表示順序順)
SELECT id, name
FROM prefectures
WHERE is_active = TRUE
ORDER BY sort_order;
-- 都道府県別の住所数(将来実装)
SELECT
p.name,
COUNT(a.id) as address_count
FROM prefectures p
LEFT JOIN addresses a ON p.id = a.prefecture_id
WHERE p.is_active = TRUE
GROUP BY p.id, p.name
ORDER BY p.sort_order;
Eloquentモデル例
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Prefecture extends Model
{
protected $fillable = [
'name',
'sort_order',
'is_active',
];
protected function casts(): array
{
return [
'is_active' => 'boolean',
];
}
// 有効な都道府県一覧を取得
public static function getActivePrefectures(): Collection
{
return self::where('is_active', true)
->orderBy('sort_order')
->get();
}
// 並び替え順で取得
public function scopeOrdered($query)
{
return $query->orderBy('sort_order');
}
}