Appearance
誕生日テーブル(db_birthday)UNIQUE 自動移行
参考保存: 本番での自動移行は
BirthdaySeedInstallerが担います。現役の一括投入は 誕生日マスタ スロカレ一括投入ガイド を参照し、本ファイルは過去の移行内容確認と緊急時の補助資料として扱ってください。
wp_db_birthday に UNIQUE(month, day, chara, divi, title_id) を適用します。誕生日シード(URL 指定取得)の重複スキップ方針に合わせ、同一の「月・日・キャラ名・区分(声優名含む)・作品名マスタ ID」が重複した場合のみスキップし、月日や作品名が異なる同名キャラは別エントリとして登録できます。
作品名は文字列列 title ではなく、汎用マスタ db_title_master の title_id で参照します(Issue #3716)。
自動移行
フロントの誕生日 JOIN が title_id とマスタに依存するため、TitleMasterInstaller → BirthdaySeedInstaller → BirthdayKishuInstaller は WordPress init(priority 0) でも ensure されます(管理画面未訪問でも公開ショートコードが動くようにする)。併せて AdminDatabaseInstaller::ensure_all()(admin_init)からも冪等に呼びます。
既存テーブルがある環境では、次を順に行います。
db_title_masterを作成(未作成なら)db_birthdayにtitle_idを追加し、DISTINCTtitleをマスタへ upsert → バックフィル- 旧 UNIQUE(例:
(chara, divi)や(month, day, chara, divi, title))を DROP - 目標 UNIQUE
(month, day, chara, divi, title_id)追加前に重複行を解消(id 最小を残す) - 文字列
title列を DROP(title_id IS NULL OR 0が残る場合は中止) db_birthday_kishuも同様にtitle→title_idへ移行し、UNIQUE(title_id, kishu_id)を追加
- コード:
core_src/Infrastructure/Database/TitleMasterInstaller.php/BirthdaySeedInstaller.php/BirthdayKishuInstaller.php - 登録:
ConstantsServiceProviderのinit、およびAdminDatabaseInstaller::ensure_all()
手順
- 本番・ステージングにテーマをデプロイする
- 公開ページまたは管理画面に 1 回アクセスする(
initで Installer が走る) - 必要に応じて誕生日シード管理画面で動作確認する(誕生日マスタ スロカレ一括投入ガイド)
運用前提: 移行はリクエスト時の Installer で完結します。手動 SQL は不要です。
確認・トラブルシュート
- インデックス:
SHOW INDEX FROM wp_db_birthday;でuk_birthday_month_day_chara_divi_title_id(列: month, day, chara, divi, title_id)が 1 本だけであること - 列:
titleが無くtitle_idがあること。wp_db_title_masterが存在すること - ログ: PHP エラーログの
[BirthdaySeedInstaller]/[BirthdayKishuInstaller]/[TitleMasterInstaller]を参照 - 移行が途中で止まった場合: 再度アクセスして再試行(
birthday_seed_db_version/birthday_kishu_db_version/title_master_db_versionが目標スキーマ到達まで更新されない限り再実行される) db_birthday_kishuの重複削除: 既存のAUTO_INCREMENT列(例: レガシーid)があればそれを行識別に使い、無い場合のみ一時列_mig_dedup_idを追加する。ADD temporary dedup column failed(there can be only one auto column)が繰り返される場合は、デプロイ済みコードがこの分岐を含むか確認する
関連
- 誕生日シードの一括投入: 誕生日マスタ スロカレ一括投入ガイド
- 作品名マスタ管理: ADM-030 作品名マスタ管理画面