“A hotel booking snowflake schema: FactStay linked to Date, Guest, and Room; normalize Guest through Country and Room through Room Type to Property.”
Read the decisions behind it.
Store one row per guest stay.
Keep country outside the guest row.
Separate room, type and property.
Use this for occupancy and revenue reporting across multiple properties.
Other examples in this family.
Common questions
What is the fact table grain?
Each FactStay row represents one guest stay.
Why separate room type from room?
Many rooms can share a type, such as deluxe king.
Can this support property reporting?
Yes. Room Type links to Property for property-level rollups.