コンテンツにスキップ

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)を追加する場合:

ALTER TABLE prefectures
ADD COLUMN prefecture_code VARCHAR(2) NULL COMMENT '都道府県コード(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');
    }
}