erDiagram shop_shop ||--o{ booking_diveproduct : "shop_id" booking_divecourseinfo |o--o{ booking_diveproduct : "course_info_id" booking_engine_productstandardname |o--o{ booking_diveproduct : "standard_name_id" booking_diveproduct ||--o{ booking_productimage : "dive_product_id" booking_diveproduct ||--|| diving_activityproduct : "dive_product_id (1:1)" diving_activityproduct }o--o{ shop_parameter : "diving_activityproduct_staff_languages" diving_activityproduct ||--o{ diving_activityonedaypricing : "one row per bookable day" diving_activityproduct ||--o{ diving_activitypricing : "date-range variant (verify)" diving_activityproduct ||--o{ diving_activityextraoption : "inclusions and extras" diving_activityextraoption }o--o| diving_standardproductactivityinclusion : "based_on_generic_id" diving_standardproductactivityinclusion }o--o| diving_genericactivityextraoption : "based_on_generic_id" diving_genericactivityextraoption |o--o{ diving_genericactivityextraoption : "included_in_id (nesting)" booking_diveproduct { int id PK "product_id" int shop_id FK int course_info_id FK int standard_name_id FK smallint status "30 = approved" arr shown_on "must contain 20 Adventures" text title "10 languages, card" bool is_deleted "column is _is_deleted" } booking_productimage { int dive_product_id FK text picture "card photo" bool is_cover int position } diving_activityproduct { int id PK "activity_id" int dive_product_id FK smallint duration "hours, 7 bands" smallint duration_presentation_type smallint number_of_dives "card" smallint number_of_confined_dives smallint ratio "group size bands" smallint cancellation_policy "filter, card" bool is_elearning "inclusions input" text external_url "booking link" } diving_activityonedaypricing { int activity_id FK date date "Dates filter" num price "card" num converted_price "USD, price filter" varchar3 currency ts available_before "eligibility" smallint status } diving_activitypricing { int activity_id FK daterange date "verify usage" num price num converted_price } diving_activityextraoption { int activity_id FK int based_on_generic_id FK smallint price_policy "8 phrases" num price "mandatory extras" num price_converted "USD" bool payable_on_site "mandatory" } diving_standardproductactivityinclusion { int id PK int based_on_generic_id FK } diving_genericactivityextraoption { int id PK text code "eLearning, classroom, equipment" text title "10 languages" int included_in_id FK } shop_parameter { int id PK "languages_spoken rows" }