There can be any number of spends associated to an output. The spends table is read as a multimap against a given point. So for spentness we iterate the spending txs (spend.parent_tx surrogate key) and determine if they are confirmed by search of the strong_tx table with those keys (pointers). So by unconfirming (setting false in strong_tx) all spends of that tx automatically become unconfirmed spends (still spent, but not confirmed spent).