{
  "format": "dataset-manifest/1",
  "slug": "hotel-reservations",
  "version": 1,
  "seed": "hotel-reservations:1",
  "spec": {
    "format": "dataset/1",
    "slug": "hotel-reservations",
    "name": "Hotel Reservations",
    "tagline": "Hotel bookings data including reservations, guests, room types, and folio charges across multiple properties.",
    "description": "Hotel reservations are crucial for managing bookings and understanding guest preferences in the hospitality industry. This synthetic dataset models a hotel group with tables that hold information about hotels, room types, individual rooms, guests, reservations, and folio charges for extras. Each table is interconnected, allowing users to explore the relationships between guests and their bookings, the type of rooms they choose, and any additional services they utilize during their stay. By analyzing this data, businesses can identify trends in customer preferences, optimize room pricing, and improve service offerings. This dataset is ideal for SQL practice and BI dashboards, providing a comprehensive view of hotel operations and guest interactions.",
    "domain": "hospitality",
    "shape": "transactional",
    "useCases": [
      "sql-practice",
      "bi-dashboards"
    ],
    "keywords": [
      "hotel",
      "reservations",
      "guests",
      "rooms",
      "charges",
      "bookings",
      "hospitality"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "hotels": {
        "description": "Each row represents a hotel, detailing its location and attributes. This table links to the rooms available in each hotel.",
        "rows": 50,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each hotel."
          },
          "name": {
            "kind": "fullName",
            "description": "The name of the hotel."
          },
          "location": {
            "kind": "city",
            "description": "City where the hotel is located."
          },
          "rating": {
            "kind": "decimal",
            "min": 1,
            "max": 5,
            "scale": 1,
            "description": "Rating of the hotel on a scale of 1 to 5.",
            "nullable": true
          }
        }
      },
      "room_types": {
        "description": "This table contains different types of rooms available in hotels, linking to the rooms themselves.",
        "rows": 10,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each room type."
          },
          "type_name": {
            "kind": "fullName",
            "description": "Name of the room type (e.g., Suite, Deluxe, Standard)."
          },
          "description": {
            "kind": "sentence",
            "max": 200,
            "description": "A brief description of the room type.",
            "nullable": true
          },
          "base_price": {
            "kind": "decimal",
            "min": 50,
            "max": 500,
            "scale": 2,
            "description": "Base price per night for this room type."
          }
        }
      },
      "rooms": {
        "description": "Each row represents a specific room in a hotel, linking to its type and the hotel it belongs to.",
        "rows": 200,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each room."
          },
          "hotel_id": {
            "kind": "fk",
            "ref": "hotels.id",
            "description": "Foreign key linking to the hotel."
          },
          "room_type_id": {
            "kind": "fk",
            "ref": "room_types.id",
            "description": "Foreign key linking to the room type."
          },
          "room_number": {
            "kind": "int",
            "min": 101,
            "max": 999,
            "description": "Room number for this specific room.",
            "nullable": true
          }
        }
      },
      "guests": {
        "description": "This table holds information about guests staying at the hotels, linking to their reservations.",
        "rows": 300,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each guest."
          },
          "full_name": {
            "kind": "fullName",
            "description": "Full name of the guest."
          },
          "email": {
            "kind": "email",
            "from": "full_name",
            "description": "Email address of the guest."
          },
          "phone": {
            "kind": "phone",
            "description": "Contact number of the guest.",
            "nullable": true
          }
        }
      },
      "reservations": {
        "description": "Each row represents a reservation made by a guest, linking to the guest and the room reserved.",
        "rows": 500,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each reservation."
          },
          "guest_id": {
            "kind": "fk",
            "ref": "guests.id",
            "description": "Foreign key linking to the guest who made the reservation."
          },
          "room_id": {
            "kind": "fk",
            "ref": "rooms.id",
            "description": "Foreign key linking to the reserved room."
          },
          "check_in_date": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Check-in date for the reservation."
          },
          "check_out_date": {
            "kind": "date",
            "after": "check_in_date",
            "withinDays": 30,
            "description": "Check-out date for the reservation, must be after check-in.",
            "nullable": true
          }
        }
      },
      "folio_charges": {
        "description": "This table records additional charges incurred by guests during their stay, linking to their reservations.",
        "rows": 1000,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each charge."
          },
          "reservation_id": {
            "kind": "fk",
            "ref": "reservations.id",
            "description": "Foreign key linking to the reservation."
          },
          "charge_description": {
            "kind": "sentence",
            "max": 200,
            "description": "Description of the extra charge (e.g., room service, spa).",
            "nullable": true
          },
          "amount": {
            "kind": "decimal",
            "min": 0,
            "max": 500,
            "scale": 2,
            "description": "Amount charged for the extra service."
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "timestamped",
      "monetary",
      "categorical",
      "nullable"
    ],
    "analysisQuestions": [
      "What are the most popular room types among guests?",
      "How do charges for extras vary by season or month?",
      "What is the average length of stay for guests?",
      "Which hotels receive the highest ratings and why?",
      "What is the relationship between guest demographics and booking patterns?"
    ],
    "suggestedQueries": [
      {
        "title": "Join Reservations with Guests",
        "sql": "SELECT guests.full_name, reservations.check_in_date, reservations.check_out_date FROM reservations JOIN guests ON reservations.guest_id = guests.id;",
        "dialect": "postgres"
      },
      {
        "title": "Count Reservations by Hotel",
        "sql": "SELECT hotels.name, COUNT(reservations.id) FROM reservations JOIN rooms ON reservations.room_id = rooms.id JOIN hotels ON rooms.hotel_id = hotels.id GROUP BY hotels.name;",
        "dialect": "postgres"
      },
      {
        "title": "Average Charges per Reservation",
        "sql": "SELECT reservations.id, AVG(folio_charges.amount) FROM folio_charges JOIN reservations ON folio_charges.reservation_id = reservations.id GROUP BY reservations.id;",
        "dialect": "postgres"
      },
      {
        "title": "Reservations Over Time",
        "sql": "SELECT DATE(reservations.check_in_date) AS date, COUNT(*) FROM reservations GROUP BY date ORDER BY date;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Hotel Management Dashboard",
        "body": "Hotel managers can utilize this dataset to create a comprehensive dashboard that visualizes guest bookings, room occupancy rates, and additional charges. By analyzing trends over time, they can make informed decisions about pricing strategies and promotional offers."
      },
      {
        "title": "Data Analysis for Marketing Campaigns",
        "body": "Marketing teams can leverage the dataset to identify guest preferences and popular room types. By analyzing reservations and charges, they can tailor marketing campaigns to attract specific customer segments, enhancing overall guest satisfaction."
      },
      {
        "title": "Operational Efficiency Studies",
        "body": "Operational teams can analyze the dataset to optimize resource allocation, such as staffing levels and inventory management for room supplies. Understanding peak check-in and check-out times will help improve operational efficiency and guest experiences."
      }
    ]
  },
  "counts": {
    "guests": 300,
    "hotels": 50,
    "room_types": 10,
    "rooms": 200,
    "reservations": 500,
    "folio_charges": 1000
  },
  "stats": {
    "hotels": {
      "rows": 50,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "name": {
          "nulls": 0,
          "distinct": 50,
          "min": "Alice Carter",
          "max": "Victor Becker"
        },
        "location": {
          "nulls": 0,
          "distinct": 38,
          "min": "Amsterdam",
          "max": "Zurich"
        },
        "rating": {
          "nulls": 4,
          "distinct": 25,
          "min": 1.1,
          "max": 4.9
        }
      }
    },
    "room_types": {
      "rows": 10,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 10,
          "min": 1,
          "max": 10
        },
        "type_name": {
          "nulls": 0,
          "distinct": 10,
          "min": "Amir Wright",
          "max": "Victor Torres"
        },
        "description": {
          "nulls": 0,
          "distinct": 10
        },
        "base_price": {
          "nulls": 0,
          "distinct": 10,
          "min": 88.68,
          "max": 475.54
        }
      }
    },
    "rooms": {
      "rows": 200,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "hotel_id": {
          "nulls": 0,
          "distinct": 48,
          "min": 1,
          "max": 50
        },
        "room_type_id": {
          "nulls": 0,
          "distinct": 10,
          "min": 1,
          "max": 10
        },
        "room_number": {
          "nulls": 21,
          "distinct": 162,
          "min": 108,
          "max": 992
        }
      }
    },
    "guests": {
      "rows": 300,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 300,
          "min": 1,
          "max": 300
        },
        "full_name": {
          "nulls": 0,
          "distinct": 289,
          "min": "Alice Schmidt",
          "max": "Zoe Yilmaz"
        },
        "email": {
          "nulls": 0,
          "distinct": 295
        },
        "phone": {
          "nulls": 21,
          "distinct": 265
        }
      }
    },
    "reservations": {
      "rows": 500,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 500,
          "min": 1,
          "max": 500
        },
        "guest_id": {
          "nulls": 0,
          "distinct": 247,
          "min": 1,
          "max": 300
        },
        "room_id": {
          "nulls": 0,
          "distinct": 183,
          "min": 1,
          "max": 200
        },
        "check_in_date": {
          "nulls": 0,
          "distinct": 274,
          "min": "2023-01-01",
          "max": "2023-12-28"
        },
        "check_out_date": {
          "nulls": 48,
          "distinct": 270,
          "min": "2023-01-02",
          "max": "2024-01-26"
        }
      }
    },
    "folio_charges": {
      "rows": 1000,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 1000,
          "min": 1,
          "max": 1000
        },
        "reservation_id": {
          "nulls": 0,
          "distinct": 425,
          "min": 2,
          "max": 500
        },
        "charge_description": {
          "nulls": 124,
          "distinct": 871
        },
        "amount": {
          "nulls": 0,
          "distinct": 985,
          "min": 0.26,
          "max": 499.59
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/guests.csv",
      "format": "csv",
      "table": "guests",
      "key": "datasets/hotel-reservations/v1/csv/guests.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/csv/guests.csv",
      "bytes": 16765,
      "sha256": "ad266248efc28b44598fcc4ee91e919cf5ad19288ab87c0220f44e200b8f8bad",
      "rows": 300,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/hotels.csv",
      "format": "csv",
      "table": "hotels",
      "key": "datasets/hotel-reservations/v1/csv/hotels.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/csv/hotels.csv",
      "bytes": 1401,
      "sha256": "ffc216c8d4e9b688daf992d2fad5b30e7c1824ba03a49a7d5e584ee6acee04bf",
      "rows": 50,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/room_types.csv",
      "format": "csv",
      "table": "room_types",
      "key": "datasets/hotel-reservations/v1/csv/room_types.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/csv/room_types.csv",
      "bytes": 807,
      "sha256": "0deb37638382e088e1761fdc2a11c8a84eabb01b4f228e5ca0a1a5a8c9df6c5b",
      "rows": 10,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/rooms.csv",
      "format": "csv",
      "table": "rooms",
      "key": "datasets/hotel-reservations/v1/csv/rooms.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/csv/rooms.csv",
      "bytes": 2645,
      "sha256": "bbcacc099acaddf2a6c4ad5f7c9a9bac8a95f44dec54b6c98b8c4d441694ac75",
      "rows": 200,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/reservations.csv",
      "format": "csv",
      "table": "reservations",
      "key": "datasets/hotel-reservations/v1/csv/reservations.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/csv/reservations.csv",
      "bytes": 16508,
      "sha256": "c687a9abda00ee44064b948ce42062d5db66d7c0603ad7c83d71d6c96c132b4f",
      "rows": 500,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/folio_charges.csv",
      "format": "csv",
      "table": "folio_charges",
      "key": "datasets/hotel-reservations/v1/csv/folio_charges.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/csv/folio_charges.csv",
      "bytes": 65111,
      "sha256": "e66f4cd82a6007e818e495b56a4f59a9f77e2216b2a4092ff3cae498ffb8dd11",
      "rows": 1000,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "hotel-reservations.json",
      "format": "json",
      "table": null,
      "key": "datasets/hotel-reservations/v1/hotel-reservations.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/hotel-reservations.json",
      "bytes": 304189,
      "sha256": "97dab4ee2a8e4ea6ec968d13218fc336f1d2e7c61dc285b09f47fe449fcc7bba",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/hotel-reservations/v1/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/sql/postgres.sql",
      "bytes": 131988,
      "sha256": "3174d2d000e45cc3dfb3fabd051d2819b8deeebd562157f2d83e6def6278c0eb",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/hotel-reservations/v1/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/sql/mysql.sql",
      "bytes": 131317,
      "sha256": "5c5a51dc33e4b30845c76a8fd32b43148a4833825c73c4092a39df8167b1ca5a",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/hotel-reservations/v1/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/sql/mssql.sql",
      "bytes": 134542,
      "sha256": "dcba94a7c2bb7f9cecd1690a237ade56f59b70b9ada17226670ddf6ceff5fc94",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/hotel-reservations/v1/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/sql/sqlite.sql",
      "bytes": 131089,
      "sha256": "ee5f805eee9bffcffe266438bee30b25865f221ce70f889219934a8a66088fa4",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/hotel-reservations/v1/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/prisma/seed.ts",
      "bytes": 245805,
      "sha256": "bd00782aa6888fd8ec7a1fd980da1aaa24a988d1b8441936c12f9feb1c4c9566",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/hotel-reservations/v1/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hotel-reservations/v1/django/fixtures.json",
      "bytes": 394459,
      "sha256": "c8b6b14f044c0a9706bfae48fc572220742a94094b9239dc04264164abf5d758",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788734367845,
  "updatedAt": 1788734367845
}
