Appending relay URLs to event and profile identifiers (with NIP-19 nevent and nprofile) may look ugly and dumb to you, but it has the same level of dumbness of a normal HTTP URL, if not less.
Discussion
Is there a more elegant, if less practical, approach?
I am actually a bit confused. Where exactly should the client store user preferred relays. (relays the user would like to read/write to? I have seen the relays in Kind 3 in the content field and also in Kind 10002 as tags.
I think using event id + author is a better scheme than event id + relay.
May I ask why is it a better scheme?
In which way is it better?
* event_id + relay gives you the required info to get the full event.
* event_id + author requires you an extra step: knowing author-relay relationship.
In some cases, yes, but one doesn't negate the other. I'm just saying event id + relay is not stupid, it actually kinda works.