Seems like you have pressed the campaign dimension into "multi-duty". On the one hand, During sign up, you are tracking the referral (what was the influence that attracted the customer and/or got the customer to register). On the other hand, you are tracking whether promotional campaigns were taken advantage of by the customer when an order was placed/purchase was made.
When a customer signs up, does the "referral campaign" also get associated to any orders placed? Seems like the referral is an attribute of the customer registration event. Can a customer register more than one time? If so, maybe you need an event fact? If not, perhaps the referral should be an attribute about the customer. If you are managing campaigns for different intended reasons (generating registrations vs. generating sales), perhaps you have two different campaign dimensions? If that is not reasonable for your business, I am not seeing anything particularly "bad" about carrying a foreign key from customer to campaign.
Hope this helps you in your design.
For More Information
- Dozens more answers to tough data warehousing questions from Mike Lampa are available here.
- The Best Data Warehousing and Business Intelligence Web Links: tips, tutorials, scripts, and more.
- Have an DW tip to offer your fellow administrators and developers? The best tips submitted will receive a cool prize. Submit your tip today!
- Ask your technical data warehousing questions -- or help out your peers by answering them -- in our live discussion forums.
- Ask the Experts yourself: Our SQL, database design, SQL Server, DB2, object-oriented and data warehousing gurus are waiting to answer your toughest questions.
This was first published in February 2004