{
  "format": "dataset-manifest/1",
  "slug": "customizable-travel-maps-app",
  "version": 3,
  "seed": "customizable-travel-maps-app:1",
  "spec": {
    "format": "dataset/1",
    "slug": "customizable-travel-maps-app",
    "name": "Personalized Travel Experiences",
    "tagline": "Create and customize your unique travel routes and points of interest.",
    "description": "Travelers create and customize their own maps to explore destinations in unique ways, bringing their specific interests to life. Users interact with a platform that enables them to design personalized travel experiences by selecting routes and points of interest that align with their preferences. This dynamic environment supports both casual explorers seeking popular tourist destinations and adventurous users who delve into specialized routes that include hidden gems and unique experiences. As they navigate their journeys, travelers can provide feedback on their chosen points of interest, contributing to a rich pool of information that enhances future users' experiences.\n\nThe database consists of several interrelated tables. The 'users' table stores individual traveler profiles, encompassing details such as preferences and past experiences. The 'routes' table captures the unique paths created by users, linking them to specific destinations. 'points_of_interest' details various attractions, landmarks, and experiences available within those routes. The 'route_pois' table serves as a junction, connecting routes to their corresponding points of interest, while the 'feedback' table collects user impressions and ratings on these points of interest, enriching the dataset with qualitative insights.\n\nThis dataset answers important questions related to travel behavior, such as which routes are most popular among users, what types of points of interest receive the best feedback, and how user preferences shape their travel choices. It is particularly useful for practicing data analysis, visualization, and relationship mapping within a travel domain context. By exploring this synthetic data, developers can gain experience working with user-generated content and complex relationships among various data entities, enhancing their skills in analyzing real-world applications.",
    "domain": "travel",
    "shape": "slowly-changing",
    "useCases": [
      "etl-pipelines",
      "teaching"
    ],
    "keywords": [
      "travel",
      "maps",
      "customizable",
      "user profiles",
      "routes",
      "points of interest",
      "feedback",
      "layers"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "users": {
        "description": "This table contains user profiles, including their preferences and demographics. Each user can create multiple maps.",
        "rows": 200,
        "columns": {
          "user_id": {
            "kind": "pk",
            "description": "Unique identifier for each user."
          },
          "full_name": {
            "kind": "fullName",
            "description": "The full name of the user.",
            "nullable": true
          },
          "email": {
            "kind": "email",
            "from": "full_name",
            "description": "User's email address for communication.",
            "nullable": true
          },
          "age": {
            "kind": "int",
            "min": 18,
            "max": 100,
            "description": "Age of the user.",
            "nullable": true
          },
          "country": {
            "kind": "country",
            "description": "Country of residence for the user.",
            "nullable": true
          }
        }
      },
      "routes": {
        "description": "This table contains the custom routes created by users, linking each route to a user profile.",
        "rows": 400,
        "columns": {
          "route_id": {
            "kind": "pk",
            "description": "Unique identifier for each route."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.user_id",
            "description": "Identifier linking to the user who created the route."
          },
          "route_name": {
            "kind": "words",
            "min": 1,
            "max": 3,
            "description": "Name of the route created by the user.",
            "nullable": true,
            "pool": [
              "adventure",
              "exploration",
              "journey",
              "escape",
              "discovery",
              "expedition",
              "voyage",
              "quest",
              "safari",
              "getaway",
              "odyssey",
              "retreat",
              "trip",
              "tour",
              "excursion",
              "wander",
              "travel",
              "path",
              "trail",
              "road",
              "way"
            ]
          },
          "created_at": {
            "kind": "datetime",
            "from": "2022-01-01",
            "to": "2023-12-31",
            "description": "Timestamp when the route was created.",
            "dayProfile": "business"
          }
        }
      },
      "points_of_interest": {
        "description": "This table lists points of interest that can be included in routes, with user feedback.",
        "rows": 300,
        "columns": {
          "poi_id": {
            "kind": "pk",
            "description": "Unique identifier for each point of interest."
          },
          "name": {
            "kind": "words",
            "min": 1,
            "max": 3,
            "description": "Name of the point of interest.",
            "pool": [
              "museum",
              "park",
              "landmark",
              "beach",
              "garden",
              "castle",
              "forest",
              "market",
              "viewpoint",
              "temple",
              "gallery",
              "restaurant",
              "hotel",
              "square",
              "river",
              "island",
              "canyon",
              "village",
              "city",
              "monument",
              "attraction"
            ]
          },
          "description": {
            "kind": "sentence",
            "min": 10,
            "max": 200,
            "description": "Description of the point of interest.",
            "nullable": true,
            "when": {
              "column": "category",
              "in": [
                "historical",
                "cultural",
                "natural",
                "entertainment"
              ]
            }
          },
          "location": {
            "kind": "json",
            "template": {
              "latitude": {
                "kind": "decimal",
                "min": -90,
                "max": 90
              },
              "longitude": {
                "kind": "decimal",
                "min": -180,
                "max": 180
              }
            },
            "description": "Geographic coordinates of the point of interest.",
            "nullable": true
          },
          "category": {
            "kind": "enum",
            "values": [
              "historical",
              "cultural",
              "natural",
              "entertainment"
            ],
            "description": "Category of the point of interest.",
            "weights": [
              6,
              4,
              3,
              2
            ]
          }
        }
      },
      "route_pois": {
        "description": "This junction table links routes to points of interest, allowing multiple points to be associated with a single route.",
        "rows": 600,
        "columns": {
          "route_poi_id": {
            "kind": "pk",
            "description": "Unique identifier for each route-point of interest association."
          },
          "route_id": {
            "kind": "fk",
            "ref": "routes.route_id",
            "description": "Identifier linking to the route."
          },
          "poi_id": {
            "kind": "fk",
            "ref": "points_of_interest.poi_id",
            "description": "Identifier linking to the point of interest."
          }
        }
      },
      "feedback": {
        "description": "This table collects user feedback on points of interest, allowing for insights into user satisfaction.",
        "rows": 500,
        "columns": {
          "feedback_id": {
            "kind": "pk",
            "description": "Unique identifier for each feedback entry."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.user_id",
            "description": "Identifier linking to the user providing feedback."
          },
          "poi_id": {
            "kind": "fk",
            "ref": "points_of_interest.poi_id",
            "description": "Identifier linking to the point of interest being reviewed."
          },
          "rating": {
            "kind": "int",
            "min": 1,
            "max": 5,
            "description": "User rating for the point of interest.",
            "distribution": "high"
          },
          "comment": {
            "kind": "paragraph",
            "min": 10,
            "max": 500,
            "description": "User's feedback comment on the point of interest.",
            "nullable": true
          },
          "created_at": {
            "kind": "datetime",
            "from": "2022-01-01",
            "to": "2023-12-31",
            "description": "Timestamp when the feedback was submitted.",
            "dayProfile": "waking",
            "trend": "growing"
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "timestamped",
      "categorical",
      "high-cardinality"
    ],
    "analysisQuestions": [
      "What are the most popular points of interest among users?",
      "How does user feedback affect the selection of points of interest?",
      "What routes do users prefer based on their demographics?",
      "Which categories of points of interest receive the highest ratings?",
      "How often do users create new routes based on previous experiences?"
    ],
    "suggestedQueries": [
      {
        "title": "Get all routes created by a specific user",
        "sql": "SELECT * FROM routes WHERE user_id = ?;",
        "dialect": "postgres"
      },
      {
        "title": "Count points of interest per route",
        "sql": "SELECT route_id, COUNT(poi_id) FROM route_pois GROUP BY route_id;",
        "dialect": "postgres"
      },
      {
        "title": "Average rating of points of interest by category",
        "sql": "SELECT category, AVG(rating) FROM feedback JOIN points_of_interest ON feedback.poi_id = points_of_interest.poi_id GROUP BY category;",
        "dialect": "postgres"
      },
      {
        "title": "Top 5 points of interest based on user feedback",
        "sql": "SELECT poi_id, AVG(rating) AS average_rating FROM feedback GROUP BY poi_id ORDER BY average_rating DESC LIMIT 5;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Travel Application Development",
        "body": "Developers building travel applications can use this dataset to simulate user interactions with custom travel maps. By integrating real user data into their applications, they can test features like route creation, points of interest selection, and feedback mechanisms, ensuring a robust user experience."
      },
      {
        "title": "Data Analysis and Insights",
        "body": "Data analysts can utilize this dataset to derive insights about user preferences and behaviors in travel planning. By analyzing feedback and route choices, they can identify trends and patterns that inform marketing strategies and product development for travel services."
      },
      {
        "title": "Teaching Database Management",
        "body": "Educators can employ this dataset in teaching database management and SQL querying techniques. With its multi-table structure and realistic data, students can practice writing complex queries, performing joins, and understanding data relationships in a travel context."
      },
      {
        "title": "ETL Process Simulation",
        "body": "Data engineers can leverage this dataset for simulating ETL processes. By extracting, transforming, and loading data from this travel dataset, they can practice building pipelines that manage user data, route information, and feedback, honing their skills in data integration and management."
      }
    ]
  },
  "counts": {
    "points_of_interest": 300,
    "users": 200,
    "feedback": 500,
    "routes": 400,
    "route_pois": 600
  },
  "stats": {
    "users": {
      "rows": 200,
      "columns": {
        "user_id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "full_name": {
          "nulls": 16,
          "distinct": 183,
          "min": "Alice Becker",
          "max": "Zoe Gomez"
        },
        "email": {
          "nulls": 34,
          "distinct": 166
        },
        "age": {
          "nulls": 26,
          "distinct": 69,
          "min": 19,
          "max": 100
        },
        "country": {
          "nulls": 18,
          "distinct": 42,
          "min": "Argentina",
          "max": "United States"
        }
      }
    },
    "routes": {
      "rows": 400,
      "columns": {
        "route_id": {
          "nulls": 0,
          "distinct": 400,
          "min": 1,
          "max": 400
        },
        "user_id": {
          "nulls": 0,
          "distinct": 179,
          "min": 1,
          "max": 200
        },
        "route_name": {
          "nulls": 38,
          "distinct": 248
        },
        "created_at": {
          "nulls": 0,
          "distinct": 400,
          "min": "2022-01-09 21:39:54",
          "max": "2023-12-29 14:58:09"
        }
      }
    },
    "points_of_interest": {
      "rows": 300,
      "columns": {
        "poi_id": {
          "nulls": 0,
          "distinct": 300,
          "min": 1,
          "max": 300
        },
        "name": {
          "nulls": 0,
          "distinct": 197
        },
        "description": {
          "nulls": 0,
          "distinct": 299
        },
        "location": {
          "nulls": 30,
          "distinct": 270
        },
        "category": {
          "nulls": 0,
          "distinct": 4,
          "min": "cultural",
          "max": "natural"
        }
      }
    },
    "route_pois": {
      "rows": 600,
      "columns": {
        "route_poi_id": {
          "nulls": 0,
          "distinct": 600,
          "min": 1,
          "max": 600
        },
        "route_id": {
          "nulls": 0,
          "distinct": 309,
          "min": 2,
          "max": 399
        },
        "poi_id": {
          "nulls": 0,
          "distinct": 257,
          "min": 1,
          "max": 300
        }
      }
    },
    "feedback": {
      "rows": 500,
      "columns": {
        "feedback_id": {
          "nulls": 0,
          "distinct": 500,
          "min": 1,
          "max": 500
        },
        "user_id": {
          "nulls": 0,
          "distinct": 186,
          "min": 1,
          "max": 200
        },
        "poi_id": {
          "nulls": 0,
          "distinct": 241,
          "min": 1,
          "max": 299
        },
        "rating": {
          "nulls": 0,
          "distinct": 5,
          "min": 1,
          "max": 5
        },
        "comment": {
          "nulls": 47,
          "distinct": 453
        },
        "created_at": {
          "nulls": 0,
          "distinct": 500,
          "min": "2022-01-06 01:56:01",
          "max": "2023-12-30 21:56:47"
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/points_of_interest.csv",
      "format": "csv",
      "table": "points_of_interest",
      "key": "datasets/customizable-travel-maps-app/v3/csv/points_of_interest.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/csv/points_of_interest.csv",
      "bytes": 37853,
      "sha256": "3777521096a7f34707090428b87cc7ffd6a52708d8d768e969787fcdcef6e452",
      "rows": 300,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/users.csv",
      "format": "csv",
      "table": "users",
      "key": "datasets/customizable-travel-maps-app/v3/csv/users.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/csv/users.csv",
      "bytes": 9451,
      "sha256": "a3e740cbbb513c0361e6a4f9ab779d20f65d1c0d90fd54d4df118d9c375c7b8a",
      "rows": 200,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/feedback.csv",
      "format": "csv",
      "table": "feedback",
      "key": "datasets/customizable-travel-maps-app/v3/csv/feedback.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/csv/feedback.csv",
      "bytes": 93117,
      "sha256": "643f850d73d8b7bc5146b168ff47fc11082317e44d5fb9b0940e49a0607e23ce",
      "rows": 500,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/routes.csv",
      "format": "csv",
      "table": "routes",
      "key": "datasets/customizable-travel-maps-app/v3/csv/routes.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/csv/routes.csv",
      "bytes": 16669,
      "sha256": "b5d043c7c97d90b0bfb6c0c1e7162cbffebfb3c331bf295b5a0ff64f941f4af8",
      "rows": 400,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/route_pois.csv",
      "format": "csv",
      "table": "route_pois",
      "key": "datasets/customizable-travel-maps-app/v3/csv/route_pois.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/csv/route_pois.csv",
      "bytes": 7359,
      "sha256": "6b9c3f860a9d5b1081ebdabc776d6913f4315d490f3dafbd5cd859a565d6f123",
      "rows": 600,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "customizable-travel-maps-app.json",
      "format": "json",
      "table": null,
      "key": "datasets/customizable-travel-maps-app/v3/customizable-travel-maps-app.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/customizable-travel-maps-app.json",
      "bytes": 366859,
      "sha256": "eff2d6532b418e398eee4232e8f4420ab73a8d028702fc0aa0dd427974a747a3",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/customizable-travel-maps-app/v3/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/sql/postgres.sql",
      "bytes": 192067,
      "sha256": "7b60a12ab56bed5b9c3e62d7de2bcb9df9a864f2e376102636b32825976689d5",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/customizable-travel-maps-app/v3/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/sql/mysql.sql",
      "bytes": 191423,
      "sha256": "eed93c7a65fd2feba6565734c209f31ac1ff60270bd251f83c6d1380edef7230",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/customizable-travel-maps-app/v3/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/sql/mssql.sql",
      "bytes": 195194,
      "sha256": "284a4ea083b8ab82cc64d0a50ba361ea53918e717bb0bb9e1f5e3e1ba1c98b49",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/customizable-travel-maps-app/v3/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/sql/sqlite.sql",
      "bytes": 191224,
      "sha256": "7cb501b69ebcfe7bc3f0d3e5b2c8d35cd3047a7226923f8c4c854ab3255cd3b1",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/customizable-travel-maps-app/v3/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/prisma/seed.ts",
      "bytes": 307299,
      "sha256": "33333b1fc9b723af69d91008a669671df371fefa9abd57f2f6c48e0bd68a72b9",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/customizable-travel-maps-app/v3/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/customizable-travel-maps-app/v3/django/fixtures.json",
      "bytes": 435752,
      "sha256": "999146823e762208fa7bbb338b8328fbf3d98ed4a1cd10db2993e4b5fbd16829",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788768224759,
  "updatedAt": 1788783285389
}
