Having implemented both approaches across multiple ETQ installations, here’s my analysis of the key tradeoffs:
Star Schema vs Snowflake Schema Tradeoffs:
Star schema wins for query performance and simplicity. Your dimensional queries will be faster because you’re joining fact table to denormalized dimensions - fewer joins overall. The downside is storage redundancy. If you have 50,000 change requests all referencing the same approver, that approver’s details are duplicated 50,000 times in a denormalized approver dimension.
Snowflake schema normalizes dimensions into sub-dimensions, reducing redundancy but adding join complexity. For change control, I’d recommend a hybrid: star schema for simple dimensions (date, change type, priority) and snowflake for complex hierarchical dimensions (organizational structure, part taxonomy). This balances performance and storage efficiency.
Fact and Dimension Table Design:
Your fact table grain is critical. For change control audit reporting, I recommend change item level (not request level). This allows analysis like “which specific items take longest to approve” or “which part categories have most change frequency.” Your fact table should store:
- Foreign keys to all dimensions
- Numeric measures (approval_duration_hours, affected_part_count, revision_number)
- Degenerate dimensions (request_number, item_sequence) that don’t warrant separate dimension tables
Dimension tables should be wide and denormalized. Don’t be afraid of 30-40 columns in a dimension if it eliminates joins. Include descriptive attributes that users filter and group by in reports.
Normalized vs Denormalized Data Storage:
My recommendation: Keep both. Maintain your normalized operational schema (3NF) for transactional processing - change request creation, approvals, updates. This ensures data integrity and supports ETQ’s application logic. Build a separate dimensional model (star/snowflake hybrid) specifically for reporting and analytics.
Use ETL to sync data nightly (or hourly if needed). The ETL process handles:
- Slowly changing dimensions (Type 2 for parts, Type 1 for most others)
- Fact table population with pre-calculated metrics
- Historical snapshots for point-in-time compliance reporting
Change Impact Analysis Requirements:
For impact analysis, your dimensional model should support:
- Temporal analysis: Which time periods have highest change volume?
- Part impact: Which parts/families are most frequently changed?
- Approval bottlenecks: Where do changes get delayed?
- Cross-functional impact: How do changes ripple through departments?
Design your dimensions to enable these analyses. For example, a robust date dimension with fiscal periods, quarters, holidays, etc. A part dimension with full taxonomy hierarchy. An organizational dimension showing department rollups.
The 15-20 second query you showed would become sub-second in a star schema:
-- Dimensional model query (fast)
SELECT d.calendar_date, p.part_number, a.approver_name,
at.audit_action, f.approval_duration_hours
FROM change_fact f
JOIN date_dim d ON f.date_key = d.date_key
JOIN part_dim p ON f.part_key = p.part_key
JOIN approver_dim a ON f.approver_key = a.approver_key
JOIN audit_type_dim at ON f.audit_type_key = at.audit_type_key
WHERE d.fiscal_year = 2024;
Five simple joins to pre-indexed dimension keys versus your current 12-table normalized nightmare.
Bottom Line:
For audit reporting and analytics in ETQ change control, dimensional modeling is the right choice. The storage cost is negligible compared to the performance gains and analytical flexibility. Use Type 2 SCDs for parts to maintain historical accuracy. Implement a hybrid star/snowflake design based on dimension complexity. Most importantly, keep your operational normalized schema intact and treat the dimensional model as a separate reporting database populated via ETL.