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');
}
}