C'est une technique très courante. Il est utilisé pour stocker des données hiérarchiques (vous l'appelez récursives) dans une base de données.
Cependant, vous devrez gérer l'intégrité dans votre application, car une clé étrangère ne peut pas être utilisée, car la relation est conditionnelle au drapeau isRecipe.