-- Squad manager assignment: an owned item assigned as a squad's manager. -- -- Generic, game-neutral canonical state. Core does not know what a "manager" -- means to any game; it only records that one owned item (`owned_card_id`) is -- assigned to a squad in the manager role. The FIFA 17 adapter owns the wire -- meaning (itemType "manager", contract, chemistry) exactly as it owns player -- item shaping — Core just persists the ownership-backed assignment durably and -- atomically, so a manager survives squad save / reload / server restart. -- -- One manager per squad: `squad_id` is the primary key, so a re-assignment -- REPLACEs rather than accumulating (no duplicate-manager rows). -- -- `owned_card_id` references `owned_cards(id)` with ON DELETE CASCADE: quick -- selling / discarding the manager card (a DELETE on owned_cards) removes the -- assignment automatically, so a sold manager is never resurrected on the next -- squad read. Reads additionally re-check the manager still belongs to the club -- (see `club::get_squad_manager`), defending against a stale row left by a -- market transfer (which UPDATEs owner rather than deleting). CREATE TABLE IF NOT EXISTS squad_managers ( squad_id TEXT PRIMARY KEY NOT NULL REFERENCES squads(id) ON DELETE CASCADE, owned_card_id TEXT NOT NULL REFERENCES owned_cards(id) ON DELETE CASCADE, updated_at TEXT NOT NULL ); CREATE INDEX IF NOT EXISTS idx_squad_managers_owned ON squad_managers(owned_card_id);