Data is scattered across many tables → JOIN 지옥 + inconsistent “single source of truth”.
Goal: one booking table everyone can trust (pickup/dropoff, status events, 등 비즈니스 컨텍스트 유지).
Traditional 모델링: 정규화 = 중복↓ but JOIN↑.
BigQuery: Denormalize with STRUCT/ARRAY = context↑, JOIN↓.
Limit: ~100 MB per row (internal repr. 기준). 큰 중첩은 row size 주의.
booking
안에 pickup
, dropoff
, status_events[]
같이 담기 → 맥락 유지 + 유일성 관리 쉬움.booking.pickup.lat
, booking.dropoff.lng
처럼 dot notation.status_events
같은 반복 필드 → UNNEST로 row 전개 필요.