Database Schema & ERD

41 entities across 7 domain groups — click any entity to expand fields

Legend:PK Primary KeyFK Foreign Key (→ target)D Denormalised (computed/cached)All entities also have: created_date, updated_date

No duplication: Listing referenced by ID everywhere — never copied. User entity reused across all domains.

Geocoding consolidated: RoutePlanner and all map features use geocodeAddress() from listingService — single Nominatim caller.

Denormed fields: average_rating, review_count, listing_count are cached counts — update via service layer after mutations.

Key Relationships

Listing.created_by_id→User.id
Review.listing_id→Listing.id
Booking.listing_id→Listing.id
Booking.user_id→User.id
BookingConfig.listing_id→Listing.id
BookingAvailability.listing_id→Listing.id
BookingAvailability.booking_id→Booking.id
LeadEnquiry.converted_booking_id→Booking.id
BusinessSubscription.business_id→Listing.id
BusinessSubscription.owner_id→User.id
AdCampaign.business_id→Listing.id
TeamMember.business_id→Listing.id
MarketplaceListing.seller_id→User.id
MarketplaceListing.store_id→MarketplaceStore.id
MarketplaceEnquiry.listing_id→MarketplaceListing.id
Answer.question_id→Question.id
ContentSaved.content_id→ContentArticle.id
ContentArticle.related_listing_ids[]→Listing.id
ClaimRequest.listing_id→Listing.id
Notification.user_id→User.id
Core Platform4 entities
Reviews & Community9 entities
Bookings3 entities
Business Hub9 entities
Marketplace7 entities
Content Hub5 entities
Platform / Comms4 entities