Due to the flexibility of Snowplow, any of the options you mention would technically work although the final decision often comes down to how you intend to use this data when it comes to modelling and creating analytical views from it.
Personally, I like to keep the concept of “Event Schemas” and “Entity Schemas” quite seperate, so I wouldn’t want to use the “Article” schema as a Self Describing event. In a data modelling sense, it doesn’t make much sense to have an event called “Article”, an event is usually created by a user action. I feel like the event name should be reflective of the action the user has taken (for example “ArticleView” or “SubscriptionPurchase”).
An “Article” schema is a great example of an entity schema however, where you would attach this entity to your events to give them additional context.
In your example, my initial reaction is I would create two schemas:
- Subscription Purchase
I would then send a “Subscription Purchase” self describing event with the “Article” context attached. I’d then understand in my data modelling steps that the “Article” context attached to any “Subscription Purchase” event is the last article that a user viewed before purchasing a subscription.
name: 'My First Subscription',
purchasedAt: new Date()
title: 'The Article',
viewedAt: new Date(2020, 03, 18, 14, 05, 12)