Quick Answer: The best way to model campaign membership in a CRM is to treat it as a many-to-many, time-stamped association between a lead/contact and a campaign, not as a single campaign field on the lead record. For reliable attribution, each membership should store the source event, first/last touch timestamps, role or influence type, and the revenue or conversion outcome tied to that interaction.
A robust CRM attribution model separates the person record from the campaign interaction layer, because a lead can participate in multiple campaigns across multiple channels and at different stages of the buying journey. The cleanest design is a junction object or join table that captures each campaign-member relationship with metadata such as campaign ID, lead/contact ID, membership status, first response date, last engagement date, touch type, and attribution weight. This structure supports first-touch, last-touch, multi-touch, and lifecycle-based reporting without overwriting history, while also making downstream analytics, automation, and pipeline influence tracking far more accurate and auditable.