Definitely one table for all IOUs.
Scenario 1: As Yko I want a list of all the persons I owe to and how much in total
SELECT personName, sum(amount) totalOwed FROM IouTable WHERE usernameId = <Yko>
Scenario 2: As Yko I want to know how much I owe Bob and why.
SELECT amount, description, date FROM IouTable WHERE usernameId = <Yko> and personName = 'Bob'
Let's look a little closer to your case.
The User table looks quite good. The key candidates include username, usernameId and email. The surrogate usernameId is as good as any for the key.
The IouTable lists all the IOUs. There are a couple of issues with this table.
Perhaphs a Yko has loaned exactly €2 from Bob twice the same day and doesn't bother to fill the description. In this case, you don't have a proper way to distinguish the two transactions. You probably should add a transactionId to uniquely identify the transactions
Furthermore, Yko might have two friends called Bob. How can Yko separate these two from each other. Should there be a list of friends Yko can loan from?
Eventually Yko should pay up. Yko can probably clear out the debt from the table, but then how can we find out later on who has loaned how much to whom? Should there be a column that tells if the dept has been paid?
Some friends of Yko might even consider being paid back in increments. Yko might edit the original amount owed but then again we wouldn't know much was needed in the first place. Should there be a column that tells how much of the dept has been paid so far? If Yko want's to monitor the debt more closely, a list of all repayments might be good idea. Then you could count the total amount of debt left by summing up how much has been repaid.