Идентификатор родителя на ребенке, безусловно, путь. Подумайте о внешнем ключе базы данных. Отношение сохраняется как указатель родительского идентификатора в дочерней записи.
Когда вы создаете экземпляр AR в памяти, чтобы использовать его, вы должны заполнить список детей, используя указатель ParentID. Если это дорого, как это звучит, возможно, вы внедрили функцию заполнения по требованию, чтобы не платить цену, если в этом нет необходимости.
Существует два подхода к таблице событий. Он либо содержит все свойства объекта после внесения изменения, либо может содержать только измененные поля. Если вы хотите сохранить все свойства, то ParentID должен быть в каждом событии. Если вы предпочитаете сохранять только изменения, то где-то в списке событий для этого объекта должен быть ParentID;возможно только в событии создания. С помощью Event Sourcing вы суммируете все события изменения, чтобы получить текущее состояние, так что это даст вам ParentID в сущности.