{
  "format": "dataset-manifest/1",
  "slug": "hotel-booking-system",
  "version": 3,
  "seed": "hotel-booking-system:1",
  "engine": 1,
  "engineVersion": "1.0.0",
  "spec": {
    "format": "dataset/1",
    "slug": "hotel-booking-system",
    "name": "Hotel Reservation Insights",
    "tagline": "Bookings, guests, payment transactions and seasonal rates from a hotel in the hospitality industry.",
    "description": "Guests book rooms at a hotel seeking comfortable accommodation and unique experiences tailored to their needs. The hotel manages various room types, each offering distinct amenities and services designed to enhance guest satisfaction. As travelers navigate through different booking channels, they interact with promotional offers that ramp up demand during peak seasons, adding a layer of complexity to occupancy rates and revenue management. The hotel's operations revolve around these essential components: guests, rooms, bookings, and payments, all of which can dramatically impact the bottom line.\n\nThe tables in this dataset interconnect to create a holistic view of hotel operations. Each row in the 'guests' table represents an individual traveler, capturing their preferences and past stays. The 'rooms' table details the types of accommodations available, including features like views, sizes, and amenities. When a guest makes a reservation, a new entry is created in the 'bookings' table, linking the guest and their selected room type. Payment details corresponding to each booking are captured in the 'payments' table, recording transaction amounts and methods. Finally, the 'seasonal_rates' table provides insights into pricing variations throughout the year, highlighting how certain periods can influence booking behaviors and revenue.\n\nAnalysts can leverage this data to answer critical questions regarding occupancy trends, revenue management, and guest demographics. It serves as a valuable resource for practicing skills in data analysis, allowing users to explore relationships between seasonal rates and booking patterns, assess the impact of various room types on overall revenue, and study payment behavior across different guest segments. The dataset is synthetic, designed to mimic real-world scenarios while providing a safe environment for learning and experimentation.",
    "domain": "hospitality",
    "shape": "transactional",
    "useCases": [
      "sql-practice",
      "orm-seeding"
    ],
    "keywords": [
      "hotel",
      "booking",
      "guests",
      "rooms",
      "amenities",
      "transactions",
      "seasonal rates",
      "hospitality",
      "promotions"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "guests": {
        "description": "This table contains information about the guests who make bookings at the hotel, linking to their reservations and payments.",
        "rows": 200,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each guest."
          },
          "full_name": {
            "kind": "fullName",
            "description": "The full name of the guest."
          },
          "email": {
            "kind": "email",
            "from": "full_name",
            "description": "The guest's email address.",
            "nullable": true,
            "when": {
              "column": "loyalty_status",
              "in": [
                "silver",
                "gold",
                "platinum"
              ]
            }
          },
          "phone": {
            "kind": "phone",
            "description": "The guest's contact number.",
            "nullable": true
          },
          "loyalty_status": {
            "kind": "enum",
            "values": [
              "none",
              "silver",
              "gold",
              "platinum"
            ],
            "description": "The loyalty status of the guest.",
            "weights": [
              6,
              2,
              1,
              1
            ]
          }
        }
      },
      "rooms": {
        "description": "This table lists the available room types in the hotel, detailing their features and pricing.",
        "rows": 50,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each room type."
          },
          "room_type": {
            "kind": "words",
            "min": 1,
            "max": 3,
            "description": "Description of the room type (e.g., Standard, Deluxe, Suite).",
            "pool": [
              "Standard",
              "Deluxe",
              "Suite",
              "Executive",
              "Family",
              "Luxury",
              "Budget",
              "Twin",
              "Double",
              "Single",
              "Triple",
              "Penthouse",
              "Studio",
              "Apartment",
              "Villa",
              "Bungalow",
              "Cottage",
              "Loft",
              "Attic",
              "Chalet",
              "Cabin"
            ]
          },
          "base_price": {
            "kind": "decimal",
            "min": 50,
            "max": 500,
            "scale": 2,
            "description": "Base price per night for the room type.",
            "distribution": "long-tail"
          },
          "amenities": {
            "kind": "json",
            "template": {
              "amenity": {
                "kind": "words",
                "min": 3,
                "max": 15,
                "description": "List of amenities available with the room."
              }
            },
            "description": "Amenities associated with the room type.",
            "nullable": true
          }
        }
      },
      "bookings": {
        "description": "This table records each booking made by guests, linking them to specific rooms and guests.",
        "rows": 300,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each booking."
          },
          "guest_id": {
            "kind": "fk",
            "ref": "guests.id",
            "description": "Reference to the guest making the booking."
          },
          "room_id": {
            "kind": "fk",
            "ref": "rooms.id",
            "description": "Reference to the room type booked."
          },
          "check_in_date": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "The date when the guest checks in."
          },
          "check_out_date": {
            "kind": "date",
            "after": "check_in_date",
            "withinDays": 30,
            "description": "The date when the guest checks out.",
            "nullable": true,
            "when": {
              "column": "booking_status",
              "in": [
                "cancelled",
                "completed"
              ]
            }
          },
          "booking_status": {
            "kind": "enum",
            "values": [
              "confirmed",
              "cancelled",
              "completed"
            ],
            "description": "The current status of the booking.",
            "weights": [
              5,
              2,
              3
            ]
          }
        }
      },
      "payments": {
        "description": "This table captures payment transactions associated with bookings, detailing amounts and statuses.",
        "rows": 300,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each payment transaction."
          },
          "booking_id": {
            "kind": "fk",
            "ref": "bookings.id",
            "description": "Reference to the associated booking."
          },
          "amount": {
            "kind": "decimal",
            "min": 50,
            "max": 2000,
            "scale": 2,
            "distribution": "heavy-tail",
            "description": "The total amount charged for the booking."
          },
          "payment_date": {
            "kind": "datetime",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "The date and time when the payment was made.",
            "nullable": true,
            "when": {
              "column": "payment_status",
              "in": [
                "failed"
              ]
            },
            "dayProfile": "waking",
            "trend": "growing"
          },
          "payment_status": {
            "kind": "enum",
            "values": [
              "pending",
              "completed",
              "failed"
            ],
            "description": "The status of the payment transaction.",
            "weights": [
              4,
              5,
              1
            ]
          }
        }
      },
      "seasonal_rates": {
        "description": "This table outlines the seasonal rates for different room types, capturing variations in pricing throughout the year.",
        "rows": 100,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each seasonal rate entry."
          },
          "room_id": {
            "kind": "fk",
            "ref": "rooms.id",
            "description": "Reference to the room type."
          },
          "season": {
            "kind": "enum",
            "values": [
              "low",
              "mid",
              "high"
            ],
            "description": "The season classification for pricing.",
            "weights": [
              5,
              3,
              2
            ]
          },
          "seasonal_price": {
            "kind": "decimal",
            "min": 50,
            "max": 600,
            "scale": 2,
            "description": "Price per night during the specified season.",
            "nullable": true,
            "when": {
              "column": "season",
              "in": [
                "mid",
                "high"
              ]
            },
            "distribution": "long-tail"
          },
          "discount_percentage": {
            "kind": "decimal",
            "min": 5,
            "max": 30,
            "distribution": "normal",
            "description": "Percentage discount applied to the seasonal price."
          },
          "room_capacity": {
            "kind": "int",
            "min": 1,
            "max": 4,
            "distribution": "normal",
            "description": "Maximum number of guests that can stay in the room."
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "categorical",
      "timestamped",
      "monetary",
      "high-cardinality"
    ],
    "analysisQuestions": [
      "What are the most popular room types among guests during peak seasons?",
      "How does the loyalty status of guests affect their booking frequency?",
      "What trends can be observed in payment amounts over different seasons?",
      "Which amenities are most frequently requested by guests in their bookings?",
      "How do promotional offers impact booking rates during specific periods?"
    ],
    "suggestedQueries": [
      {
        "title": "List all bookings with guest details",
        "sql": "SELECT bookings.id, guests.full_name, rooms.room_type, bookings.check_in_date, bookings.check_out_date FROM bookings JOIN guests ON bookings.guest_id = guests.id JOIN rooms ON bookings.room_id = rooms.id;",
        "dialect": "postgres"
      },
      {
        "title": "Find the average payment amount for completed bookings",
        "sql": "SELECT AVG(payments.amount) FROM payments JOIN bookings ON payments.booking_id = bookings.id WHERE bookings.booking_status = 'completed';",
        "dialect": "postgres"
      },
      {
        "title": "Count bookings by room type and season",
        "sql": "SELECT rooms.room_type, seasonal_rates.season, COUNT(bookings.id) FROM bookings JOIN rooms ON bookings.room_id = rooms.id JOIN seasonal_rates ON rooms.id = seasonal_rates.room_id GROUP BY rooms.room_type, seasonal_rates.season;",
        "dialect": "postgres"
      },
      {
        "title": "Get payment trends over time",
        "sql": "SELECT DATE_TRUNC('month', payments.payment_date) AS month, SUM(payments.amount) FROM payments GROUP BY month ORDER BY month;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Hotel Management Analysis",
        "body": "Hotel managers can use this dataset to analyze guest booking patterns, assess the popularity of room types, and evaluate the effectiveness of promotional offers. By examining the interaction between seasonal rates and bookings, they can optimize pricing strategies to maximize revenue during peak seasons."
      },
      {
        "title": "Data Science and Analytics Training",
        "body": "Data science students and professionals can leverage this dataset for hands-on practice with SQL and data analysis techniques. It provides a rich source of information for training on how to extract insights, create visualizations, and derive conclusions from real-world-like hotel booking data."
      },
      {
        "title": "Revenue Forecasting",
        "body": "Revenue analysts can utilize the dataset to forecast future performance based on historical booking and payment data. By analyzing trends in seasonal rates and guest preferences, they can provide recommendations for pricing adjustments and promotional strategies to enhance profitability."
      },
      {
        "title": "Customer Relationship Management",
        "body": "CRM specialists can use this dataset to understand guest behavior and preferences, which is essential for improving customer service and increasing guest satisfaction. Insights drawn from loyalty status and amenities can inform targeted marketing campaigns and service enhancements."
      }
    ]
  },
  "counts": {
    "guests": 200,
    "rooms": 50,
    "bookings": 300,
    "payments": 300,
    "seasonal_rates": 100
  },
  "stats": {
    "guests": {
      "rows": 200,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "full_name": {
          "nulls": 0,
          "distinct": 196,
          "min": "Alice Larsen",
          "max": "Zoe Walker"
        },
        "email": {
          "nulls": 116,
          "distinct": 84
        },
        "phone": {
          "nulls": 22,
          "distinct": 174
        },
        "loyalty_status": {
          "nulls": 0,
          "distinct": 4,
          "min": "gold",
          "max": "silver"
        }
      }
    },
    "rooms": {
      "rows": 50,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "room_type": {
          "nulls": 0,
          "distinct": 46
        },
        "base_price": {
          "nulls": 0,
          "distinct": 50,
          "min": 50.61,
          "max": 499.39
        },
        "amenities": {
          "nulls": 5,
          "distinct": 45
        }
      }
    },
    "bookings": {
      "rows": 300,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 300,
          "min": 1,
          "max": 300
        },
        "guest_id": {
          "nulls": 0,
          "distinct": 162,
          "min": 1,
          "max": 200
        },
        "room_id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "check_in_date": {
          "nulls": 0,
          "distinct": 203,
          "min": "2023-01-01",
          "max": "2023-12-31"
        },
        "check_out_date": {
          "nulls": 144,
          "distinct": 128,
          "min": "2023-01-05",
          "max": "2024-01-23"
        },
        "booking_status": {
          "nulls": 0,
          "distinct": 3,
          "min": "cancelled",
          "max": "confirmed"
        }
      }
    },
    "payments": {
      "rows": 300,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 300,
          "min": 1,
          "max": 300
        },
        "booking_id": {
          "nulls": 0,
          "distinct": 190,
          "min": 1,
          "max": 300
        },
        "amount": {
          "nulls": 0,
          "distinct": 292,
          "min": 50,
          "max": 1930.15
        },
        "payment_date": {
          "nulls": 278,
          "distinct": 22,
          "min": "2023-01-23 17:00:44",
          "max": "2023-11-13 12:24:16"
        },
        "payment_status": {
          "nulls": 0,
          "distinct": 3,
          "min": "completed",
          "max": "pending"
        }
      }
    },
    "seasonal_rates": {
      "rows": 100,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 100,
          "min": 1,
          "max": 100
        },
        "room_id": {
          "nulls": 0,
          "distinct": 43,
          "min": 1,
          "max": 49
        },
        "season": {
          "nulls": 0,
          "distinct": 3,
          "min": "high",
          "max": "mid"
        },
        "seasonal_price": {
          "nulls": 54,
          "distinct": 46,
          "min": 53.27,
          "max": 596.6
        },
        "discount_percentage": {
          "nulls": 0,
          "distinct": 97,
          "min": 7.07,
          "max": 24.75
        },
        "room_capacity": {
          "nulls": 0,
          "distinct": 2,
          "min": 2,
          "max": 3
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/guests.csv",
      "format": "csv",
      "table": "guests",
      "key": "datasets/hotel-booking-system/v3/csv/guests.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/csv/guests.csv",
      "bytes": 9497,
      "sha256": "a949e33ff629fcb06109ae828e34ac811820f16cf252e193fb4b02a0d827afdf",
      "rows": 200,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/rooms.csv",
      "format": "csv",
      "table": "rooms",
      "key": "datasets/hotel-booking-system/v3/csv/rooms.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/csv/rooms.csv",
      "bytes": 5034,
      "sha256": "4a5c2a5f9631b13a4f6949dafb859d6332ba5b0036187b4b964496e151c613a7",
      "rows": 50,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/bookings.csv",
      "format": "csv",
      "table": "bookings",
      "key": "datasets/hotel-booking-system/v3/csv/bookings.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/csv/bookings.csv",
      "bytes": 11492,
      "sha256": "101baf3c5fbb8b6f99f7bf35b1438024a4a2aaf4d830f36219360eca20601505",
      "rows": 300,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/payments.csv",
      "format": "csv",
      "table": "payments",
      "key": "datasets/hotel-booking-system/v3/csv/payments.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/csv/payments.csv",
      "bytes": 8004,
      "sha256": "fe5eeedbcba3d5d445762a0be28a47c1151c9c72a7b601f6a2b9f86a85702530",
      "rows": 300,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/seasonal_rates.csv",
      "format": "csv",
      "table": "seasonal_rates",
      "key": "datasets/hotel-booking-system/v3/csv/seasonal_rates.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/csv/seasonal_rates.csv",
      "bytes": 2324,
      "sha256": "2caf1042d142dd4a6e51efe3e02724339015a362d3ec7b2784c67fd5f5360de6",
      "rows": 100,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "hotel-booking-system.json",
      "format": "json",
      "table": null,
      "key": "datasets/hotel-booking-system/v3/hotel-booking-system.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/hotel-booking-system.json",
      "bytes": 154632,
      "sha256": "13a5e8cc2333fb1bd33e05eabc7978e5a9ca6e69a3490ad87cb36bdfdf1d4859",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/hotel-booking-system/v3/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/sql/postgres.sql",
      "bytes": 55152,
      "sha256": "300c6c1098a7dfb88b2dc629647ab6a19401d7ecd591324cbf75240c12a7943a",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/hotel-booking-system/v3/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/sql/mysql.sql",
      "bytes": 54597,
      "sha256": "473026aa53af6908a6706bfebf12ae4f69e490859e3762d677b4131424de3557",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/hotel-booking-system/v3/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/sql/mssql.sql",
      "bytes": 56857,
      "sha256": "bdce6e4c15b9fca2b36d07e8ca555929f78973fc03388d8cec745af311a94c5c",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/hotel-booking-system/v3/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/sql/sqlite.sql",
      "bytes": 54397,
      "sha256": "c0fae1ff812c333068b50d56d740375a91506c4d70f86855aebbb73e06016225",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/hotel-booking-system/v3/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/prisma/seed.ts",
      "bytes": 119095,
      "sha256": "5caf6991a7afdd552fee5883d6042ce9b84671b01351170d1b9bf1240d798297",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/hotel-booking-system/v3/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-booking-system/v3/django/fixtures.json",
      "bytes": 194360,
      "sha256": "02704c83f6f42a200e55862a7d1b91160a5e08357c87da386b9a0aab102a03de",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788767287508,
  "updatedAt": 1789095865075
}
