Hi,
there is a third option. You can have them as separate aggregates, even without a Domain Service. A questionnaire can reference an Event (this aggregate name will definitely lead to a decent amount of confusion ). This would primarily reflect in the query model. In the fields of the Event (aggregate) itself, you don’t have to see it. The same would apply for Survey.
You asked: “So how should I reference Survey and Questionnaire, having only EventId at the time?” If you don’t have the aggregate ID, there is only one way to obtain it: do a query. That’s what the query model is for.
Hope this helps.
Cheers,
Allard