The way i've usually seen this handled is in option 1. The up-side is that this is a fairly easy way for the humans involved to see what is happening. As you said, the downside is that the SQL becomes a bit less elegant.
That's just kinda how it goes, though. In reality, even though it may feel a bit clunky, the resulting queries are clear and readable. You will only have to add sql to new code, as you go, in the areas where you've added new tables.
When you're actually manipulating notes directly, you only have to handle one table.