コンテンツにスキップ

genders テーブル定義

概要

性別を管理するマスターテーブル。顧客登録やユーザー情報で使用する性別の選択肢を管理する。

用途: 顧客情報、ユーザープロフィールでの性別選択肢として使用。

テーブル情報

項目
テーブル名 genders
エンジン 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_genders 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

備考・注意事項

性別の管理方針

プライバシー配慮

  • 任意入力: 性別は任意入力項目として扱う
  • 選択肢の柔軟性: 多様性に配慮し、「その他」「回答しない」などの選択肢を用意

有効化ポリシー

  • is_active: 有効/無効フラグ
  • 無効化: 使用されていない性別を無効化(論理削除ではない)
  • 再有効化: 無効化された性別を再度有効化可能

クエリ例

-- 有効な性別一覧を取得
SELECT id, name
FROM genders
WHERE is_active = TRUE
ORDER BY sort_order;

-- 性別別のユーザー数(将来実装)
SELECT
    g.name,
    COUNT(u.id) as user_count
FROM genders g
LEFT JOIN users u ON g.id = u.gender_id
WHERE g.is_active = TRUE
GROUP BY g.id, g.name
ORDER BY g.sort_order;

Eloquentモデル例

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Gender extends Model
{
    protected $fillable = [
        'name',
        'sort_order',
        'is_active',
    ];

    protected function casts(): array
    {
        return [
            'is_active' => 'boolean',
        ];
    }

    // 有効な性別一覧を取得
    public static function getActiveGenders(): Collection
    {
        return self::where('is_active', true)
            ->orderBy('sort_order')
            ->get();
    }

    // 並び替え順で取得
    public function scopeOrdered($query)
    {
        return $query->orderBy('sort_order');
    }
}