CREATE TABLE shop_invitations ( id BIGINT PRIMARY KEY, shop_id BIGINT NOT NULL REFERENCES shops(id), player_id BIGINT NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'pending', invited_by BIGINT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), responded_at TIMESTAMPTZ, CONSTRAINT chk_invitation_status CHECK (status IN ('pending', 'accepted', 'rejected', 'cancelled')), UNIQUE(shop_id, player_id, status) WHERE status = 'pending' ); CREATE INDEX idx_invitations_shop ON shop_invitations(shop_id); CREATE INDEX idx_invitations_player ON shop_invitations(player_id) WHERE status = 'pending'; CREATE INDEX idx_invitations_player_status ON shop_invitations(player_id, status, created_at DESC); CREATE INDEX idx_invitations_shop_status ON shop_invitations(shop_id, status, created_at DESC);