Custody is a history table
A current_holder column on the asset would be one read and would answer nothing else: who had it when it was damaged, how long it sat unassigned, whether it was returned at all. The assignments table makes those queries trivial. The price is that finding the current holder is a filter on a null returned_date rather than a direct read, and nothing stops two open assignments for one asset unless a constraint is added.