A star schema for video rental has one central fact table, Rental_Fact, linked to dimension tables Customer, Video (Movie), Store, Time and Employee.
+-------------------+
| Time_Dim |
| time_key (PK) |
| date, day, week |
| month, quarter |
| year, is_holiday |
+---------+---------+
|
+----------------+ +------+-----------+ +-----------------+
| Customer_Dim | | Rental_Fact | | Video_Dim |
| customer_key PK+--+ time_key (FK) +--+ video_key (PK) |
| name, gender | | customer_key(FK) | | title, genre |
| age_group | | video_key (FK) | | language, rating|
| city, state | | store_key (FK) | | release_year |
| member_since | | employee_key(FK) | | director, format|
+----------------+ | rental_amount | +-----------------+
| late_fee |
+----------------+ | rental_days | +-----------------+
| Employee_Dim | | units_rented | | Store_Dim |
| employee_key PK+--+ +--+ store_key (PK) |
| name, role | +------------------+ | name, address |
| join_date | | city, state |
+----------------+ | region, manager |
+-----------------+
Fact table: Rental_Fact
- Foreign keys: time_key, customer_key, video_key, store_key, employee_key.
- Measures (numeric, additive): rental_amount, late_fee, rental_days (duration), units_rented.
- Grain: one row per video rented in one transaction.
Dimension tables (descriptive attributes, denormalised):
- Time_Dim: date, day of week, week, month, quarter, year, holiday flag.
- Customer_Dim: name, gender, age group, city, state, membership type/date.
- Video_Dim: title, genre, language, certificate rating, release year, director, format (DVD/Blu-ray/digital).
- Store_Dim: store name, address, city, state, region, manager.
- Employee_Dim: name, role, joining date.
Example queries it supports: total rental revenue by genre per month; most rented titles in each city; late fees collected per store per quarter.
It is a star because every dimension joins directly to the fact table with one join, and the dimensions are not normalised further (doing that would make it a snowflake schema).